我想使用DataList
和Flow标记创建类似的内容:
|-----------------------|
| Title |
|-----------------------|
| [x] Title |
| [x] Title |
| ... |
-------------------------
我有一个表(在Linq2Sql中建模)Foo
有这些字段
int id;
int? parentId;
string title;
Foo Parent;
EntitySet<Foo> Children;
现在,当存在空父项时,表示它是顶级类别,如果父项具有值,则它是类别列表的一部分。
我创建了一个DataList
,并使用LinqDataSource
查询如下:
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="MyNameSpace.FooDataContext"
Select="new (Title, Children)" TableName="Foo"
Where="ParentID = NULL">
</asp:LinqDataSource>
<asp:DataList ID="FooList" runat="server" DataSourceID="LinqDataSource1"
BorderColor="Black" BorderWidth="1px" RepeatLayout="Flow">
<ItemTemplate>
<asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' />
<br />
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="<%# Eval("Children") %>">
<ItemTemplate>
<asp:CheckBox ID="Checks" Text="<%# Eval("Title") %>" runat="server" />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:DataList>
这显然不起作用。 如何在DataList项目的转发器中使用Children集合?
答案 0 :(得分:1)
我用我的架构表尝试了这个并且它工作正常。诀窍是使用Datalist.See标记的ItemDataBound事件。注意我正在使用具有教师实体集合的Scool实体
<asp:DataList ID="DataList1" runat="server" DataKeyField="id"
DataSourceID="LinqDataSource1" Width="246px"
onitemdatabound="DataList1_ItemDataBound">
<ItemTemplate>
name:
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' />
<div style="border:solid blue 3px;padding:2px;">
<asp:Repeater ID="rptteachers" runat="server" >
<ItemTemplate>
<asp:Label ID="kllj" runat="server" Text='<%# Eval("name") %>' ></asp:Label>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("quals") %>' ></asp:Label>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:DataList>
然后将以下内容添加到后面的代码中。
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
Repeater r = e.Item.FindControl("rptteachers") as Repeater;
if (r == null) return;
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
school sc = e.Item.DataItem as school;
if (sc == null) return;
r.DataSource = sc.Teachers;
r.DataBind();
}
}