c# winform treeview加载数据的问题
我的数据库表:
A B C
01 财务部 小明
02 业务部 小花
03 财务部 小刚
04 业务部 小李
我想加载的时候自动识别部门,然后在里面加名字
比如:
财务部
小明
小刚
业务部
小花
小李
怎样实现呀,不熟悉,那个高手给些代码参考下,谢谢
[解决办法]
按部门分组,使用group by
[解决办法]
class NodeData{
public int iType = 0; //0:部门 1:人员
pubic int ID = 0; //
public string Name = " ";
}
data = new new NodeData( "部门1 ",0,1)
node = tv.Nodes.Add(data.Name);
node.Tag = data;
data = new NodeData( "员工 ",1,3)
node.Node.Add(data.Name)
node.Tag = data;
[解决办法]
DataRow[] rows = table.Select("B='财务部'");
[解决办法]
先加载部门节点,然后加载当前部门下的人员节点,递归实现!
[解决办法]
你说的部门分类主要就是parentID的原因吧,你把节点过滤下就行,比如:
private void InitTree(TreeNodeCollection tnc, int parentid)
{
DataView dv = new DataView();
TreeNode tmpNode;
dv.Table = RhytonIAASVM.Web.BLL.SysManage.Permission.GetList().Tables[0];
dv.RowFilter = "parentid=" + parentid + "";//节点过滤
foreach (DataRowView dr in dv) {
tmpNode = new TreeNode();
tmpNode.Value = dr["permid"].ToString();
tmpNode.Text = dr["permname"].ToString();
//tmpNode.NavigateUrl = "#";
tmpNode.ShowCheckBox = true;
tnc.Add(tmpNode);
InitTree(tmpNode.ChildNodes,int.Parse(tmpNode.Value));
}
}
#region 初始化权限树
private void InitData() {
this.TreeView1.Nodes.Clear();
InitTree(TreeView1.Nodes, 0);
checkNode(TreeView1);
}
#endregion
[解决办法]
动态加载就用循环就好了。
- C# code
string strsql = "Select Department from UserInfo group by Department";DataSet DsforTree = new DataSet();DsforTree = ObjectMaster.GetDatasetBySql(strsql, "UserInfo");//这是获取DataSetfor (int i = 0; i < DsforTree.Tables[0].Rows.Count; i++){ treeView1.Nodes.Add(DsforTree.Tables["UserInfo"].Rows[i]["Department"].ToString()); treeView1.Nodes[i].ImageIndex = 0; string SQLsentence = "Select * from UserInfo where Department='" + treeView1.Nodes[i].Text + "'"; DataSet DsforTreeofaDepartment = new DataSet(); DsforTreeofaDepartment = ObjectMaster.GetDatasetBySql(SQLsentence, "UserInfo"); for (int j = 0; j < DsforTreeofaDepartment.Tables[0].Rows.Count; j++) { treeView1.Nodes[i].Nodes.Add(DsforTreeofaDepartment.Tables["UserInfo"].Rows[j]["nickname"].ToString()); treeView1.Nodes[i].Nodes[j].ImageIndex = 2; }}
[解决办法]
将数据先加载到一个 DataTable 中,这个不需要多说了吧
假设 DataTable 中字段名为 id, dept, name
窗体上有一 TreeView 控件名为 treeView1
下面的代码仅供参考
- C# code
private void Form1_Load(object sender, EventArgs e){ // 模拟数据加载 DataTable table = new DataTable(); table.Columns.AddRange( new DataColumn[] { new DataColumn("id", typeof(int)), new DataColumn("dept", typeof(string)), new DataColumn("name", typeof(string)) }); table.Rows.Add(new object[] { 1, "财务部", "小红" }); table.Rows.Add(new object[] { 2, "业务部", "小明" }); table.Rows.Add(new object[] { 3, "财务部", "小花" }); table.Rows.Add(new object[] { 4, "财务部", "小刚" }); table.Rows.Add(new object[] { 5, "业务部", "小李" }); // 利用 LINQ 进行查询和数据转换 var data = table.Rows.Cast<DataRow>() .Select(row => new { id = Convert.ToInt32(row["id"]), dept = row["dept"] == null ? "" : row["dept"] as string, name = row["name"] == null ? "" : row["name"] as string, }); // 加载部门和人员并直接生成 TreeNodes var depts = data .Select(row => row.dept) .Distinct() .Select(d => new TreeNode(d, data .Where(row => row.dept == d) .Select(row => new TreeNode(row.name)).ToArray())) .ToArray(); treeView1.Nodes.AddRange(depts);}
[解决办法]
public void finddb(sqlstr)
{
string str = "Integrated Security=SSPI;Persist Security Info=False;" +
"Initial Catalog="数据库名";Data Source="服务器ip地址";--如果是本机可以默认为 Data Source="."
SqlCommand cm;
SqlDataAdapter da = new SqlDataAdapter(sqlstr ,str);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataTable table = new DataTable();
da.Fill(table);
}
public void addTreeView()
{
string strSql="select distinct B from 据库表"
DataSet dsBm=new DataSet();
dsBm.Table[0]=finddb(strSql);
strSql="select * from 据库表"
DataSet dsRy=new DataSet();
dsRy.Table[0]=finddb(strSql);
TreeNode myTreeNode = new TreeNode();
for(int i=0;i<dsBm.Table[0].Rows.Count;i++)
{
myTreeNode.Text=dsBm.Table[0].Rows[i]["B"].Value.ToString();
this.treeView1.Nodes.Add(myTreeNode);
DataRow[] rowRy=dsRy.table[0].Select("B='"+myTreeNode.Text+"'")
for(int j=0;j<rowRy.Lenth;j++)
{
myTreeNode.TextrowRy.Rows[j]["C"].Value.ToString();
this.treeView1.Nodes[i].Nodes.Add(myTreeNode);
}
}
}
没有调试可能有些语法错误;
[解决办法]
http://www.cnblogs.com/sndnnlfhvk/archive/2011/03/31/2001064.html
http://www.cnblogs.com/peterzb/archive/2009/06/08/1499131.html