日期:2014-05-18  浏览次数:20991 次

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");//这是获取DataSet
for (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 obj