GridGroupHeaderItem.AggregatesValues 没有评估

GridGroupHeaderItem.AggregatesValues without Eval

telerik documentation, It's say that aggregates values are store in the AggregatesValues. They even use it in the exemple.

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

Aspx :

<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 的键和值:

数据显示示例:

正如您在这个例子中看到的:
- Eval("SumCount") 可以找到值
当 :
- ((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() : 几乎总是正确的,几乎所有事情的大概知识。

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

AggregatesValues: 很快!

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

  2. Everything else, Return NULL

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

旁注:

问题在哪里?

很多人会问:"Where is the question?"。
如果没有 EvalBind 我怎样才能得到这个 GridGroupHeaderItem.AggregatesValues

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

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

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

结果:

调试中 AggregatesValues 的键和值:

数据显示示例:

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