0

我有如下三个表:表 1 称为 Cat1,表 2 称为 subcat1,表 3 称为 itemsTb。我已经创建了这样的关系:

cat1 到 subcat1(一对多) cat1 到 itemstb(一对多) subcat1 到 itemstb(一对多)

我想像这样在 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

所有 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,那么您需要构建DataRelations并使用适当的名称DataRelation

如果它是 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 回答
2

Microsoft 对此提供了指导。 http://support.microsoft.com/kb/306154

(对不起,这不是更长的时间,但这是相当直截了当的,并且在 hte 文章中得到了很好的介绍。)

于 2012-04-30T18:18:57.817 回答