2016-01-28 82 views
0

我试图创建一个ASP,使用下面在asp.net中绑定树视图结构?

<!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> 

和明码净树状结构背后

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); 
     } 
    } 

但它给出了一个例外

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

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

回答

0

问题就出在你的递归调用在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