A
----A1
--------A11
--------A12
----A2
--------A21
--------A22
--------A23
------------A231
------------A232比如,我可能只显示A11,A12和A2以及他的所有节点。
因为A11,A12是属于A1,但A1不显示,这时A11,A12要自动放到根节点,就是要这样显示A11
A12
A2
----A21
----A22
----A23
--------A231
--------A232问下如何能做到?数据表有记录他的父节点是哪个。数据表大概这样ID,Title,FatherID
----A1
--------A11
--------A12
----A2
--------A21
--------A22
--------A23
------------A231
------------A232比如,我可能只显示A11,A12和A2以及他的所有节点。
因为A11,A12是属于A1,但A1不显示,这时A11,A12要自动放到根节点,就是要这样显示A11
A12
A2
----A21
----A22
----A23
--------A231
--------A232问下如何能做到?数据表有记录他的父节点是哪个。数据表大概这样ID,Title,FatherID
解决方案 »
- 请问反射在.NET中的作用是什么?
- 如何用gridview实现批量输入
- 请问我生成的html页面执行的速度很慢,如何处理
- 请推荐几个免费支持asp.net服务器,数据库是SQL2005。或者是几天试用的也可以!
- 关于gridview和dropdownlist
- dropdownlist中如何实现默认值(帮定自数据库)
- 实现VS2005英文版转换为简体中文RTM版本的两种方法疑问
- 服务器端代码外置问题,请达者解释一下.
- 在[webmethod]下的函数的返回值类型能不能是数组类型的?
- 请教:DataGrid控件(web)中的HyperLindColumn列
- asp.net转译Excel的问题?
- 关于zedgraphweb曲线显示y轴数据问题
private void BindJG()
{
DataSet ds = new DataSet();
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
} protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["ID"].ToString();
node.Text = Row["TITLE"].ToString();
node.NavigateUrl = "";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["ID"].ToString(), node);
}
else
{
node.Text = Row["TITLE"].ToString();
node.Value = Row["ID"].ToString();
fatherNode.ChildNodes.Add(node);
}
}
}
如果数据量大的话,建议使用类似分页的做法
/// <summary>
/// 递归绑定treeview
/// </summary>
/// <param name="dt">你要绑定的数据</param>
/// <param name="tn">当前节点</param>
void digui(DataTable dt, TreeNode tn)
{
try
{
DataRow[] dr = dt.Select("parentid=" + tn.Value);
for (int i = 0; i < dr.Length; i++)
{
TreeNode t = new TreeNode();
t.SelectAction = TreeNodeSelectAction.None;
t.Text = dr[i]["context"].ToString();
t.Value = dr[i]["id"].ToString();
tn.ChildNodes.Add(t);
digui(dt, t);
}
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
似乎不行吧,正常递归显示我也有类似代码。
但你试试删除A,A1,然后再递归试试。至于是否存在A,A1,是需要程序判断的。
<Nodes>
<asp:TreeNode Text="A" Checked="true" >
<asp:TreeNode Text="A1" Checked="true">
<asp:TreeNode Text="A11" />
<asp:TreeNode Text="A12" />
</asp:TreeNode>
<asp:TreeNode Text="A2">
<asp:TreeNode Text="A21" />
<asp:TreeNode Text="A22" />
<asp:TreeNode Text="A23">
<asp:TreeNode Text="A231" />
<asp:TreeNode Text="A232" />
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView><script runat="server"> void Page_Load(object sender, EventArgs e)
{
TreeNode[] nodes = TreeView1.Nodes.Cast<TreeNode>().ToArray();
TreeView1.Nodes.Clear();
TrimNodes(nodes, TreeView1.Nodes);
} private void TrimNodes(TreeNode[] nodes, TreeNodeCollection result)
{
foreach (TreeNode node in nodes)
{
TreeNode child = (node as ICloneable).Clone() as TreeNode;
if (!node.Checked)
result.Add(child);
TrimNodes(node.ChildNodes.Cast<TreeNode>().ToArray(), node.Checked ? result : child.ChildNodes);
}
}
</script>