Хотите узнать, как лучше всего заполнить GridView данными моего объекта.
Мне нужно показать список продуктов из сложного объекта Sale
, структура которого выглядит примерно так:
class Sale {
int id;
List<SaleItem> saleItems;
}
class SaleItem {
int id;
int quantity;
Product product;
BillingAddress billingAddress;
ShippingAddress shippingAddress;
}
class Product {
int id;
string name;
List<BuyingConfiguration> buyingConfigurations;
}
class BuyingConfiguration {
string name; // like size, color, material
string value;
}
и моя сетка должна выглядеть следующим образом:
Sale Items
+---------+---+------------+------------+----------------+
| Name | # | B. Address | S. Address | Configurations |
+---------+---+------------+------------+----------------+
| Ferrari | 2 | -- | -- | Color: red |
| | | | | Engine: Xyz |
+---------+---+------------+------------+----------------+
| Jax | 1 | -- | -- | Color: blue |
| | | | | Engine: Abc |
+---------+---+------------+------------+----------------+
Должен ли я реализовать ObjectDataSource для моего Sale
объекта?Есть ли лучшее решение?
РЕДАКТИРОВАТЬ 2: Позвольте мне попытаться прояснить: проблема не в том, как с конфигурациями дисплея.Моя проблема в том, что объект Sale
возвращается в мой код со слоя постоянства, поэтому я не хочу, чтобы GridView обращался к базе данных напрямую.Вместо этого ему нужно загрузить все свои данные из моего Sale
объекта, как этого добиться?
РЕДАКТИРОВАТЬ:
Разметка сетки в соответствии с запросом:
<asp:GridView runat="server" ID="GridProdutos" OnRowDataBound="GridProdutos_OnRowDataBound"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="Name" />
<asp:BoundField HeaderText="#" />
<asp:BoundField HeaderText="B. Address" />
<asp:BoundField HeaderText="S. Address" />
<asp:BoundField HeaderText="Configurations" />
</Columns>
</asp:GridView>
Пока уродливое решение, использующее OnRowDataBound (я хочу этого избежать!):
protected void GridProdutos_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.DataItem == null)
return;
SaleItem item = (SaleItem )e.Row.DataItem;
e.Row.Cells[0].Text = item.product.name;
e.Row.Cells[1].Text = item.quantity.ToString();
StringBuilder sbConfigurations = new StringBuilder();
foreach (BuyingConfiguration configurationItem in item.product.buyingConfigurations) {
sbConfigurations.AppendFormat("{0}: {1}<br />", configurationItem.name, configurationItem.value);
}
e.Row.Cells[4].Text = sbConfigurations .ToString();
}