2016-01-28 105 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