ネストされたASP.NETListViewのセットに表示するには、widget.Manufacturerでグループ化されたウィジェットのセットをデータアクセスレイヤーから取得する必要があります。
問題は、(私が知る限り)ネストされた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ページにを渡しますが、これをListViewで使用するにはどうすればよいですか?次の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のプロパティ自体がデータバインドされていることに注意してください。データを再形成せずにこの機能を複製するにはどうすればよいですか?
これは少し複雑になっています。代わりに別の質問をする必要があった場合は申し訳ありません。