2012-01-26 69 views
0

我是asp.net中TreeView的新手,所以任何有關填充節點的幫助都會很棒。
我有一個由SQLAdapter填充的DataTable。它包含:
填充ASP.NET中的TreeView對象

 
    -House-   -Region-  -Division- 
    Aurora House  Arizona   Central 
    Copper Hills  Arizona   Central 
    Arbor House  DFW    Central 
    Angelina House Timberland  West 

我想知道如何將數據或創建一個TreeView,將類似於此:

 
    Selection 
     Corporate 
      Division 
       Region 
        House(s) 

我已經花了很多時間研究如何做到這一點我只是不能將我的頭圍繞在它上面我不知道它的數據是否在DataTable中,這使得它很難做到。

這是所有將基於如果用戶有權訪問特定的公司/部門/地區/房子,所以我希望有TreeView的管理員顯示一切,但其他人只顯示他們有權訪問。
我不認爲這會是一個問題,只要我得到填充數據表的SQL正確。我的擔心也是重複的地區/部門我怎麼也讓他們只出現一次而不是多次?

謝謝你的一切幫助。
尼克

+0

什麼版本的ASP.NET和SQL Server? –

+0

VS2010 .NET Framework 4.0,SQL Server 2008 –

回答

0

基本上,你最好喜歡有一個對象(好,集合),模仿你想與樹視圖呈現的層次結構。

我假設來自於數據庫中的表是你在你的問題提出了它,我假設「選擇」列中包含

也許你可以使用LINQ來創建這樣的分層集合。或者,甚至你甚至不需要創建該集合 - 也許你可以繼續,並在迭代數據記錄時開始構建樹視圖,例如使用linq和一些循環。

可能有一些更優雅的方式,但這樣的事情應該工作:

var selections = dt.Select(r => Convert.ToString(r["Selection"])).Distinct().ToList(); 

foreach (string selection in selections) 
{ 
    // create treeview node here; add to treeview 
    object selectionNode = null; // change type to treeview node type 

    var corporateList = dt.Where(r => Convert.ToString(r["Selection"]) == selection).Select(r => Convert.ToString(r["Corporate"])).Distinct().ToList(); 


    foreach (string corporate in corporateList) 
    { 
     // create treeview node here; add it as a child to selectionNode 
     object corporateNode = null; // change type to tv node 

     var divisions = dt.Where(r => Convert.ToString(r["Selection"]) == selection && Convert.ToString(r["Corporate"]) == corporate).Select(r => Convert.ToString(r["Division"])).Distinct().ToList(); 


     foreach (string div in divisions) 
     { 
      // create treeview node here; add it as a child to corporateNode 


     } 
    } 
} 
0

您可以動態創建一個TreeView控件是這樣的:

using (var db = new FORMS()) 
       { 
        //Get Chapters from selected form 
        var query = from b in db.CHAPTERS 
           select b; 

        //Create treeview hierarchy 
        foreach (var rootItem in query) 
        { 
         TreeNode myNode = new TreeNode(rootItem.titulo, rootItem.id.ToString()); 

         var childQuery = from b in db.SECTIONS 
             where b.idChapter = rootItem.id 
             select b; 
         //Add childs 
         foreach (var childItem in childQuery) 
         { 
          TreeNode myChildNode = new TreeNode(childItem.titulo, childItem.id.ToString()); 
          myNode.ChildNodes.Add(myChildNode); 
         } 

         ChapterTreeView.Nodes.Add(myNode); 
        } 
       } 

在這種情況下,我只有兩個級別爲我的TreeView控件,但您可以根據需要嵌套多個。