GridGroupHeaderItem.AggregatesValues 没有 Eval

Dra*_*rop 5 asp.net telerik

Telerik 文档中,据说聚合值存储在AggregatesValues. 他们甚至在示例中使用它。

但我觉得无法证明。因为一切都是真实的,直到被证明是错误的......对吧?
让我为您提供一个最小、完整且可验证的示例。所以你可以指出我的错误。

ASP :

<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>
Run Code Online (Sandbox Code Playgroud)

背后的代码:

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; }
}
Run Code Online (Sandbox Code Playgroud)

结果 :

调试中 AggregatesValues 的键和值:

调试中 AggregatesValues 的键和值

数据显示示例: 数据显示示例

正如您在此示例中看到的:
-Eval("SumCount") 可以在以下情况下找到值

-((GridGroupHeaderItem)Container).AggregatesValues["SumCount"]失败!

文档说:

要访问当前组中项目的总聚合时的字段别名。

而且SumCount是我FieldAlias。

我的尝试:

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

Eval() :总是几乎正确,几乎所有东西的近似知识。

  1. Eval("GrpGroupID1")给出groupby字段的当前值,OK!
  2. Eval("SumCount"),给出聚合函数的正确结果,OK!
  3. Eval("Count"),给出该组 (4) 行的值,不是预期的。
  4. Eval("Name_Count")错误,因为这不是任何属性,OK!

AggregatesValues:它会很快!

  1. ((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"]给出groupby字段的当前值,OK!

  2. Everything else,返回 NULL

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

边注:

  • 是的,我可以简单地使用Eval. 但为什么?为什么我会使用Eval何时MSDN声明我不应该使用它以及何时 Telerik 文档声明我可以使用聚合值集合。

问题在哪里?

许多人会问:“问题在哪里?”。
我怎样才能在GridGroupHeaderItem.AggregatesValues没有Eval或的情况下得到这个Bind

小智 1

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

尝试将其添加Aggregate="Sum"到该列中。

<telerik:GridNumericColumn DataField="GroupID" HeaderText="GroupID" SortExpression="GroupID" UniqueName="Name_GroupID" Aggregate="Sum" />
Run Code Online (Sandbox Code Playgroud)

结果 :

调试中 AggregatesValues 的键和值:

在此输入图像描述 在此输入图像描述

数据显示示例:

在此输入图像描述

对你整理的所有细节竖起大拇指!调查这个案子真是太好了!