【问题标题】:Summing a Child Data-Source data-column in a Grid Item Template Column在网格项模板列中汇总子数据源数据列
【发布时间】:2012-06-06 14:15:38
【问题描述】:

我正在处理数据库中的三个表。第一个表标记为“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。

【问题讨论】:

    标签: asp.net data-binding telerik


    【解决方案1】:

    请检查下面的代码 sn-p。 如果我遗漏任何东西或不理解您的要求,请告诉我。

    .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 {

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

    }

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

    公共类大小 { 公共 int 大小 { 获取;放; } }

    【讨论】:

    • 看着它,它可以满足我的需要,将 Customer 替换为 Account & AccountsLoad.Size。尽管我试图查看是否可以在 ASP 中使用导航属性对其进行处理。不管怎样,你仍然是对的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2020-12-13
    • 1970-01-01
    • 2021-04-23
    • 2021-12-31
    • 1970-01-01
    • 2018-04-23
    • 2015-08-29
    相关资源
    最近更新 更多