asp.net - 没有 Eval 的 GridGroupHeaderItem.AggregatesValues

标签 asp.net telerik

telerik documentation , 就是说聚合值存储在 AggregatesValues .他们甚至在 exemple 中使用它.

但我觉得无法证明。在被证明是错误的之前,一切都是正确的......对吗?让我为您提供一个最小的、完整的和可验证的例子。所以你可以指出我的错误。

象素:

<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" AllowPaging="True" ShowGroupPanel="True">
    <MasterTableView>
        <GroupByExpressions>
            <telerik:GridGroupByExpression>
                <SelectFields>                       
                    <telerik:GridGroupByField FieldAlias="GrpGroupID1" FieldName="GroupID" />
                    <telerik:GridGroupByField FieldAlias="SumCount" FieldName="Count" Aggregate="Sum" />
                </SelectFields>
                <GroupByFields>
                    <telerik:GridGroupByField FieldAlias="GrpGroupID" FieldName="GroupID" HeaderText="" />
                </GroupByFields>
            </telerik:GridGroupByExpression>
        </GroupByExpressions>
        <GroupHeaderTemplate>
            <table>
                <tr>
                    <td>eval GrpGroupID1:</td>
                    <td><%# Eval("GrpGroupID1") %></td>
                    <td> ||| </td>
                    <td>Bind GrpGroupID1:</td>
                    <td><%# ((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"] %></td>
                </tr>
                <tr>
                    <td>eval SumCount:</td>
                    <td><%# Eval("SumCount") %></td>
                    <td> ||| </td>
                    <td>Bind SumCount:</td>
                    <td><%# ((GridGroupHeaderItem)Container).AggregatesValues["SumCount"] %></td>
                </tr>
            </table>
        </GroupHeaderTemplate>
        <Columns>
            <telerik:GridNumericColumn DataField="ID" HeaderText="ID" SortExpression="ID" UniqueName="Name_ID" />
            <telerik:GridNumericColumn DataField="GroupID" HeaderText="GroupID" SortExpression="GroupID" UniqueName="Name_GroupID" />
            <telerik:GridBoundColumn DataField="Name" HeaderText="Name" SortExpression="Name" UniqueName="Name_Name" />
            <telerik:GridBoundColumn DataField="Text" HeaderText="Text" SortExpression="Text" UniqueName="Name_Text" />                
            <telerik:GridNumericColumn DataField="Count" HeaderText="Count" SortExpression="Count" UniqueName="Name_Count" Aggregate="Sum" />
        </Columns>
    </MasterTableView>

</telerik:RadGrid>

后面的代码:
protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    List<TmpType> myData = new List<TmpType>();

    List<string> firstNames = new List<string>() { "Angela", "Pamela", "Sandra", "Rita", "Monica", "Erica", "Tina", "Mary", "Jessica", "Loubega" };
    List<string> Location = new List<string>() { "Reunion", "Paris", "Bretagne", "Madagascar", "UK", "Maurice" };
    Random random = new Random();

    for (int i = 0; i <= 88; i++)
    {
        TmpType row = new TmpType();
        row.ID = i + 1;
        row.GroupID = random.Next(10);
        row.Count = random.Next(10);
        row.Name = firstNames[random.Next(firstNames.Count)];
        row.Text = Location[random.Next(Location.Count)];
        myData.Add(row);
    }
    RadGrid1.DataSource = myData;
}

class TmpType
{
    public string Name { get; set; }
    public string Text { get; set; }
    public int Count { get; set; }
    public int GroupID { get; set; }
    public int ID { get; set; }
}

结果 :

调试中 AggregatesValues 的键和值:

Key and values of AggregatesValues in debug

数据展示示例:
Exemple of data display

正如你在这个例子中看到的:
- Eval("SumCount")可以找到值(value)
什么时候 :
- ((GridGroupHeaderItem)Container).AggregatesValues["SumCount"]失败 !

文档说:

the field alias name when you want to access the total aggregate of the items in the current group.



SumCount是我的 FieldAlias。

我尝试什么:

这是我尝试过的每件事和结果的列表。

评估():总是几乎正确,几乎所有事情的大致知识。
  • Eval("GrpGroupID1") ,给出groupby字段的当前值,OK!
  • Eval("SumCount") ,给出聚合函数的正确结果,OK!
  • Eval("Count") , 给出该组 (4) 的行的值,而不是预期的。
  • Eval("Name_Count") ,错误,因为这不是任何东西的属性,OK!

  • 聚合值:它会很快!
  • ((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"] ,给出groupby字段的当前值,OK!
  • Everything else , 返回 NULL

  • 这些测试是使用 asp:Label 进行的。并且不使用标签。

    边注:
  • 是的,我可以简单地使用 Eval .但为什么?我为什么要使用 EvalMSDN声明我不应该使用它,并且当 Telerik 文档声明我可以使用聚合值集合时。

  • 问题在哪里?

    许多人会问:“问题在哪里?”。
    我怎样才能得到这个GridGroupHeaderItem.AggregatesValues没有 EvalBind ?

    最佳答案

    “Name_GroupID”缺少 Aggregate实际上会填充聚合值集合的属性。虽然 Eval() 可以访问绑定(bind)值,但 Aggregate 集合仍然为空,从而导致空值。

    尝试添加 Aggregate="Sum"到列。

    <telerik:GridNumericColumn DataField="GroupID" HeaderText="GroupID" SortExpression="GroupID" UniqueName="Name_GroupID" Aggregate="Sum" />
    

    结果:

    调试中 AggregatesValues 的键和值:

    enter image description here
    enter image description here

    数据显示示例:

    enter image description here

    大拇指准备好你放在一起的所有细节!调查这个案子真是太好了!

    关于asp.net - 没有 Eval 的 GridGroupHeaderItem.AggregatesValues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261368/

    相关文章:

    c# - 在 Startup.cs 中使用 .AddGoogle() 时,如何在 Web 应用程序中构建 GmailService?

    ASP.NET GridView 如何取消更新

    asp.net - 防止 RadGrid 的默认 Telerik 排序

    asp.net - 从 telerik 控件中删除默认内联样式

    jquery - 从代码隐藏 (ASP.Net VB) 打开 jquery 弹出窗口

    c# - IIS 中单个网站配置的 ASP.net 应用程序的多个实例

    javascript - Kendo Grid 在 Change 事件上获取行和列索引

    c# - Telerik TopPane 高度自动?

    telerik - 自定义 Sitecore 富文本编辑器的默认配置

    c# - 导出到 Excel 不起作用