0

我正在处理数据库中的三个表。第一个表标记为“Accounts”,并与第二个表“AccountItems”具有一对多关系。AccountItems 表有一个 size 列。第三个表,与这个问题有些相切,是“客户”,它有很多帐户。

我正在创建一个绑定到 Account 表的 RadGrid。它应该看起来像这样:

Customer | Location | Account# | Total Size
___________________________________________

Location 和 Account # 和 Customer 一样简单,因为导航属性在项目模板中工作。

然而,我的问题是大小列。它应该总计每个 AccountItem 的大小。例如,如果有四个 AccountItem,每个大小为“50”,那么总数应该是 200。看起来我不能像在 Customer 中那样简单地在 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。

4

1 回答 1

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

公共部分类论坛页面:System.Web.UI.Page {

受保护的无效RadGrid2_NeedDataSource(对象发送者,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();
        }
    }
}

}

公共类客户 { 公共 int 客户 ID { 获取;放; } 公共列表大小 { 获取;放; } }

公共类尺寸 { 公共 int 尺寸 { 获取;放; } }

于 2012-06-07T08:42:29.907 回答