我试图使用下面创建一个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
更多推荐
发布评论