Necesito recuperar un conjunto de widgets de mi capa de acceso a datos, agrupados por widget.Manufacturer, para mostrarlos en un conjunto de listas de listas ASP.NET anidadas.Mostrar un IGrouping <> con ListViews anidados
El problema es que (por lo que puedo decir) el enfoque anidado ListView me requiere dar forma a los datos antes de usarlos, y no puedo encontrar el mejor enfoque para tomar. El mejor que he podido llegar a hasta el momento es poner una consulta LINQ en mi capa de acceso de datos, así:
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 };
Por supuesto, los tipos anónimos no se pueden transferir, de manera que doesn' t trabajo. Definir una clase personalizada para adjuntar datos parece ser el camino equivocado. ¿Hay alguna forma de que pueda realizar la agrupación en el lado ASP.NET de las cosas? Estoy usando ObjectDataSources para acceder al DAL.
Actualizado: Bueno, no estoy creando un tipo anónimo más, y en su lugar pasa a mi DAL una IEnumerable<IGrouping<Manufacturer, Widget>>
a la página ASP.NET, pero ¿cómo puedo usar esto en mis listviews? Necesito hacer que el código HTML siguiente (o algo muy parecido a él)
<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>
Originalmente, tenía un ListView dentro de un ListView de este modo:
<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>
Nota cómo la propiedad DataSource
de WidgetsListView es en sí misma datos vinculados. ¿Cómo puedo duplicar esta funcionalidad sin cambiar la forma de los datos?
Esto se está poniendo un poco complicado, lo siento si debería haber hecho una pregunta por separado en su lugar.
Gracias por el asesoramiento. Actualicé mi pregunta original con más información. –