我需要从我的数据访问层检索一组Widgets,按widget.Manufacturer分组,以显示在一组嵌套ASP.NET ListViews中。使用嵌套ListViews显示IGrouping <>
问题是,(据我所知)嵌套的ListView方法需要我在使用它之前对数据进行整形,而我无法找出最佳方法。我已经能够拿出迄今最好是把一个LINQ查询我的数据访问层,像这样:
var result = from widget in GetAllWidgets(int widgetTypeID)
group widget by widget.Manufacturer into groupedWidgets
let widgets = from widgetGroup in groupedWidgets
select widgetGroup
select new { Manufacturer = groupedWidgets.Key, Widgets = widgets };
当然,匿名类型不能被传来传去,所以那并不是”工作。定义一个自定义类来包含数据似乎是错误的方法。有什么办法可以在ASP.NET的一方执行分组吗?我使用ObjectDataSources来访问DAL。
更新:OK,我不会再创建一个匿名类型,而不是我的DAL传递一个IEnumerable<IGrouping<Manufacturer, Widget>>
到ASP.NET页面,但我怎么能在我的列表视图使用?我需要(几乎或类似的东西)呈现以下HTML
<ul>
<li>Foo Corp.
<ol>
<li>Baz</li>
<li>Quux</li>
</ol>
</li>
<li>Bar Corp.
<ol>
<li>Thinger</li>
<li>Whatsit</li>
</ol>
</li>
</ul>
本来,我有过这样一个ListView内的ListView:
<asp:ListView ID="ManufacturerListView">
<LayoutTemplate>
<ul>
<asp:Placeholder ID="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li><asp:Label Text='<%# Eval("Manufacturer.Name") %>' />
<li>
<asp:ListView ID="WidgetsListView" runat="server" DataSource='<%# Eval("Widgets") %>'>
<LayoutTemplate>
<ol>
<asp:PlaceHolder runat="server" ID="itemPlaceholder" />
</ol>
</LayoutTemplate>
<ItemTemplate>
<li><asp:Label Text='<%# Eval("Name") %>'></li>
</ItemTemplate>
</asp:ListView>
</li>
</ItemTemplate>
</asp:ListView>
注WidgetsListView的DataSource
财产是怎么本身数据绑定。如何在不重新调整数据的情况下复制此功能?
这是越来越复杂,对不起,如果我应该只是提出一个单独的问题,而不是。
感谢您的意见。我用更多的信息更新了我的原始问题。 – 2008-10-06 23:17:41