在asp.net中绑定树视图结构?(Binding a tree view structure , in asp .net?)

编程入门 行业动态 更新时间:2024-10-25 16:22:48
在asp.net中绑定树视图结构?(Binding a tree view structure , in asp .net?)

我试图使用下面创建一个asp,net treeview结构

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TreeView ID="TreeView1" runat="server" /> </div> </form>

而在Code背后

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) PopulateTreeView(); } private void PopulateTreeView() { DataTable treeViewData = GetTreeViewData(); AddTopTreeViewNodes(treeViewData); } private DataTable GetTreeViewData() { string selectCommand = "SELECT top 10 idx_client,idx_branch,client_name FROM tbl_client"; string conString =System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString(); SqlDataAdapter dad = new SqlDataAdapter(selectCommand, conString); DataTable dtblDiscuss = new DataTable(); dad.Fill(dtblDiscuss); return dtblDiscuss; } private void AddTopTreeViewNodes(DataTable treeViewData) { DataView view = new DataView(treeViewData); foreach (DataRowView row in view) { TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString()); TreeView1.Nodes.Add(newNode); newNode.PopulateOnDemand = true; AddChildTreeViewNodes(treeViewData, newNode); } } private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode) { DataView view = new DataView(treeViewData); foreach (DataRowView row in view) { TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString()); parentTreeViewNode.ChildNodes.Add(newNode); newNode.PopulateOnDemand = true; AddChildTreeViewNodes(treeViewData, newNode); } }

但它给出了一个例外

无法计算表达式,因为当前线程处于堆栈溢出状态

请指出需要进行哪些更改,因为我第一次使用此树视图如何解决异常。 任何人都可以帮助我。

I have tried to create a asp,net treeview structure using below

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TreeView ID="TreeView1" runat="server" /> </div> </form>

And in Code behind

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) PopulateTreeView(); } private void PopulateTreeView() { DataTable treeViewData = GetTreeViewData(); AddTopTreeViewNodes(treeViewData); } private DataTable GetTreeViewData() { string selectCommand = "SELECT top 10 idx_client,idx_branch,client_name FROM tbl_client"; string conString =System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString(); SqlDataAdapter dad = new SqlDataAdapter(selectCommand, conString); DataTable dtblDiscuss = new DataTable(); dad.Fill(dtblDiscuss); return dtblDiscuss; } private void AddTopTreeViewNodes(DataTable treeViewData) { DataView view = new DataView(treeViewData); foreach (DataRowView row in view) { TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString()); TreeView1.Nodes.Add(newNode); newNode.PopulateOnDemand = true; AddChildTreeViewNodes(treeViewData, newNode); } } private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode) { DataView view = new DataView(treeViewData); foreach (DataRowView row in view) { TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString()); parentTreeViewNode.ChildNodes.Add(newNode); newNode.PopulateOnDemand = true; AddChildTreeViewNodes(treeViewData, newNode); } }

But it gives an Exception

Cannot evaluate expression because the current thread is in a stack overflow state

Please point out what are the changes needed, because am using this treeview for the first time How i will solve the exception. Could any one help me.

最满意答案

问题出在AddChildTreeViewNodes中的递归调用:

private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode) { DataView view = new DataView(treeViewData); foreach (DataRowView row in view) { TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString()); parentTreeViewNode.ChildNodes.Add(newNode); newNode.PopulateOnDemand = true; // error caused by recursion below AddChildTreeViewNodes(treeViewData, newNode); // calls itself again REMOVE THIS } }

这里发生的是你正在插入视图的子节点,然后尝试在其中插入另一个子节点(这反过来会做同样的事情)。 这将继续发生,直到堆栈被烧毁。

我怀疑你真的不需要我标记为REMOVE THIS它的行

The problem lies in your recursive call in AddChildTreeViewNodes:

private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode) { DataView view = new DataView(treeViewData); foreach (DataRowView row in view) { TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString()); parentTreeViewNode.ChildNodes.Add(newNode); newNode.PopulateOnDemand = true; // error caused by recursion below AddChildTreeViewNodes(treeViewData, newNode); // calls itself again REMOVE THIS } }

What is happening here is that you are inserting a child node of your view and then try to insert another child node within it (which in turn will do the same thing). This will keep on happening until the stack is blown.

I suspect that you really don't need the line that I have marked as REMOVE THIS

更多推荐

本文发布于:2023-08-05 15:34:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1433997.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   绑定   结构   net   asp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!