In telerik documentation, It's say that aggregates values are store in the AggregatesValues
. They even use it in the exemple.
But I find it impossible to prove. As everying is true until proven wrong .. right?
Let me provide you a Minimal, Complete, and Verifiable example. So you could point my mistake.
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>
Code behind :
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; } }
Result :
Key and values of AggregatesValues in debug:
As you can see in this exemple:
- Eval("SumCount")
can find the value
when :
- ((GridGroupHeaderItem)Container).AggregatesValues["SumCount"]
fail !
The documentation says:
the field alias name when you want to access the total aggregate of the items in the current group.
And SumCount
is my FieldAlias.
What I try:
Here is a list of every thing i have try and the result.
Eval() : always almost correct, the approximate knowledge of nearly everything.
Eval("GrpGroupID1")
, Give the current value of the groupby field, OK!Eval("SumCount")
, Give the correct result of the aggregate function, OK!Eval("Count")
, Give the value of the row for this group (4), not Expected.Eval("Name_Count")
, Error because this is not a properties of anything, OK!
AggregatesValues: It will be fast !
((GridGroupHeaderItem)Container).AggregatesValues["GrpGroupID1"]
, Give the current value of the groupby field, OK!Everything else
, Return NULL
Those test have been made using a asp:Label
and not using an Label.
Side note:
- Yes, I could simply use the
Eval
. But why? Why would I use anEval
when MSDN state that I should not use it and when the Telerik documentation state that I can use the aggregates values collection.
Where is the question?
Many will be asking: "Where is the question?".
How can I get this GridGroupHeaderItem.AggregatesValues
without Eval
or Bind
?
0 comments:
Post a Comment