求递归生成树的代码? pid name parentid 1 a 2 b 1 3 c 2 4 e 2 5 f 6 g 5 7 h 5 8 w 6要这样效果的树。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 pid name parentid1 a 2 b 13 c 24 e 25 f 6 g 57 h 58 w 6 9 q 810 r 8 我要把树显示在treeview上 //*****Build TreeView Node Code Next:public void XT_GNML_Build_TreeNode(ref TreeView treview){ //****get database DataSet DSet=(new ServerPropx.Servers()).XT_GNML_Base_Filter(""): //***clear treeview Node treview.Nodes.Clear(); //****create treenode object TreeNode TRPNode=null; //****load node foreach(DataRow dRow in DSet.Table[0].Rows) { //****load Parnet dataset is zerno if(dRow["F_Parent"].ToString()=="0") { TRPNode=new TreeNode(): TRPNode.Text=dRow["F_MC"].ToString(); TRPNode.ID=dRow["F_ID"].ToString(): } //***Add TteeNode treview.Nodes.Add(TRPNode); //*****filter chile Node DataRow[] dCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'"); XT_GNML_LoadChileTreeNode(ref dCRow,TRPNode,DSet); }}private void XT_GNML_LoadChileTreeNode(ref DataRow[] dCRow,TreeNode TRCPNode,ref DataSet DSet){ foreach(DataRow dRow in dCRow) { TreeNode TREPNode=new TreeNode(); TREPNode.Text=dRow["F_MC"].ToString(); TREPNode.ID=dRow["F_ID"].ToString(): //**** Add Chile Node TRCPNode.Nodes.Add(TREPNode); //*****filter chile Node DataRow[] dPCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'"); //***foreach load TreeNode XT_GNML_LoadChileTreeNode(ref dPCRow,TREPNode,DSet); }} DataRow[] dPCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'"); ??? // 生成树void DeptDataFill(){ DataTable dt = new SqlQuery().DtQuery("select [pid],[name],[parentid] from [table1] order by [pid]"); if (dt == null) return; foreach (DataRow dr in dt.Rows) { TreeNode node = new TreeNode(dr["name"].ToString(), dr["pid"].ToString()); node.SelectAction = TreeNodeSelectAction.Select; if (dr["parentid"] is DBNull || dr["parentid"].ToString() == "") { trvDept.Nodes.Add(node); } else { TreeNode node1 = FindNode(trvDept.Nodes, dr["parentid"].ToString()); if (node1 != null) node1.ChildNodes.Add(node); } }}// 查找节点TreeNode FindNode(TreeNodeCollection nodes, string value){ foreach (TreeNode node in nodes) { if (node.Value == value) return node; TreeNode node1 = FindNode(node.ChildNodes, value); if (node1 != null) return node1; } return null;} dr["parentid"] is DBNull ??? 判断 parentid 在数据库中是否为 null 呀。当然,这句省略也可以,因为 System.DBNull.Value.ToString() == "" ,后面也会判断出来。 if (dr["parentid"] is DBNull || dr["parentid"].ToString() == "") { trvDept.Nodes.Add(node); }改成 if (dr["parentid"].ToString() == "") { trvDept.Nodes.Add(node); }也可以,无所谓的啦。 用treeview可以,但要手动绑定 gridview 删除操作后如何更新控件中的数据? 如何把页面的Table导出到Word 急,急,急,急需这样的代码 问个正则的小问题 .net程序设计 3楼楼长的OA系统应该怎么改用户名和密码阿 Timer 如何使用? 【求助】ASP.NET中如何在类中使用ViewState? 请问如何把自己写的类加入到system.web程序集? 如果CheckBoxList有多选,请问如何只返回当前所选择的索引序号? 如何将存储过程返回的数据集进行分页绑定? javascript相加控件值
1 a
2 b 1
3 c 2
4 e 2
5 f
6 g 5
7 h 5
8 w 6
9 q 8
10 r 8
{
//****get database
DataSet DSet=(new ServerPropx.Servers()).XT_GNML_Base_Filter(""):
//***clear treeview Node
treview.Nodes.Clear();
//****create treenode object
TreeNode TRPNode=null;
//****load node
foreach(DataRow dRow in DSet.Table[0].Rows)
{
//****load Parnet dataset is zerno
if(dRow["F_Parent"].ToString()=="0")
{
TRPNode=new TreeNode():
TRPNode.Text=dRow["F_MC"].ToString();
TRPNode.ID=dRow["F_ID"].ToString():
} //***Add TteeNode
treview.Nodes.Add(TRPNode);
//*****filter chile Node
DataRow[] dCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'");
XT_GNML_LoadChileTreeNode(ref dCRow,TRPNode,DSet);
}
}
private void XT_GNML_LoadChileTreeNode(ref DataRow[] dCRow,TreeNode TRCPNode,ref DataSet DSet)
{
foreach(DataRow dRow in dCRow)
{
TreeNode TREPNode=new TreeNode();
TREPNode.Text=dRow["F_MC"].ToString();
TREPNode.ID=dRow["F_ID"].ToString(): //**** Add Chile Node
TRCPNode.Nodes.Add(TREPNode); //*****filter chile Node
DataRow[] dPCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'"); //***foreach load TreeNode
XT_GNML_LoadChileTreeNode(ref dPCRow,TREPNode,DSet);
}
}
// 生成树
void DeptDataFill()
{
DataTable dt = new SqlQuery().DtQuery("select [pid],[name],[parentid] from [table1] order by [pid]");
if (dt == null) return;
foreach (DataRow dr in dt.Rows)
{
TreeNode node = new TreeNode(dr["name"].ToString(), dr["pid"].ToString());
node.SelectAction = TreeNodeSelectAction.Select;
if (dr["parentid"] is DBNull || dr["parentid"].ToString() == "")
{
trvDept.Nodes.Add(node);
}
else
{
TreeNode node1 = FindNode(trvDept.Nodes, dr["parentid"].ToString());
if (node1 != null) node1.ChildNodes.Add(node);
}
}
}// 查找节点
TreeNode FindNode(TreeNodeCollection nodes, string value)
{
foreach (TreeNode node in nodes)
{
if (node.Value == value) return node;
TreeNode node1 = FindNode(node.ChildNodes, value);
if (node1 != null) return node1;
}
return null;
}
判断 parentid 在数据库中是否为 null 呀。当然,这句省略也可以,因为 System.DBNull.Value.ToString() == "" ,后面也会判断出来。
{
trvDept.Nodes.Add(node);
}
改成
if (dr["parentid"].ToString() == "")
{
trvDept.Nodes.Add(node);
}
也可以,无所谓的啦。