Asp.net 对网格项模板列中的子数据源数据列求和

Asp.net 对网格项模板列中的子数据源数据列求和,asp.net,data-binding,telerik,Asp.net,Data Binding,Telerik,我在数据库中使用三个表。第一个表标记为“Accounts”,与第二个表“AccountItems”具有一对多关系。AccountItems表有一个size列。第三个表,与这个问题有点相切,是“客户”,它有很多账户 我正在创建绑定到Account表的RadGrid。它应该是这样的: Customer | Location | Account# | Total Size ___________________________________________ 位置和帐户#很容易,因为导航属性在项目模

我在数据库中使用三个表。第一个表标记为“Accounts”,与第二个表“AccountItems”具有一对多关系。AccountItems表有一个size列。第三个表,与这个问题有点相切,是“客户”,它有很多账户

我正在创建绑定到Account表的RadGrid。它应该是这样的:

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();
        }
    }
}