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() : 几乎总是正确的,几乎所有事情的大概知识。
Eval("GrpGroupID1")
,给出groupby字段的当前值,OK!
Eval("SumCount")
,给出正确的聚合函数结果,OK!
Eval("Count")
、给出该组的行值 (4),不是预期值。
Eval("Name_Count")
,错误,因为这不是任何东西的属性,好的!
AggregatesValues: 很快!
((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"]
,给出groupby字段的当前值,OK!
Everything else
, Return NULL
这些测试是使用 asp:Label
而不是使用标签进行的。
旁注:
- 是的,我可以简单地使用
Eval
。但为什么?当 MSDN 声明我不应该使用它并且当 Telerik 文档声明我可以使用聚合值集合时我为什么要使用 Eval
。
问题在哪里?
很多人会问:"Where is the question?"。
如果没有 Eval
或 Bind
我怎样才能得到这个 GridGroupHeaderItem.AggregatesValues
?
"Name_GroupID" 缺少实际上会填充聚合值集合的 Aggregate
属性。虽然 Eval() 已访问绑定值,但聚合集合仍为空,导致空值。
尝试将 Aggregate="Sum"
添加到该列。
<telerik:GridNumericColumn DataField="GroupID" HeaderText="GroupID" SortExpression="GroupID" UniqueName="Name_GroupID" Aggregate="Sum" />
结果:
调试中 AggregatesValues 的键和值:
数据显示示例:
大拇指 对你整理的所有细节表示赞赏!调查这个案子真是太好了!
在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() : 几乎总是正确的,几乎所有事情的大概知识。
Eval("GrpGroupID1")
,给出groupby字段的当前值,OK!Eval("SumCount")
,给出正确的聚合函数结果,OK!Eval("Count")
、给出该组的行值 (4),不是预期值。Eval("Name_Count")
,错误,因为这不是任何东西的属性,好的!
AggregatesValues: 很快!
((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"]
,给出groupby字段的当前值,OK!Everything else
, Return NULL
这些测试是使用 asp:Label
而不是使用标签进行的。
旁注:
- 是的,我可以简单地使用
Eval
。但为什么?当 MSDN 声明我不应该使用它并且当 Telerik 文档声明我可以使用聚合值集合时我为什么要使用Eval
。
问题在哪里?
很多人会问:"Where is the question?"。
如果没有 Eval
或 Bind
我怎样才能得到这个 GridGroupHeaderItem.AggregatesValues
?
"Name_GroupID" 缺少实际上会填充聚合值集合的 Aggregate
属性。虽然 Eval() 已访问绑定值,但聚合集合仍为空,导致空值。
尝试将 Aggregate="Sum"
添加到该列。
<telerik:GridNumericColumn DataField="GroupID" HeaderText="GroupID" SortExpression="GroupID" UniqueName="Name_GroupID" Aggregate="Sum" />
结果:
调试中 AggregatesValues 的键和值:
数据显示示例:
大拇指 对你整理的所有细节表示赞赏!调查这个案子真是太好了!