2

L2Sクラスdbmlに5つのテーブルがあります:グローバル>>カテゴリ>>サブカテゴリ>>アイテム>>アイテムデータ。グローバルテーブルからツリーのような構造を下ってアイテムに移動できるようにしたいのですが、アイテムデータテーブルのタイトルを表示しています。

IHierarchyData / IHierarchicalEnumerable拡張コレクションを使用して、コレクションを反復処理して順序付けされていないリストを出力し、それをjqueryでツリーに変換する既存のコントロールがあります。階層SQLデータからUn-OrderedListを返すことに基づいて実行しました

上記のテーブル構造のデータを階層構造に入れて、既存のコントロールを再利用し、別のコレクションを渡すことができる、簡単で一般的な方法はありますか?

4

4 に答える 4

1

Nested Listviewsを試しましたか? このソリューションをいくつかのページに実装しました。LinqDataSources の代わりに ObjectDataSources を直接使用してデータ ロジックを分離していますが、入れ子になった EntitySets は美しく機能します。

于 2009-09-22T17:30:33.873 に答える
0

Union演算子を使用して、4つのテーブルを一緒にマッシュアップできます。 http://weblogs.asp.net/zeeshanhirani/archive/2008/04/11/union-operator-part-12.aspx

于 2009-07-17T20:44:58.870 に答える
0

あなたを悩ませているのは、これを行うのに 4 つのテーブルは必要ないということだと思います。

Return unordered list from hierarchy sql dataをもう一度見てください。そこには4つのテーブルはありません。ひとつだけ。

于 2009-07-17T19:45:51.393 に答える
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");
    }

ツリービューに含める各タイプにインターフェイスを実装する必要があります。最上位の型のコレクションを渡すだけで、上記のメソッドは必要なネストされたリストを作成する階層をたどります。

于 2009-10-12T19:53:41.753 に答える