回 帖 发 新 帖 刷新版面

主题:treeview问题

为了实现树形,如通讯录,一级节点有,亲人,朋友,同事;二级节点:亲人下有1,朋友有2,同事下有3
代码如下:
   myDataAdapter.SelectCommand.CommandText = "SELECT * FROM Groups WHERE 用户名='" + currentUser + "'";

            // 初始化myDataSet
            myDataSet.Clear();

            // 导入Groups表
            myDataAdapter.Fill(myDataSet, "Groups");


            DataTable dt = myDataSet.Tables["Groups"];

            // 初始化TreeView的分组
            TreeNode firstNode, secondNode;
            foreach (DataRow dr in dt.Rows)
            {
                 firstNode = new TreeNode();
                 firstNode.Text = (string)dr["组名"];
                 string groupname=(string)dr["组名"];
                 rootNode.Nodes.Add(firstNode);


                 myDataAdapter.SelectCommand.CommandText = "SELECT * FROM Records WHERE 用户名='" + currentUser + "' and  组名='" + groupname + "'";
                 MessageBox.Show(groupname);
                 // 导入Records表
                 myDataAdapter.Fill(myDataSet, "Records");
                 DataTable dt1 = myDataSet.Tables["Records"];
                 foreach (DataRow dr1 in dt1.Rows)
                 {
                     secondNode = new TreeNode();
                     secondNode.Text = (string)dr1["姓名"];
                     firstNode.Nodes.Add(secondNode);
                 }
             }
             
结果出现了
亲人下有1,朋友有1,2,同事下有1,2,3

问题就是:之前搜索出来的,在后面就会复制出来,怎么样才取消它啊??

回复列表 (共7个回复)

沙发

每次都要清空一次DataSet,Fill会追加

另外,其实一句SQL就可以解决了,你这样多次查询,效率比较低

板凳

你能否说详细一点啊,这样说我还是不懂啊,谢谢

3 楼

每次Fill之前都要myDataSet.Clear();

汗。。。这样清楚了吧

4 楼

foreach (DataRow dr in dt.Rows) 


dr会现错啊,集合已修改;枚举操作可能无法执行。

不行啊,大哥

5 楼

你先把组名列表存到一个数组之类里面,然后再循环获取各组内容
不可以直接修改关联着DataReader的DataSet

当然了,还是得说一句,你这种方法实现效率不高。看现在改起来也麻烦。

6 楼

有什么好方法吗?说来听听

7 楼

我在1楼里面提到了,1条SQL语句,给你写一下吧
"SELECT * FROM Groups WHERE 用户名='" + currentUser + "' GROUP BY 组名"

我来回复

您尚未登录,请登录后再回复。点此登录或注册