2012-01-26 11 views
0

私はasp.netのTreeViewを初めて使いました。
SQLAdapterによってデータが取得されるDataTableがあります。それは含まれています:
私はデータを置くか、次のようになりTreeViewコントロールを作成する方法を知りたいASP.NETのTreeViewオブジェクトを実装する

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

を:

 
    Selection 
     Corporate 
      Division 
       Region 
        House(s) 

私はこれを行う方法についての研究に多くの時間を費やしています私はその頭の中で私の頭を包み込むことはできません私はそれが私のデータはそれが行うことが困難になるDataTableにあるかどうかは分かりません。

これは、ユーザーがその特定のコーポレート/ディビジョン/地域/ハウスにアクセスできるかどうかに基づいているため、管理者用のツリービューにすべてを表示したいのですが、 。
私は、データテーブルを正しく埋めるSQLを取得する限り、それは問題になるとは思わない。私の懸念事項は、複製された地域/部門です。また、それらを複数回ではなく1回だけ表示させるにはどうすればいいですか?

ありがとうございました。
ニック

+0

どのバージョンのASP.NETとSQL Serverですか? –

+0

VS2010 .NET Framework 4.0、SQL Server 2008 –

答えて

0

基本的には、ツリービューに表示する階層を模倣するオブジェクト(井戸、コレクション)が理想的です。

私はあなたの質問にそれを提示してデータベースから来ているリストがあると仮定しています、と私はたぶん、あなたは、このような階層的なコレクションを作成するためにLINQを使用することができます「選択」欄が

が含まれていることを仮定しています。あるいは、あなたはそのコレクションを作成する必要さえないかもしれません - 例えばlinqやいくつかのルーピングを使ってデータレコードを繰り返していくうちに、ツリービューの作成を開始することができます。

あり、いくつかのよりエレガントな方法かもしれないが、このような何か作業をする必要があります:私は2つだけを持って

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

この場合:

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コントロールのレベルを変更することはできますが、必要な数だけネストできます。

関連する問題