我需要从我的数据访问层检索一组按 widget.Manufacturer 分组的小部件,以显示在一组嵌套的 ASP.NET ListView 中。
问题是(据我所知)嵌套的 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。
更新:好的,我不再创建匿名类型,而是我的 DAL 将一个传递IEnumerable<IGrouping<Manufacturer, Widget>>
给 ASP.NET 页面,但是如何在我的 ListViews 中使用它?我需要呈现以下 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>
请注意DataSource
WidgetsListView 的属性本身是如何数据绑定的。如何在不重塑数据的情况下复制此功能?
这有点复杂,对不起,如果我应该提出一个单独的问题。