有一个DeptList的数据库中有一张Dept表,如下:
***************************************************************
lngDeptId (int型),lngFatherId (int型) ,strDeptName (cha'r(10))
1 , 0 , 北京部
2 , 0 , 上海部
3 , 0 , 广州部
4 , 1 , 海淀分部
5 , 1 , 朝阳分部
6 , 1 , 西城分部
7 , 2 , 靖安分部
8 , 2 , 黄埔分部
9 , 4 , 知青路部门
10 , 4 , 北外分部门
11 , 8 , 黄埔分部1
12 , 8 , 黄埔分部2
********************************************************在以上的数据中,lngFatherId项的值确定当前部门的上级部门,例如:"知青路部门"的lngFatherId为4,其上级部门就是lngDeptId为4的"海淀分部".用TreeView列表显示数据库的结构.显示后的结构大概为北京部
海淀分部
知青路部门
北外分部门
朝阳分部
西城分部
上海部
靖安分部
黄埔分部
黄埔分部1
黄埔分部2
广州部
请教各位高手怎样用代码动态的加载子项???
***************************************************************
lngDeptId (int型),lngFatherId (int型) ,strDeptName (cha'r(10))
1 , 0 , 北京部
2 , 0 , 上海部
3 , 0 , 广州部
4 , 1 , 海淀分部
5 , 1 , 朝阳分部
6 , 1 , 西城分部
7 , 2 , 靖安分部
8 , 2 , 黄埔分部
9 , 4 , 知青路部门
10 , 4 , 北外分部门
11 , 8 , 黄埔分部1
12 , 8 , 黄埔分部2
********************************************************在以上的数据中,lngFatherId项的值确定当前部门的上级部门,例如:"知青路部门"的lngFatherId为4,其上级部门就是lngDeptId为4的"海淀分部".用TreeView列表显示数据库的结构.显示后的结构大概为北京部
海淀分部
知青路部门
北外分部门
朝阳分部
西城分部
上海部
靖安分部
黄埔分部
黄埔分部1
黄埔分部2
广州部
请教各位高手怎样用代码动态的加载子项???
之后用递归来实现,代码网上有,用google吧
{
this.treeView1.Nodes.Add(dt.Rows[i]["strDeptName"].ToString()); DataTable dt1=fun.GetDataL().Tables[0];//GetDataL查询 子节点 的信息方法
for(int a=0;a<dt1.Rows.Count;a++)
{
this.treeView1.Nodes[i].Nodes.Add(dt1.Rows[a]["strDeptName"].ToString());
}
}
}
TreeView tree;//这是Form中TreeView控件变量
//这是主调用方法
private void LoadTree()
{
DataView dv = new DataView(dt);
dv.RowFilter = "lngFatherId =0";//过滤出北京部、上海部等数据
FillTree(dvT,null);//这里假设TreeView无根结点,只有北京部、上海部等兄弟结点,如果有要结点,则用根结点的TreeNode代替null传入
}
//用于递归调用的方法
private void FillTree(DataView dvT,TreeNode node)
{
foreach(DataRowView drv in dvT)
{
TreeNode n = new TreeNode(drv.Row["strDeptName"].ToString());
if(node == null)
tree.Nodes.Add(n);
else
node.Nodes.Add(n);
DataView dvChild = new DataView(dt);
//获取当前部门的下级部门
dvChild.RowFilter = RowFilter = "lngFatherId =" + drv.Row["lngDeptId"].ToString();
FillTree(dvChild,n);//递归....
}
}这些代码我是随手写的,可能有语法错误。但思路我想是没有错的,楼主试试...
{
// treeView1.Nodes.AddRange(new TreeNode[] {new TreeNode("table1")});
exec myexec=new exec();
DataSet myDs=myexec.GetDs ("select name from Dept where perent=lngFatherId","name");
DataTable myDt=myDs.Tables [0];
// TreeNode node = treeView1.SelectedNode;
foreach(DataRow myDr in myDt.Rows)
{
TreeNode myptn=new TreeNode (myDr["name"].ToString());
treeView1.Nodes.Add(myptn);
myptn.ImageIndex=0;
myptn.SelectedImageIndex=2;
TreeNode myson=new TreeNode ("a");
myptn.Nodes.Add(myson);
}
} private void treeView1_AfterExpand(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
exec myexec=new exec();
string index1= e.Node.Text;
DataSet myDs1=myexec.GetDs("select strDeptName form Dept where strDeptName='"+index1)+ "'","ingdeptid");
int index2=myDs1.tables[0].rows[0][0].text;
DataSet myDs=myexec.GetDs ("select strDeptName from Dept where lngFatherId ='"+index2+ "'","name");
DataTable myDt=myDs.Tables [0];
TreeNode node = e.Node ;
node.Nodes.Clear ();
foreach(DataRow myDr in myDt.Rows)
{
TreeNode myptn=new TreeNode (myDr["name"].ToString());
node.Nodes.Add(myptn);
myptn.ImageIndex=1;
myptn.SelectedImageIndex=1;
}
}
////////////////////
public class exec
{
public exec()
{
}
public DataSet GetDs(string selectStr,string tablename)
{
// string StrConn="Auto Translate=True;Integrated Security=SSPI;User ID=sa;Data Source=SHOUJIANHONG;Tag with column collation when possible=False;Initial Catalog=Material;Use Procedure for Prepare=1;Provider=SQLOLEDB.1;Persist Security Info=False;Workstation ID=SHOUJIANHONG;Use Encryption for Data=False;Packet Size=4096";
// OleDbConnection myConn=new OleDbConnection (StrConn);
// myConn.Open ();
OleDbConnection myConn;
data myData=new data ();
myConn=myData.openDb ();
OleDbDataAdapter myAdapter=new OleDbDataAdapter (selectStr,myConn);
DataSet myDs=new DataSet ();
myAdapter.Fill (myDs,tablename);
myAdapter.Dispose() ;
myConn.Close();
return myDs;
}
}///////////////////
public class data
{
OleDbConnection myConn;
public data()
{
}
public OleDbConnection openDb()
{
string connStr="Integrated Security=SSPI;Packet Size=4096;Data Source=C27;Tag with column collation when possible=False;Initial Catalog=Material;Use Procedure for Prepare=1;Auto Translate=True;Persist Security Info=False;Provider=SQLOLEDB.1;Workstation ID=C27;Use Encryption for Data=False";
myConn=new OleDbConnection (connStr);
myConn.Open ();
return myConn;
}
public void closeDb()
{
myConn.Close ();
}
}
/// Rebuild Tree
/// </summary>
/// <param name="selectedIndex"></param>
private void rebuildTree( string selectedIndex )
{
// Initial Tree
TreeOperationDB treeOperation = new TreeOperationDB();
treeOperation.SetTreeView(tvDocDir); TreeOperationDB.ExpandTreeNode(selectedIndex,this.tvDocDir.Nodes[0]);
tvDocDir.SelectedNodeIndex = selectedIndex; // Set Initial
this.SetPageView(MainPageStatus.ViewStatusInit);
}/// <summary>
/// Expand Tree Node according to the selectindex
/// </summary>
/// <param name="NodePath"></param>
/// <param name="node"></param>
public static void ExpandTreeNode(string NodePath,TreeNode node)
{
string [] NodeIndex = NodePath.Split('.'); for(int i = 1;i < NodeIndex.Length ; i ++)
{
int Index = int.Parse( NodeIndex[i] ); node = node.Nodes[Index];
if( i == NodeIndex.Length -1 )
{
node.Expanded = false ;
}
else
{
node.Expanded = true ;
}
}
}/// <summary>
/// Building Tree
/// </summary>
/// <param name="nodeCollection"></param>
public void SetTreeView( TreeView docTree )
{
// Remove Existed Node
for(int i = 0 ; i < docTree.Nodes.Count;i++)
{
docTree.Nodes[i].Remove();
}
// Get Node Info
DataTable treeInfo = this.GetTreeData(); // Root Node
TreeNode root = this.GetRootNode();
docTree.Nodes.Add(root); // Building Tree
this.AddNode( treeInfo , docTree.Nodes[0].Nodes , "0" );
}
/// <summary>
/// Get All Node Info
/// </summary>
/// <returns></returns>
public DataTable GetTreeData()
{
DataBase db = new DataBase(); try
{
db.Open();
string checkSql = "SELECT * FROM T_DMS_TREE ORDER BY NodeText"; DataSet dsRst = new DataSet();
db.ExecSQL(checkSql,"T_DOCTREE",out dsRst);
return dsRst.Tables[0];
}
catch( Exception err )
{
throw err;
}
finally
{
db.Close();
}
}
/// <summary>
/// Get Root Of tree
/// </summary>
/// <returns></returns>
private TreeNode GetRootNode()
{
DataBase db = new DataBase(); try
{
db.Open();
string selectSql = "SELECT * FROM T_DMS_TREE WHERE NodeId = 0 "; DataSet dsRst = new DataSet();
db.ExecSQL(selectSql,"T_DOCTREE",out dsRst);
if( dsRst.Tables[0].Rows.Count == 0 )
{
throw new ApplicationException("No root node found!");
} DataRow dr = dsRst.Tables[0].Rows[0];
TreeNode node = new TreeNode(); node.ID = dr["NodeID"].ToString();
node.Text = dr["NodeText"].ToString();
node.NodeData = dr["UpdDate"].ToString() + "|" + dr["UpdUid"].ToString() ; return node;
}
catch( Exception err )
{
throw err;
}
finally
{
db.Close();
}
}
private void treeMenu_Reload(DataTable allNodeTable,string parentColValue,TreeView myTreeView,TreeNode ParentNode)
{
DataRow[] myDataRows = allNodeTable.Select("上级节点 = "+parentColValue);
foreach(DataRow myDataRow in myDataRows)
{
TreeNode myTableNode=new TreeNode();
myTableNode.Tag=myDataRow["节点编号"];
myTableNode.Text=myDataRow["节点名称"].ToString(); if(ParentNode != null)
ParentNode.Nodes.Add(myTableNode);
else
myTreeView.Nodes.Add(myTableNode); this.treeMenu_Reload(allNodeTable,myDataRow["节点编号"].ToString(),myTreeView,myTableNode);
}
}
#endregion//调用
sql = "SELECT QX_YH_BM as 节点编号,QX_YH_QM as 节点名称,'0' as 上级节点 FROM XT_QX_YH_TB ORDER BY QX_YH_QM ASC";//注意中文名称别名,我给固定住了
DataTable allNodeTable = myWs.GetDs(sql,"allNodeTable").Tables[0];//得到DataTable this.treeMenu_Reload(allNodeTable,"0",treeMenu,null);
private void treeMenu_Reload(DataTable allNodeTable,string parentColValue,TreeView myTreeView,TreeNode ParentNode)
{
DataRow[] myDataRows = allNodeTable.Select("上级节点 = "+parentColValue);
foreach(DataRow myDataRow in myDataRows)
{
TreeNode myTableNode=new TreeNode();
myTableNode.Tag=myDataRow["节点编号"];
myTableNode.Text=myDataRow["节点名称"].ToString(); if(ParentNode != null)
ParentNode.Nodes.Add(myTableNode);
else
myTreeView.Nodes.Add(myTableNode); this.treeMenu_Reload(allNodeTable,myDataRow["节点编号"].ToString(),myTreeView,myTableNode);
}
}
#endregion//调用
sql = "SELECT QX_YH_BM as 节点编号,QX_YH_QM as 节点名称,'0' as 上级节点 FROM XT_QX_YH_TB ORDER BY QX_YH_QM ASC";//注意中文名称别名,我给固定住了
DataTable allNodeTable = myWs.GetDs(sql,"allNodeTable").Tables[0];//得到DataTablethis.treeMenu_Reload(allNodeTable,"0",treeMenu,null);//treeMenu就是treeview的名字