2009-07-15 9 views
2

L2Sクラスに5つのテーブルがあります。dbml:グローバル>>カテゴリ>>サブカテゴリ>>アイテム>>アイテムデータ。私はグローバルテーブルから構造に似たツリーをナビゲートしてアイテムにアクセスできるようにしたい - アイテムデータテーブルからタイトルを表示する。linqをSQL結果に階層構造に入れて、順序付けられていないリスト(jqueryツリー用)に使用する

私は、IHierarchyData/IHierarchicalEnumerable拡張コレクションを使用してコレクションを反復し、unqueredリストを出力してjqueryでツリーに変換する既存のコントロールを持っています。私はそれを基にしたReturn Un-Ordered List from hierarchical sql data

上記のテーブル構造からのデータを階層構造に入れて、既存のコントロールを再利用して別のコレクション。

答えて

0

私はあなたを掛けていると思うのは、これを行うために4つのテーブルが必要ないということです。

Return unordered list from hierarchical sql dataをもう一度見てください。そこには4つのテーブルはありません。ただ一つしかない。

+0

真実と私はその解決策 "ページ"テーブルのような自己参照データを持つ1つのツリーに対してそのソリューションを実装しました。私の問題では、私は別の木が欲しいと思っていました。私は基本的に4つの別々のテーブルを掘り下げて項目に入りたいと思っていました。 – Breadtruck

+0

質問を編集して、より明確にすることを願っています。 – Breadtruck

0

Union演算子を使用すると、4つのテーブルをマッシュさせることができます。 http://weblogs.asp.net/zeeshanhirani/archive/2008/04/11/union-operator-part-12.aspx

+0

@ロバーツ:そのコンセプトを使用しても、プライマリIDとparentIDが重複しているコレクションの項目では話せないでしょうか?私のグローバルキーは、構造内の各テーブルが1で始まったIDシードを使用するため、カテゴリキーと同じ場合があります。 – Breadtruck

+0

各テーブルの主キーにGUIDを使用しない場合は、もう一度単一テーブル設計に戻ります。 –

+0

私はこのインスタンスのために必要なことをすることができました。私はコードとその再利用できないことが好きではありません、私はちょうど子供のコレクションを持っているテーブルを取る方法があるだろうと思った別の子コレクションを作成し、これらのコレクションを使用してツリー/ネストされたリストを作成するような "階層的"な感じの構造を構築してください。 – Breadtruck

1

Nested Listviewsを試しましたか?私はいくつかのページでこのソリューションを実装しました。 LinqDataSourcesの代わりにObjectDataSourcesを使用して、データロジックを別々に保ちますが、入れ子になったEntitySetsは美しく動作します。

0

この場合、異なるタイプを扱っているので、コードを汎用化するために、それぞれに共通のインターフェースを実装する必要があります。基本的なアプローチは、必要なプロパティ(DisplayText、ActionURLなど)を含むインターフェイスを作成し、コレクションを繰り返し再帰的に反復することです。あなたがツリービューに含めるあなたのタイプのそれぞれのインターフェイスを実装する必要があります

public interface IDataItem 
    { 
     string DisplayText { get; } 
     string ActionUrl { get; } 
     bool HasChildren { get; } 
     IEnumerable<IDataItem> GetChildren(); 
    } 

public void CreateTree(HtmlTextWriter writer, IEnumerable<IDataItem> collection) 
    { 
     writer.WriteFullBeginTag("ul"); 
     foreach (var data in collection) 
     { 
      writer.WriteFullBeginTag("li"); 
      writer.WriteBeginTag("a"); 
      writer.WriteAttribute("href",data.ActionUrl); 
      writer.Write(HtmlTextWriter.TagRightChar); 
      writer.Write(data.DisplayText); 
      writer.WriteEndTag("a"); 
      if(data.HasChildren) 
       CreateTree(writer, data.GetChildren()); 
      writer.WriteEndTag("li"); 
     } 
     writer.WriteEndTag("ul"); 
    } 

はここでラフな例です。トップレベルの型と上記のメソッドのコレクションのちょうどパスは、必要な入れ子リストを作成する階層を歩き回ります。

関連する問題