asp.net – 没有Eval的GridGroupHeaderItem.AggregatesValues


telerik documentation中,它表示聚合值存储在AggregatesValues中.他们甚至在
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的键和值:

《asp.net – 没有Eval的GridGroupHeaderItem.AggregatesValues》

数据显示的例子:
《asp.net – 没有Eval的GridGroupHeaderItem.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():总是几乎正确,几乎所有的近似知识.

> Eval(“GrpGroupID1”),给出groupby字段的当前值,OK!
> Eval(“SumCount”),给出聚合函数的正确结果,OK!
> Eval(“Count”),给出该组(4)的行的值,而不是Expected.
> Eval(“Name_Count”),错误,因为这不是任何属性,好的!

AggregatesValues:会很快!

>((GridGroupHeaderItem)Container).AggregatesValues [“GrpGroupID1”],给出groupby字段的当前值,OK!
>其他,返回NULL

这些测试是使用asp:Label而不是使用Label进行的.

边注:

>是的,我可以简单地使用Eval.但为什么?为什么我会在MSDN状态下使用Eval,我不应该使用它,以及当Telerik文档声明我可以使用聚合值集合时.

问题在哪里?

许多人会问:“问题在哪里?”.
如何在没有Eval或Bind的情况下获得此GridGroupHeaderItem.AggregatesValues?

最佳答案 “Name_GroupID”缺少Aggregate属性,该属性实际上将填充Aggregate值集合.虽然Eval()可以访问绑定值,但Aggregate集合仍然为空,从而导致空值.

尝试将Aggregate =“Sum”添加到列中.

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

结果:

调试中AggregatesValues的键和值:

《asp.net – 没有Eval的GridGroupHeaderItem.AggregatesValues》
《asp.net – 没有Eval的GridGroupHeaderItem.AggregatesValues》

数据显示示例:

《asp.net – 没有Eval的GridGroupHeaderItem.AggregatesValues》

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

点赞