
chad hartz
Top achievements
Rank 1
chad hartz
asked on 31 Oct 2011, 02:55 PM
Is it possible to capture the aggregates event that comes from the Radgrid AJAX headercontextaggregatesmenu? I can capture the item click for everything except the aggregates. The custom aggregate function is also picked up fine. There is no indication of any specific additional code that I need to capture the aggregates item click event in any of the telerik demos or documentation.
Thanks in advance for your help.
Thanks in advance for your help.
4 Answers, 1 is accepted
0

Shinu
Top achievements
Rank 2
answered on 01 Nov 2011, 06:37 AM
Hello Chad,
The client event OnCommand will fire when you click the HeaderContext menu aggregate Item. You can make the server side call with ajax request. Here is the sample code.
Javascript:
C#:
Thanks,
Shinu.
The client event OnCommand will fire when you click the HeaderContext menu aggregate Item. You can make the server side call with ajax request. Here is the sample code.
Javascript:
function
OnCommand(sender,args)
{
alert(args.get_commandName());
var
ajaxManager = $find(
"<%= RadAjaxManager1.ClientID %>"
);
ajaxManager.ajaxRequest();
}
private
void
RadAjaxManager1_AjaxRequest(
object
sender, AjaxRequestEventArgs e)
{
//code to handle the generic AJAX request
}
Thanks,
Shinu.
0

chad hartz
Top achievements
Rank 1
answered on 03 Nov 2011, 03:35 PM
Thanks Shinu,
We have tried your solution below, however the onCommand you specify below does't fire for some reason. In any case, we have gotten around this issue by using a clientEvent "OnResponseEnd" and fired a button-click. However, we have a new issue:
The "SavePersistor" class does not save or load the aggregate under the column settings. The aggregate value is there in the main master view, but when the column is created the aggregate value is lost (set to nothing). Do you have any idea why this would happen?
We are using the example given in the Grid Save Settings demo. Thanks your quick response, as we are under a deadline.
We have tried your solution below, however the onCommand you specify below does't fire for some reason. In any case, we have gotten around this issue by using a clientEvent "OnResponseEnd" and fired a button-click. However, we have a new issue:
The "SavePersistor" class does not save or load the aggregate under the column settings. The aggregate value is there in the main master view, but when the column is created the aggregate value is lost (set to nothing). Do you have any idea why this would happen?
We are using the example given in the Grid Save Settings demo. Thanks your quick response, as we are under a deadline.
0
Hello Chad,
I tried to reproduce the described issue but to no avail. Could you please post your page markup with the related code behind or send us a small runnable project which demonstrates the described issue. You could open a formal support ticket from your Telerik account and attach a ZIP file there.
Thus we will be able to gather more details about your scenario, debug the project and provide you with more to-the-point answer.
Looking forward for your reply.
Kind regards,
Radoslav
the Telerik team
I tried to reproduce the described issue but to no avail. Could you please post your page markup with the related code behind or send us a small runnable project which demonstrates the described issue. You could open a formal support ticket from your Telerik account and attach a ZIP file there.
Thus we will be able to gather more details about your scenario, debug the project and provide you with more to-the-point answer.
Looking forward for your reply.
Kind regards,
Radoslav
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
0

Chad
Top achievements
Rank 1
answered on 10 Nov 2011, 10:29 PM
Hi Radoslav,
We have found a fix for the aggregate not being saved by the persistor. http://demos.telerik.com/aspnet-ajax/grid/examples/programming/savinggridsettingsonperuserbasis/defaultcs.aspx. The code for the gridpersistor was missing aggregate functions. I added them -- below is the updated version of the code.
I do however have another issue that appears to be experienced by others but I have not been able to find a resolution. http://www.telerik.com/community/forums/aspnet-ajax/grid/paging-and-aggregate-function.aspx I am experiencing the same issue where if i have data in a group that spans pages (I am not using custom paging) the group footer only calculates for the page and not for the entire group. It appears from the post that there was a formal ticket for this but the resolution was not posted. Here is the markup for the grid. I would really appreciate your help solving this. I am setting the aggregate using the header context menu.
Thanks
We have found a fix for the aggregate not being saved by the persistor. http://demos.telerik.com/aspnet-ajax/grid/examples/programming/savinggridsettingsonperuserbasis/defaultcs.aspx. The code for the gridpersistor was missing aggregate functions. I added them -- below is the updated version of the code.
Imports
System
Imports
System.Collections.Generic
Imports
System.Web
Imports
Telerik.Web.UI
Imports
System.Web.UI.WebControls
Imports
System.Collections
Imports
System.Web.UI
Imports
System.IO
''' <summary>
''' Imports and exports settings from a RadGrid instance.
''' </summary>
Public
Class
GridSettingsPersister
''' <summary>
''' Initializes an instance of GridSettingsPersister from a RadGrid instance
''' </summary>
''' <param name="grid">The RadGrid instance to import and exports settings</param>
Public
Sub
New
(
ByVal
grid
As
RadGrid)
Me
.
New
(grid, GridSettingsType.All)
End
Sub
''' <summary>
''' Initializes an instance of GridSettingsPersister from a RadGrid instance
''' and a collection GridSettingsType values
''' </summary>
''' <param name="grid">The RadGrid instance to import and exports settings</param>
''' <param name="persistedSettingFlags">
''' A collection of GridSettingType values specifying the type of grid settings
''' to import or export
''' </param>
Public
Sub
New
(
ByVal
grid
As
RadGrid,
ByVal
persistedSettingFlags
As
GridSettingsType)
_grid = grid
_persistedSettingTypes = persistedSettingFlags
_settings =
New
GridSettingsCollection()
_settings.ColumnSettings =
New
List(Of ColumnSettings)()
_settings.AutoGeneratedColumnSettings =
New
List(Of ColumnSettings)()
End
Sub
Private
_grid
As
RadGrid
Private
_persistedSettingTypes
As
GridSettingsType
Private
_settings
As
GridSettingsCollection
''' <summary>
''' The underlyiong RadGrid instance to import or export settings from
''' </summary>
Public
ReadOnly
Property
Grid()
As
RadGrid
Get
Return
_grid
End
Get
End
Property
''' <summary>
''' Gets or sets the GridSettingType flags that specify the grid settings to
''' export or import
''' </summary>
Public
Overridable
Property
PersistedSettingTypes()
As
GridSettingsType
Get
Return
_persistedSettingTypes
End
Get
Set
(
ByVal
value
As
GridSettingsType)
_persistedSettingTypes = value
End
Set
End
Property
Protected
Overridable
Property
Settings()
As
GridSettingsCollection
Get
Return
_settings
End
Get
Set
(
ByVal
value
As
GridSettingsCollection)
_settings = value
End
Set
End
Property
''' <summary>
''' Saves the current grid settings and returns the settings serilized to string
''' </summary>
Public
Overridable
Function
SaveSettings()
As
String
Return
GetSavedSettings().ToString()
End
Function
''' <summary>
''' Saves the current grid settings and retrieves the underlying
''' GridSettingsCollection instance that contains the grid settings
''' </summary>
Public
Overridable
Function
GetSavedSettings()
As
GridSettingsCollection
If
Grid
Is
Nothing
Then
Throw
New
NullReferenceException()
End
If
If
IsSettingSpecified(GridSettingsType.Paging)
Then
SavePagingSettings()
End
If
If
IsSettingSpecified(GridSettingsType.Grouping)
Then
SaveGroupByExpressions()
End
If
If
IsSettingSpecified(GridSettingsType.Sorting)
Then
SaveSortExpressions()
End
If
If
IsSettingSpecified(GridSettingsType.Filtering)
Then
SaveFilterExpression()
End
If
If
IsSettingSpecified(GridSettingsType.ColumnSettings)
Then
SaveColumnSettings()
End
If
Return
Settings
End
Function
Protected
Function
IsSettingSpecified(
ByVal
settingType
As
GridSettingsType)
As
Boolean
Return
(PersistedSettingTypes
And
GridSettingsType.All) = GridSettingsType.All
OrElse
(PersistedSettingTypes
And
settingType) = settingType
End
Function
Protected
Overridable
Sub
SavePagingSettings()
Settings.PageSize = Grid.MasterTableView.PageSize
End
Sub
Protected
Overridable
Sub
SaveGroupByExpressions()
Settings.GroupByExpressionsStates =
New
Object
(Grid.MasterTableView.GroupByExpressions.Count - 1) {}
Dim
i
As
Integer
= 0
While
i < Settings.GroupByExpressionsStates.Length
Settings.GroupByExpressionsStates(i) = (
DirectCast
(Grid.MasterTableView.GroupByExpressions(i), IStateManager)).SaveViewState()
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End
While
End
Sub
Protected
Overridable
Sub
SaveSortExpressions()
Settings.SortExpressionsState = (
DirectCast
(Grid.MasterTableView.SortExpressions, IStateManager)).SaveViewState()
End
Sub
Protected
Overridable
Sub
SaveFilterExpression()
Settings.FilterExpression = Grid.MasterTableView.FilterExpression
End
Sub
Protected
Overridable
Sub
SaveColumnSettings()
Settings.ColumnSettings.Clear()
For
Each
column
As
GridColumn
In
Grid.MasterTableView.Columns
Settings.ColumnSettings.Add(GetColumnSettings(column))
Next
Settings.AutoGeneratedColumnSettings.Clear()
For
Each
column
As
GridColumn
In
Grid.MasterTableView.AutoGeneratedColumns
Settings.AutoGeneratedColumnSettings.Add(GetColumnSettings(column))
Next
End
Sub
Private
Function
GetColumnSettings(
ByVal
column
As
GridColumn)
As
ColumnSettings
Dim
colSettings
As
New
ColumnSettings()
colSettings.UniqueName = column.UniqueName
colSettings.Width = column.HeaderStyle.Width
colSettings.Visible = column.Visible
colSettings.Display = column.Display
colSettings.OrderIndex = column.OrderIndex
colSettings.CurrentFilterFunction = column.CurrentFilterFunction
colSettings.CurrentFilterValue = column.CurrentFilterValue
colSettings.aggregate =
DirectCast
(column, Telerik.Web.UI.GridBoundColumn).Aggregate
Return
colSettings
End
Function
Private
Sub
SetColumnSettings(
ByRef
column
As
GridColumn,
ByVal
setting
As
ColumnSettings)
column.Display = setting.Display
column.Visible = setting.Visible
column.HeaderStyle.Width = setting.Width
column.OrderIndex = setting.OrderIndex
column.CurrentFilterFunction = setting.CurrentFilterFunction
column.CurrentFilterValue = setting.CurrentFilterValue
DirectCast
(column, Telerik.Web.UI.GridBoundColumn).Aggregate = setting.aggregate
End
Sub
''' <summary>
''' Loads grids settings from a serialized string
''' </summary>
''' <param name="value">The string that contains the serialized settings</param>
Public
Overridable
Sub
LoadSettings(
ByVal
value
As
String
)
LoadSettings(GridSettingsCollection.LoadFromSerializedData(value))
End
Sub
''' <summary>
''' Loads grids settings from a byte array
''' </summary>
''' <param name="data">The byte array that contains the serialized grid settings</param>
Public
Overridable
Sub
LoadSettings(
ByVal
data
As
Byte
())
LoadSettings(GridSettingsCollection.LoadFromSerializedData(data))
End
Sub
''' <summary>
''' Loads grid settings from a GridSettingsCollection instance
''' </summary>
''' <param name="savedSettings">The GridSettingsCollection instance to load settings from</param>
Public
Overridable
Sub
LoadSettings(
ByVal
savedSettings
As
GridSettingsCollection)
If
Grid
Is
Nothing
OrElse
savedSettings
Is
Nothing
Then
Throw
New
NullReferenceException()
End
If
Settings = savedSettings
If
IsSettingSpecified(GridSettingsType.Paging)
Then
LoadPagingSettings()
End
If
If
IsSettingSpecified(GridSettingsType.Grouping)
Then
LoadGroupByExpressions()
End
If
If
IsSettingSpecified(GridSettingsType.Sorting)
Then
LoadSortExpressions()
End
If
If
IsSettingSpecified(GridSettingsType.Filtering)
Then
LoadFilterExpression()
End
If
If
IsSettingSpecified(GridSettingsType.ColumnSettings)
Then
LoadColumnSettings()
End
If
End
Sub
Protected
Overridable
Sub
LoadPagingSettings()
If
Grid.MasterTableView.AllowPaging
AndAlso
Settings.PageSize > 0
Then
Grid.MasterTableView.PageSize = Settings.PageSize
End
If
End
Sub
Protected
Overridable
Sub
LoadGroupByExpressions()
If
Settings.GroupByExpressionsStates
Is
Nothing
Then
Return
End
If
Grid.MasterTableView.GroupByExpressions.Clear()
For
Each
expressionState
As
Object
In
Settings.GroupByExpressionsStates
Dim
expression
As
New
GridGroupByExpression()
DirectCast
(expression, IStateManager).LoadViewState(expressionState)
Grid.MasterTableView.GroupByExpressions.Add(expression)
Next
End
Sub
Protected
Overridable
Sub
LoadSortExpressions()
If
Settings.SortExpressionsState
Is
Nothing
Then
Return
End
If
DirectCast
(Grid.MasterTableView.SortExpressions, IStateManager).LoadViewState(Settings.SortExpressionsState)
End
Sub
Protected
Overridable
Sub
LoadFilterExpression()
Grid.MasterTableView.FilterExpression = Settings.FilterExpression
End
Sub
Protected
Overridable
Sub
LoadColumnSettings()
If
Settings.AutoGeneratedColumnSettings.Count > 0
Then
AddHandler
Grid.ColumnCreated,
New
GridColumnCreatedEventHandler(
AddressOf
Grid_ColumnCreated)
End
If
For
Each
colSetting
As
ColumnSettings
In
Settings.ColumnSettings
Dim
column
As
GridColumn = Grid.MasterTableView.GetColumnSafe(colSetting.UniqueName)
If
column IsNot
Nothing
Then
SetColumnSettings(column, colSetting)
End
If
Next
End
Sub
Private
Sub
Grid_ColumnCreated(
ByVal
sender
As
Object
,
ByVal
e
As
GridColumnCreatedEventArgs)
Dim
colSettings
As
ColumnSettings = Settings.AutoGeneratedColumnSettings.Find(
Function
(cs) cs.UniqueName = e.Column.UniqueName)
Dim
column
As
GridColumn = e.Column
If
colSettings IsNot
Nothing
Then
SetColumnSettings(column, colSettings)
End
If
End
Sub
End
Class
''' <summary>
''' Enumerates the types of grid settings that can be persisted
''' </summary>
<Flags()> _
Public
Enum
GridSettingsType
Paging = 1
Sorting = 2
Filtering = 4
Grouping = 8
ColumnSettings = 16
All = 32
End
Enum
''' <summary>
''' Represents a collection of grid settings
''' </summary>
<Serializable()> _
Public
Class
GridSettingsCollection
Private
_pageSize
As
Integer
Private
_groupByExpressionsStates
As
Object
()
Private
_sortExpressionsState
As
Object
Private
_filterExpression
As
String
Private
_columnSettings
As
List(Of ColumnSettings)
Private
_autoColumnSettings
As
List(Of ColumnSettings)
Public
Property
PageSize()
As
Integer
Get
Return
_pageSize
End
Get
Set
(
ByVal
value
As
Integer
)
_pageSize = value
End
Set
End
Property
Public
Property
GroupByExpressionsStates()
As
Object
()
Get
Return
_groupByExpressionsStates
End
Get
Set
(
ByVal
value
As
Object
())
_groupByExpressionsStates = value
End
Set
End
Property
Public
Property
SortExpressionsState()
As
Object
Get
Return
_sortExpressionsState
End
Get
Set
(
ByVal
value
As
Object
)
_sortExpressionsState = value
End
Set
End
Property
Public
Property
FilterExpression()
As
String
Get
Return
_filterExpression
End
Get
Set
(
ByVal
value
As
String
)
_filterExpression = value
End
Set
End
Property
Public
Property
ColumnSettings()
As
List(Of ColumnSettings)
Get
Return
_columnSettings
End
Get
Set
(
ByVal
value
As
List(Of ColumnSettings))
_columnSettings = value
End
Set
End
Property
Public
Property
AutoGeneratedColumnSettings()
As
List(Of ColumnSettings)
Get
Return
_autoColumnSettings
End
Get
Set
(
ByVal
value
As
List(Of ColumnSettings))
_autoColumnSettings = value
End
Set
End
Property
''' <summary>
''' Returns the serialized object as string
''' </summary>
Public
Overloads
Overrides
Function
ToString()
As
String
Dim
formatter
As
New
LosFormatter()
Using writer
As
New
StringWriter()
formatter.Serialize(writer,
Me
)
Return
writer.ToString()
End
Using
End
Function
''' <summary>
''' Returns the serialized object as byte array
''' </summary>
Public
Function
ToArray()
As
Byte
()
Dim
formatter
As
New
LosFormatter()
Using stream
As
New
MemoryStream()
formatter.Serialize(stream,
Me
)
Return
stream.ToArray()
End
Using
End
Function
''' <summary>
''' Gets the GridSettingsCollectionInstance from its serialized string data
''' </summary>
''' <param name="data">The object as serialized string data</param>
Public
Shared
Function
LoadFromSerializedData(
ByVal
data
As
String
)
As
GridSettingsCollection
Dim
formatter
As
New
LosFormatter()
Return
DirectCast
(formatter.Deserialize(data), GridSettingsCollection)
End
Function
''' <summary>
''' Gets the GridSettingsCollectionInstance from its serialized byte array
''' </summary>
''' <param name="data">The object as serialized byte array</param>
Public
Shared
Function
LoadFromSerializedData(
ByVal
data
As
Byte
())
As
GridSettingsCollection
Dim
formatter
As
New
LosFormatter()
Using stream
As
New
MemoryStream(data)
Return
DirectCast
(formatter.Deserialize(stream), GridSettingsCollection)
End
Using
End
Function
End
Class
''' <summary>
''' Represents a collection of grid column settings
''' </summary>
<Serializable()> _
Public
Class
ColumnSettings
Private
_uniqueName
As
String
Private
_orderIndex
As
Integer
Private
_width
As
Unit
Private
_visible
As
Boolean
Private
_display
As
Boolean
Private
_currentFilterFunction
As
GridKnownFunction
Private
_currentFilterValue
As
String
Private
_aggregate
As
String
Public
Property
UniqueName()
As
String
Get
Return
_uniqueName
End
Get
Set
(
ByVal
value
As
String
)
_uniqueName = value
End
Set
End
Property
Public
Property
aggregate()
As
String
Get
Return
_aggregate
End
Get
Set
(
ByVal
value
As
String
)
_aggregate = value
End
Set
End
Property
Public
Property
OrderIndex()
As
Integer
Get
Return
_orderIndex
End
Get
Set
(
ByVal
value
As
Integer
)
_orderIndex = value
End
Set
End
Property
Public
Property
Width()
As
Unit
Get
Return
_width
End
Get
Set
(
ByVal
value
As
Unit)
_width = value
End
Set
End
Property
Public
Property
Visible()
As
Boolean
Get
Return
_visible
End
Get
Set
(
ByVal
value
As
Boolean
)
_visible = value
End
Set
End
Property
Public
Property
Display()
As
Boolean
Get
Return
_display
End
Get
Set
(
ByVal
value
As
Boolean
)
_display = value
End
Set
End
Property
Public
Property
CurrentFilterFunction()
As
GridKnownFunction
Get
Return
_currentFilterFunction
End
Get
Set
(
ByVal
value
As
GridKnownFunction)
_currentFilterFunction = value
End
Set
End
Property
Public
Property
CurrentFilterValue()
As
String
Get
Return
_currentFilterValue
End
Get
Set
(
ByVal
value
As
String
)
_currentFilterValue = value
End
Set
End
Property
End
Class
I do however have another issue that appears to be experienced by others but I have not been able to find a resolution. http://www.telerik.com/community/forums/aspnet-ajax/grid/paging-and-aggregate-function.aspx I am experiencing the same issue where if i have data in a group that spans pages (I am not using custom paging) the group footer only calculates for the page and not for the entire group. It appears from the post that there was a formal ticket for this but the resolution was not posted. Here is the markup for the grid. I would really appreciate your help solving this. I am setting the aggregate using the header context menu.
Thanks
<
telerik:RadGrid
ID
=
"grid_adhoc_viewer"
AllowSorting
=
"True"
ShowGroupPanel
=
"True"
Skin
=
"WebBlue"
AllowPaging
=
"True"
PageSize
=
"10"
runat
=
"server"
GridLines
=
"None"
Width
=
"100%"
OnItemCommand
=
"RadGrid1_ItemCommand"
GroupingEnabled
=
"true"
ShowStatusBar
=
"true"
ShowFooter
=
"True"
EnableHeaderContextMenu
=
"true"
EnableHeaderContextAggregatesMenu
=
"true"
EnableLinqExpressions
=
"true"
>
<
ExportSettings
HideStructureColumns
=
"true"
/>
<
MasterTableView
Width
=
"100%"
CommandItemDisplay
=
"Top"
AutoGenerateColumns
=
"True"
ShowGroupFooter
=
"true"
>
<
PagerStyle
Mode
=
"NextPrevNumericAndAdvanced"
/>
<
CommandItemSettings
ShowExportToWordButton
=
"true"
ShowExportToExcelButton
=
"true"
ShowExportToCsvButton
=
"true"
ShowExportToPdfButton
=
"true"
ShowAddNewRecordButton
=
"false"
ShowRefreshButton
=
"false"
/>
</
MasterTableView
>
<
ClientSettings
AllowGroupExpandCollapse
=
"True"
ReorderColumnsOnClient
=
"True"
AllowDragToGroup
=
"True"
AllowColumnsReorder
=
"True"
>
</
ClientSettings
>
<
GroupingSettings
ShowUnGroupButton
=
"true"
/>
</
telerik:RadGrid
>