各位大哥,小弟现在在做一个通过一个数据集的字段值对TreeView动态生成节点的问题,初步的想法是在数据表中设一个层的和子父节点的标志位,利用递归实现,请教各位大哥有什么好的在查询好的数据表中重新插入建表的方法和递归的方法!万分感谢……
目前主要是有多个表连接查询得到的 数据集
如
city
ID Name city_id
1 北京 BJ001
2 上海 SH001
state
ID Name city_state
S001 海淀 1
S002 西城 1
S003 浦东 2
S004 徐汇 2
使用 select * from city,state where city.ID = state.city_state
表名:City
ID Name city_id ParentID
1 北京 BJ001 0
2 上海 SH001 0
3 海淀 S001 1protected void Page_load()
{
if(!ispostback)
{
InitTree();
}
}//获取数据
private DataTable GetAllData()
{
string s="select * from City";
SqlConnection con=new SqlConnection(".....");
SqlDataAdapter cmd=new SqlDataAdapter(s,con);
DataSet ds=new DataSet();
cmd.Fill(ds);
return ds.Tables[0];
}private InitTree(TreeNodeColliction tns,string parentid)
{
DataView dv=GetAllData().DefaultView();
dv.RowFilter="Parentid="+Parentid;
TreeNode tn;
foreach(DataRowView drv in dv)
{
tn=new TreeNode();
tn.Text=drv["name"].ToString();
tn.ID=drv["id"].ToString();//Vs.net 2003中的表示
/* Vs.net 2005中的表示
tn.Value=drv["id"].Tostring(); */
//Vs.net 2003
tns.Add(tn);
InitTree(tn.Nodes,tn.ID); /* Vs.net 2005中的表示
InitTree(tn.ChildNodes,tn.ID);*/ }
}
private void InitTree()
{
InitTree(TreeView1.Nodes,"0");
}
然后再循环加入第二层,这时候第一层的ID可以作为形成第二层节点参数。
parentID为null的是第一层节点,然后递规添加子节点
表最好是建为一个,如果实在不行,那先查出第一个表的数据,生成节点,并保存到一个数组中。然后在循环里通过上面那个InitTree(TreeNodeColliction tns,string parentid)方法来做
然后先提取一级节点,添加到TreeView中,交将ID设置到节点的Tag中,接着循环各个节点,以该节点的Tag为参数,提取父节点为该Tag值的数据,添加到该节点的子节点中。