在telerik文档中,它说聚合值存储在AggregatesValues
中。他们甚至在示例中使用它。
但我发现这是不可能证明的。因为一切都是真实的,直到被证明是错误的,对吧?
让我提供一个最小、完整、可验证的示例。这样你就可以指出我的错误。
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; }
}
结果:
调试中聚合值的键和值:
正如您在这个例子中看到的:
- Eval("SumCount")
可以找到值
当:
- ((GridGroupHeaderItem)Container).AggregatesValues["SumCount"]
失败时!
文档说:
当前组中项目的总合计值的字段别名。
SumCount
是我的 FieldAlias。
我尝试的:
以下是我尝试过的每一件事情及其结果。
Eval() : 总是几乎正确,近乎一切知识的近似值。
Eval("GrpGroupID1")
,给出分组字段的当前值,OK!Eval("SumCount")
,给出聚合函数的正确结果,OK!Eval("Count")
,给出此分组的行数值(4),不符合预期。Eval("Name_Count")
,错误,因为这不是任何属性,OK!
AggregatesValues: 它将非常快!
((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"]
,给出分组字段的当前值,OK!其他所有内容
,返回 NULL
这些测试使用了 asp:Label
而不是 Label。
附注:
- 是的,我可以简单地使用
Eval
。但为什么?MSDN为什么说不要使用它,而Telerik文档则表示我可以使用聚合值集合。
问题在哪里?
许多人会问:“问题在哪里?”
我如何在不使用Eval
或Bind
的情况下获取这个GridGroupHeaderItem.AggregatesValues
?
<%# Eval("SumCount") %>
添加到某个标签的Text
中会怎样? - M. Wiśnicki<td><%# Eval("SumCount") %></td>
。我可以将其放入标签文本中,但我不明白这样做的意义。结果将是相同的,它们都会给出正确的结果。 - Drag and Drop((GridGroupHeaderItem)Container).AggregatesValues["Count"]
? - M. Wiśnicki