//递归的例子 private void CreatMenuItem() { OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Menu.mdb;Persist Security Info=False;"); OleDbCommand myComm = new OleDbCommand("SELECT nid,name,pid FROM Items ORDER BY pid,nid",myConn); OleDbDataAdapter myAda = new OleDbDataAdapter(myComm); DataSet ds = new DataSet(); myAda.Fill(ds,"MenuItemINfos"); DataRow [] drs = ds.Tables["MenuItemINfos"].Select("pid = 0"); int index = 0; foreach(DataRow dr in drs) { MenuItem mi =new MenuItem((string)dr["name"]); this.mainMenu1.MenuItems.Add(index++,mi); CreatBranch(mi,(int)dr["nid"],ds); } } private void CreatBranch(MenuItem parmt,int pid,DataSet ds) { int index = 0; foreach(DataRow dr in ds.Tables["MenuItemINfos"].Select("pid = "+pid)) { MenuItem mi =new MenuItem((string)dr["name"]); parmt.MenuItems.Add(index++,mi); CreatBranch(mi,(int)dr["nid"],ds); } }
{
System.Windows.Forms.TreeNode n = new System.Windows.Forms.TreeNode();
//节点值
n.Text=text;
//节点隐藏值
n.Tag=Tag;
return n;
}//求部门节点,根据上级部门来决断
private void getTreeNode(int BmID, System.Windows.Forms.TreeNodeCollection nodes,DataTable Table)
{
//指定搜索条件对结果集进行查询,BmID为上级部门ID
string seaTJ="ParentOrgUnitId="+BmID+"";
DataRow[] foundRows;
foundRows=Table.Select(seaTJ,"OrgUnitId"); foreach(DataRow item in foundRows )
{
object[] items=item.ItemArray ;
string item_text=items[1].ToString().Trim();
int Tag;
Tag=int.Parse(items[0].ToString());
nodes.Add(node(item_text,Tag));
}
//重新调用getTreeNode 函数,得到下一级节点
for(int i=0;i<foundRows.Length;i++)
{
this.getTreeNode(int.Parse(foundRows[i]["OrgUnitId"].ToString()),nodes[i].Nodes,Table);
}
}Table为你的数据集
假设你的最上一级id为0
执行时应为
this.getTreeNode(0,this.treeView1.Nodes,Table);
相当漂亮和功能丰富的控件集合。
不过,要是自己想了解一下这方面的技术的话,dotNetBar和dotNetMagic又有源码公开,非常具有可参考的形式和结构。
:-)
private void CreatMenuItem()
{
OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Menu.mdb;Persist Security Info=False;");
OleDbCommand myComm = new OleDbCommand("SELECT nid,name,pid FROM Items ORDER BY pid,nid",myConn);
OleDbDataAdapter myAda = new OleDbDataAdapter(myComm);
DataSet ds = new DataSet();
myAda.Fill(ds,"MenuItemINfos");
DataRow [] drs = ds.Tables["MenuItemINfos"].Select("pid = 0");
int index = 0;
foreach(DataRow dr in drs)
{
MenuItem mi =new MenuItem((string)dr["name"]);
this.mainMenu1.MenuItems.Add(index++,mi);
CreatBranch(mi,(int)dr["nid"],ds);
}
}
private void CreatBranch(MenuItem parmt,int pid,DataSet ds)
{
int index = 0;
foreach(DataRow dr in ds.Tables["MenuItemINfos"].Select("pid = "+pid))
{
MenuItem mi =new MenuItem((string)dr["name"]);
parmt.MenuItems.Add(index++,mi);
CreatBranch(mi,(int)dr["nid"],ds);
}
}