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

时间:2012-06-06 14:15:38

标签: asp.net data-binding telerik

我正在使用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。

1 个答案:

答案 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;组; } }