【问题标题】:GridGroupHeaderItem.AggregatesValues without Eval没有 Eval 的 GridGroupHeaderItem.AggregatesValues
【发布时间】:2016-12-21 11:07:54
【问题描述】:

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

数据展示示例:

正如您在此示例中所见:
- 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")错误,因为这不是任何东西的属性,好的!

AggregatesValues:会很快!

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

  2. Everything else, 返回 NULL

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

旁注:

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

问题在哪里?

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

【问题讨论】:

  • 如果您将&lt;%# Eval("SumCount") %&gt; 添加到某个标签中作为Text 怎么办?
  • 在我的代码中我有&lt;td&gt;&lt;%# Eval("SumCount") %&gt;&lt;/td&gt;。我可以把它放在标签文本中,但我看不出重点。结果将是相同的,他们都会给出好的结果。
  • 好的,您是否尝试使用 FieldName 代替 FieldAlias? ((GridGroupHeaderItem)Container).AggregatesValues["Count"]?
  • 这个是空的,我已经尝试了列名、列字段、GridGroupByField FieldAlias、GridGroupByField 名称的每一种组合,甚至在最后的 HeaderText 中。明天我将更新一个包含所有可能性的表格以及 Eval 和 AggregatesValues 的结果。
  • 尝试将数据绑定表达式作为服务器控件的属性,如前所述。

标签: asp.net telerik


【解决方案1】:

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

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

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

结果:

调试中 AggregatesValues 的键和值:

数据显示示例:

大拇指为您整理的所有细节点赞!调查这个案子真是太好了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2018-10-01
    • 2019-11-01
    • 2022-08-04
    相关资源
    最近更新 更多