0

次の3つのテーブルがあります。テーブル1はCat1と呼ばれ、テーブル2はsubcat1と呼ばれ、テーブル3はitemsTbと呼ばれます。私はこのような関係を作成しました:

cat1からsubcat1(1対多)cat1からitemstb(1対多)subcat1からitemstb(1対多)

次のようなasp.netリピーターにアイテムを表示したいと思います。

cat 1....
   ....item 1
   ....item 2
   ....item 3
cat 2
   subcat 1 .....
      .....item 1
      .....item 2
      .....item 3
cat 3.....
   ....item 1
   ....item 2

etc.

The schema of my tables is like this:

Table: cat
columns:
id      int
title   varchar

table  subcat
columns:
id     int
catid  int
title  varchar

table: items
columns
id         int
catid      int
subcatid   int
title      varchar

誰もがasp.netリピーターを使用してそれらを表示する方法を知っていますか?それとも、テーブルを機能させるために別の構造にする必要がありますか?どうもありがとうございました。

4

2 に答える 2

2

Microsoftはこれに関するガイダンスを提供しています。 http://support.microsoft.com/kb/306154

(申し訳ありませんが、これは長くはありませんが、これはかなり簡単で、記事で十分に説明されています。)

于 2012-04-30T18:18:57.817 に答える
2

すべてのASP.NETデータバインドコントロール(Repeater、ListView、GridViewなど)は、データソースに宣言型データバインディングを使用できます。これは十分に文書化されたIMOではありませんが、次のようなことができます。

<asp:Repeater ID="rptCategory">
    <ItemTemplate>
        <asp:Repeater ID="rptSubcategory" DataSource='<%#Eval("Subcategories")%>'>
             <ItemTemplate>
                <asp:Repeater ID="rptItems" DataSource='<%#Eval("Items")%>'>
                    <ItemTemplate>
                        <%#Eval("Name")%>
                    </ItemTemplate>
                </asp:Repeater>
             </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

プロパティにバインドする必要があるものの詳細はDataSource、初期データ(rptCategoryがバインドされているデータ)によって異なります。

の場合は、適切なの名前DataSetを作成して使用する必要があります。DataRelationsDataRelation

C#オブジェクトの場合は、コレクションプロパティの名前を使用することをお勧めします。

編集:この特定のスキーマの詳細は次のとおりです...。

スキーマには、2つのネストされたリピーターが必要です。1つはアイテムを処理し、1つはサブカテゴリを処理します(アイテム用に別のネストされたリピーターがあります)。

DataSetsを使用すると、次のようなことができます(これは大まかなコードであり、不足している手順のいくつかを入力する必要があります)。

var ds = ExecuteDataSet(
   @"SELECT Id, Title FROM Cat;
   SELECT Id, CatId, Title FROM SubCat;
   SELECT Id, CatId, SubCatId, Title FROM Items;"
);
ds.DataRelations.Add("Cat_SubCat", ds.Tables["Cat"].Columns["Id"], ds.Tables["SubCat"].Columns["CatId"]);
ds.DataRelations.Add("Cat_Items", ds.Tables["Cat"].Columns["Id"], ds.Tables["Items"].Columns["CatId"]);
ds.DataRelations.Add("SubCat_Items", ds.Tables["SubCat"].Columns["Id"], ds.Tables["Items"].Columns["SubCatId"]);

this.rptCategory.DataSource = ds;
this.rptCategory.DataBind();

<asp:Repeater ID="rptCategory">
    <ItemTemplate>
        <h2>Category <%#Eval("Title")%></h2>
        <asp:Repeater ID="rptCatItems" DataSource='<%#Eval("Cat_Items")%>'>
            <ItemTemplate>
                <h4>Item (Category) <%#Eval("Title")%></h4>
            </ItemTemplate>
        </asp:Repeater>
        <asp:Repeater ID="rptCatSubCat" DataSource='<%#Eval("Cat_SubCat")%>'>
            <ItemTemplate>
                <h3>SubCategory <%#Eval("Title")%></h3>
                <asp:Repeater ID="rptSubCatItems" DataSource='<%#Eval("SubCat_Items")%>'>
                    <ItemTemplate>
                        <h4>Item (SubCategory) <%#Eval("Title")%></h4>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>
于 2012-04-30T18:42:39.523 に答える