Asp.net 对网格项模板列中的子数据源数据列求和
我在数据库中使用三个表。第一个表标记为“Accounts”,与第二个表“AccountItems”具有一对多关系。AccountItems表有一个size列。第三个表,与这个问题有点相切,是“客户”,它有很多账户 我正在创建绑定到Account表的RadGrid。它应该是这样的:Asp.net 对网格项模板列中的子数据源数据列求和,asp.net,data-binding,telerik,Asp.net,Data Binding,Telerik,我在数据库中使用三个表。第一个表标记为“Accounts”,与第二个表“AccountItems”具有一对多关系。AccountItems表有一个size列。第三个表,与这个问题有点相切,是“客户”,它有很多账户 我正在创建绑定到Account表的RadGrid。它应该是这样的: Customer | Location | Account# | Total Size ___________________________________________ 位置和帐户#很容易,因为导航属性在项目模
Customer | Location | Account# | Total Size
___________________________________________
位置和帐户#很容易,因为导航属性在项目模板中工作,所以Customer也很容易
然而,我的问题是大小列。它应该合计每个AccountItem的大小。例如,如果有四个AccountItems的大小各为“50”,则总数应为200。我似乎不能像为客户那样简单地在Eval()中导航子关系。是否可以在列代码中执行此操作,或者是否需要为OnItemCreated执行服务器端事件处理程序
编辑
我想出了一个临时解决办法
<ItemTemplate>
<asp:Label ID="lblSizeSum" runat="server"Text='<%# CalculateSizeTotal((MS_Accounts)Container.DataItem)%>'>
<ItemTemplate>
我唯一不喜欢的是,直接访问我的ORM进行角色扮演,这明显违反了MVC 请检查下面的代码片段。 如果我遗漏了任何东西或不理解您的要求,请告诉我 .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
umpage的公共部分类:System.Web.UI.Page
{
受保护的void RadGrid2_NeedDataSource(对象发送方,GridNeedDataSourceEventArgs e)
{
RadGrid2.DataSource=getDatarofGrid();
}
受保护列表getDatarofGrid()
{
List lstCustomer=新列表();
顾客;
对于(int i=0;i<3;i++)
{
客户=新客户();
customer.CustomerID=i;
List lstSize=新列表();
尺寸;
对于(int j=0;j<3;j++)
{
尺寸=新尺寸();
尺寸:尺寸=i+100;
lstSize.Add(大小);
}
customer.size=lstSize;
lstCustomer.Add(客户);
}
返回客户;
}
受保护的void RadGrid2_ItemDataBound(对象发送方,GridItemEventArgs e)
{
if(e.Item为GridDataItem)
{
GridDataItem=e.项作为GridDataItem;
Label Label1=item.FindControl(“Label1”)作为标签;
客户对象客户=item.DataItem作为客户;
if(objcustomer!=null&&objcustomer.size.Count>0)
{
Label1.Text=objcustomer.size.Sum(i=>i.size.ToString();
}
}
}
}
公共类客户
{
public int CustomerID{get;set;}
公共列表大小{get;set;}
}
公营班级人数
{
公共整数大小{get;set;}
}看看它,它可以满足我的需要,用Account&AccountsLoad.大小替换客户。尽管我试图看看是否可以在ASP中使用导航属性处理它。不管怎样,你仍然是对的。谢谢
<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>
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();
}
}
}