如题winfrom里TreeView怎么剔除重复值,我的代码在下面怎么在我的基础上改阿,我是新手,回答的时候请写上在哪加入语句,万分谢谢!!
用户A(这项不能重复)
角色A(从数据库中拿,有几个拿几个,这项在一个“用户”内不能重复)
权限A(这项在一个“角色”内不能重复)
权限B
角色B(从数据库中拿,有几个拿几个)
......
用户B
角色A
......
麻烦各位写出代码小弟初学 走过路过看两眼,谢谢~~
private void Form2_Load(object sender, EventArgs e)
{
string username = value2;
treeView1.ShowLines = true;
SqlConnection con = new SqlConnection("server=Sofia;uid='" + username + "';pwd='" + username + "';database=renvecf");
con.Open();
SqlCommand com = new SqlCommand("select * from T_emp_view", con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = com;
DataSet ds = new DataSet();
da.Fill(ds, "T_emp_view");
//将数据绑定到dataGridView控件上
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T_emp_view";
SqlDataReader dr = com.ExecuteReader();
TreeNode newNode1 = treeView1.Nodes.Add("A", "用户信息", 1, 2);//一级节点
while (dr.Read())
{
TreeNode newNode12 = new TreeNode("用户名" + dr[1].ToString(), 3, 4);// 二级节点
//3表示没有单击节点时显示的图标索引值,
newNode12.Nodes.Add("A", "用户角色:" + dr[6].ToString(), 5, 6);
newNode12.Nodes.Add("B", "用户角色:" + dr[6].ToString(), 7, 8);
newNode12.Nodes.Add("C", "用户角色:" + dr[6].ToString(), 9, 10);
newNode1.Nodes.Add(newNode12);
}
dr.Close();
con.Close();
treeView1.ExpandAll();
}
------解决思路----------------------
既然是从数据库中查询 在查询显示之前 去掉 重复。关键字:Distinct
http://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html
------解决思路----------------------
你这个怎么看都看不懂……
你先通过DataSet去拿到了select * from T_emp_view的查询结果,并进行绑定,然后却又执行了ExecuteReader方法来一个个读,既然已经有了DataSet,那后面根本没必要执行ExecuteReader,直接循环ds.Tables["T_emp_view"]就可以了
然后后面你的用户怎么对应角色,然后角色怎么对应权限,你就这个查询结果,谁能知道……
这里假定你的view查出了所有的新,包括有多少用户,对应字段为UserName,然后角色对应字段为RoleName,最后权限对应字段为AuthorityName,那TreeNode代码就应该是类似下面的
DataSet ds = new DataSet();
DataTable dt = ds.Tables["T_emp_view"];
TreeNode root = new TreeNode();//这里就对应你的Tree
var query = from r in dt.AsEnumerable()
group r by r.Field<string>("UserName") into g
select g;
foreach (var g in query)
{
TreeNode nameNode = new TreeNode();
nameNode.Text = g.Key;//用户姓名
root.Nodes.Add(nameNode);
var roleQuery = g.GroupBy(x => x.Field<string>("RoleName"));
foreach(var r in roleQuery)
{
TreeNode roleNode = new TreeNode();
roleNode.Text = r.Key;//角色名称
nameNode.Nodes.Add(roleNode);
foreach (var a in r)
{
TreeNode authNode = new TreeNode();//权限名称
authNode.Text = a.Field<string>("AuthorityName");
roleNode.Nodes.Add(authNode);
}
}
}
------解决思路----------------------
我给的已经是完整版了啊……
用到了泛型,Linq,然后你这个迭代都不需要,因为看你视图查询出来的已经是全的数据了(猜的)
------解决思路----------------------
从数据源 剔除