我有三个表如下:表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转发器显示它们?或者我必须以不同的方式构建我的表以使其工作?非常感谢你的帮助。
答案 0 :(得分:2)
Microsoft提供了相关指导。 http://support.microsoft.com/kb/306154
(对不起,这不是更长,但这是相当简单的,并且在hte文章中很好地介绍了。)
答案 1 :(得分:2)
所有ASP.NET数据绑定控件(Repeater,ListView,GridView等)都可以为其DataSource使用声明性数据绑定。这不是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个用于处理子类别(对于其项目将具有另一个嵌套转发器)。
使用DataSet,你可以做类似的事情(注意这是粗略的代码,你需要填写一些遗漏的步骤):
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>