Tôi cần truy xuất tập hợp các Widget từ lớp truy cập dữ liệu của tôi, được nhóm theo widget.Manufacturer, để hiển thị trong một tập hợp các ASP.NET ListViews lồng nhau.Hiển thị IGrouping <> với ListView lồng nhau
Vấn đề là (theo như tôi có thể biết) cách tiếp cận ListView lồng nhau yêu cầu tôi định hình dữ liệu trước khi sử dụng và tôi không thể tìm ra cách tiếp cận tốt nhất để thực hiện. Điều tốt nhất tôi đã có thể đưa ra cho đến nay là để đặt một truy vấn LINQ trong lớp truy cập dữ liệu của tôi như vậy:
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 };
Dĩ nhiên, các kiểu nặc danh không thể được thông qua xung quanh, do đó doesn' t làm việc. Xác định một lớp tùy chỉnh để kèm theo dữ liệu có vẻ như sai đường đi. Có cách nào tôi có thể thực hiện các nhóm trên bên ASP.NET của sự vật? Tôi đang sử dụng ObjectDataSources để truy cập vào DAL.
Cập nhật: OK, tôi không tạo ra một loại vô danh nữa, và thay vào đó Dal tôi đi một IEnumerable<IGrouping<Manufacturer, Widget>>
vào trang ASP.NET, nhưng làm thế nào tôi có thể sử dụng trong ListViews của tôi? Tôi cần phải làm cho HTML sau đây (hoặc một cái gì đó khá nhiều như nó)
<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>
Ban đầu, tôi đã có một ListView trong một ListView như vậy:
<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>
Lưu ý cách DataSource
tài sản của WidgetsListView là chính nó databound. Làm thế nào tôi có thể sao chép chức năng này mà không cần định hình lại dữ liệu?
Điều này trở nên phức tạp, xin lỗi nếu tôi chỉ nên tạo một câu hỏi riêng.
Cảm ơn lời khuyên. Tôi đã cập nhật câu hỏi ban đầu của mình với nhiều thông tin hơn. –