我正在使用db中的三个表。第一个表标记为'Accounts',与第二个表'AccountItems'有一对多关系.AssountItems表有一个size列。第三个表格与此问题有些相似,是“客户”,其中包含许多帐户。
我正在创建绑定到Account表的RadGrid。看起来应该是这样的:
Customer | Location | Account# | Total Size
___________________________________________
位置和帐户#很容易,因为导航属性在项目模板中工作,因此客户也很容易。
然而,我的问题是“大小”列。它应该从每个AccountItem总计大小。例如,如果有四个大小为“50”的AccountItem,那么总数应该是200.我似乎不能像在客户那样简单地导航Eval()中的子关系。是否可以在列代码中执行此操作,还是需要为OnItemCreated执行服务器端事件处理程序?
修改
我想出了一个临时解决方案。
<ItemTemplate>
<asp:Label ID="lblSizeSum" runat="server"Text='<%# CalculateSizeTotal((MS_Accounts)Container.DataItem)%>'>
<ItemTemplate>
然后是背后的代码:
Protected string CalculateSizeTotal(MS_Accounts dataItem)
{
return dataItem.MS_AccountLoads.Sum(s => s.Size).ToString();
}
我唯一不喜欢的是通过直接访问我的ORM进行转换,明显违反了MVC。
答案 0 :(得分:0)
请查看下面的代码段。 如果我遗漏任何事情或不理解您的要求,请告诉我。
<强>的.aspx 强>
<telerik:RadGrid ID="RadGrid2" runat="server" AllowPaging="True" AllowSorting="True"
OnNeedDataSource="RadGrid2_NeedDataSource" AutoGenerateColumns="False"
onitemdatabound="RadGrid2_ItemDataBound">
<MasterTableView>
<Columns>
<telerik:GridBoundColumn DataField="CustomerID" HeaderText="CustomerID" UniqueName="CustomerID">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" ></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
<强> .aspx.cs 强>
public partial class forumpage:System.Web.UI.Page {
protected void RadGrid2_NeedDataSource(object sender,GridNeedDataSourceEventArgs e) { RadGrid2.DataSource = getDatarofGrid(); }
protected List<Customer> getDatarofGrid()
{
List<Customer> lstCustomer = new List<Customer>();
Customer customer;
for (int i = 0; i < 3; i++)
{
customer = new Customer();
customer.CustomerID = i;
List<Sizes> lstSize = new List<Sizes>();
Sizes sizes;
for (int j = 0; j < 3; j++)
{
sizes = new Sizes();
sizes.size = i + 100;
lstSize.Add(sizes);
}
customer.sizes = lstSize;
lstCustomer.Add(customer);
}
return lstCustomer;
}
protected void RadGrid2_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem item = e.Item as GridDataItem;
Label Label1 = item.FindControl("Label1") as Label;
Customer objcustomer = item.DataItem as Customer;
if (objcustomer != null && objcustomer.sizes.Count > 0)
{
Label1.Text = objcustomer.sizes.Sum(i => i.size).ToString();
}
}
}
}
公共类客户 { public int CustomerID {get;组; } 公共列表大小{get;组; } }
公共类大小 { public int size {get;组; } }