本文转载:
在 的这篇文章中【】只使用了一个数据表,效果如图2
我想使用多个表来生成动态的treeview,效果如图三,代码如下所示
在第二次与第三次的代码中,代码出现重复,中间只是改了表名、列名
多个表之间,是否也可以实现递归呢,不管它的表名与列名是否相同?
protected DataSet BindDate(string select)
{ Database db = DatabaseFactory.CreateDatabase(); DbCommand cmd = db.GetSqlStringCommand(select); DataSet ds = db.ExecuteDataSet(cmd); return ds; }public void BindTree()//第一次 {
DataSet ds = BindDate("select * from tree"); int count = ds.Tables[0].Rows.Count; for (int i = 0; i < count; i++) { TreeNode tn = new TreeNode(); tn.Text = ds.Tables[0].Rows[i]["Name"].ToString(); tn.Value = ds.Tables[0].Rows[i]["ID"].ToString(); BindRoot("select * from Root where ID='" + int.Parse(ds.Tables[0].Rows[i]["ID"].ToString()) + "'", tn); trvList.Nodes.Add(tn); } } public void BindRoot(string sql, TreeNode TN)//第二次 { DataSet ds = BindDate(sql); int count = ds.Tables[0].Rows.Count; for (int i = 0; i < count; i++) { TreeNode tn = new TreeNode(); tn.Text = ds.Tables[0].Rows[i]["Name"].ToString(); tn.Value = ds.Tables[0].Rows[i]["RootID"].ToString(); BindParent("select * from Parent where RootID='" + int.Parse(ds.Tables[0].Rows[i]["RootID"].ToString()) + "'", tn); TN.ChildNodes.Add(tn); } } public void BindParent(string sql, TreeNode TN)//第三次 { DataSet ds = BindDate(sql); int count = ds.Tables[0].Rows.Count; for (int i = 0; i < count; i++) { TreeNode tn = new TreeNode(); tn.Text = ds.Tables[0].Rows[i]["Name"].ToString(); tn.Value = ds.Tables[0].Rows[i]["RootID"].ToString(); TN.ChildNodes.Add(tn); } }}文件下载: