I have a RadGrid using a CommandItemTemplate wrapped in an RadAjaxPanel:
The RadComboBox (id gridStatCombo) is populated server side in Page_Load:
This process works great on the initial load of the control. However, after making any form of Ajax call (sorting, paging, grouping, etc.) the combo box in the command item template is not updated. The content disappears. Stepping through the code, I can see that it is executed, but the control does not appear to be updated. The rest of the grid is updated via the Ajax call though.
What am I missing?
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
/>
<
telerik:RadAjaxPanel
ID
=
"RadAjaxPanel1"
runat
=
"server"
ClientEvents-OnRequestStart
=
"RequestStart"
ClientEvents-OnResponseEnd
=
"ResponseEnd"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
>
<
telerik:RadGrid
ID
=
"AccountGrid1"
runat
=
"server"
OnNeedDataSource
=
"AccountGrid1_NeedDataSource"
OnSortCommand
=
"AccountGrid1_SortCommand"
OnGroupsChanging
=
"AccountGrid1_GroupsChanging"
OnColumnCreated
=
"AccountGrid1_ColumnCreated"
OnItemCreated
=
"AccountGrid1_ItemCreated"
AutoGenerateColumns
=
"true"
AllowPaging
=
"true"
AllowCustomPaging
=
"true"
AllowSorting
=
"true"
GroupingEnabled
=
"true"
ShowGroupPanel
=
"true"
ShowFooter
=
"true"
ShowHeader
=
"true"
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
<
MasterTableView
DataKeyNames
=
"Id,ClientId"
ClientDataKeyNames
=
"Id"
AllowNaturalSort
=
"false"
AllowMultiColumnSorting
=
"false"
AllowCustomSorting
=
"true"
CommandItemDisplay
=
"Top"
>
<
CommandItemStyle
HorizontalAlign
=
"Right"
/>
<
CommandItemTemplate
>
<
asp:LinkButton
ID
=
"RefreshLinkButton"
runat
=
"server"
CommandName
=
"RebindGrid"
><%= Navigator.Icon("Refresh", "refresh").ToHtmlImage() %> Refresh</
asp:LinkButton
> |
<
telerik:RadComboBox
ID
=
"gridStatCombo"
runat
=
"server"
OnClientSelectedIndexChanged
=
"EnableStatButton"
DropDownWidth
=
"250"
Visible
=
"false"
>
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"Select a field to group by"
Value
=
""
/>
</
Items
>
</
telerik:RadComboBox
>
<
telerik:RadComboBox
ID
=
"gridStatDateCombo"
runat
=
"server"
Width
=
"75"
Visible
=
"false"
Enabled
=
"false"
>
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"Day"
Value
=
"DAY"
/>
<
telerik:RadComboBoxItem
Text
=
"Month"
Value
=
"MONTH"
Selected
=
"true"
/>
<
telerik:RadComboBoxItem
Text
=
"Year"
Value
=
"YEAR"
/>
</
Items
>
</
telerik:RadComboBox
>
<
telerik:RadButton
ID
=
"gridStatBtn"
runat
=
"server"
Text
=
"View Statistics"
OnClick
=
"Stat_Click"
Enabled
=
"false"
Visible
=
"false"
/> |
<
telerik:RadComboBox
ID
=
"gridExportCombo"
runat
=
"server"
OnClientSelectedIndexChanged
=
"EnableExportButton"
DropDownWidth
=
"250"
>
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"Select an export format"
Value
=
""
/>
<
telerik:RadComboBoxItem
Text
=
"Excel"
Value
=
"Excel"
ImageUrl
=
"~/Main/Content/Images/Icons/excel.png"
/>
<
telerik:RadComboBoxItem
Text
=
"Word"
Value
=
"Word"
ImageUrl
=
"~/Main/Content/Images/Icons/ms_word_2.png"
/>
<
telerik:RadComboBoxItem
Text
=
"PDF"
Value
=
"PDF"
ImageUrl
=
"~/Main/Content/Images/Icons/filetype_pdf.png"
/>
<
telerik:RadComboBoxItem
Text
=
"Comma Separated Values (CSV)"
Value
=
"CSV"
ImageUrl
=
"~/Main/Content/Images/Icons/csv_file.png"
/>
<
telerik:RadComboBoxItem
Text
=
"Tab-delimited"
Value
=
"Tab"
ImageUrl
=
"~/Main/Content/Images/Icons/txt_file.png"
/>
<
telerik:RadComboBoxItem
Text
=
"Tab-delimited w/ Quotes"
Value
=
"TabQuote"
ImageUrl
=
"~/Main/Content/Images/Icons/txt_file.png"
/>
</
Items
>
</
telerik:RadComboBox
>
<
telerik:RadButton
ID
=
"gridBtnExport"
runat
=
"server"
Text
=
"Export"
OnClick
=
"Export_Click"
Enabled
=
"false"
/>
</
CommandItemTemplate
>
<
PagerStyle
AlwaysVisible
=
"true"
/>
</
MasterTableView
>
<
ClientSettings
AllowDragToGroup
=
"true"
AllowColumnsReorder
=
"true"
>
<
Selecting
AllowRowSelect
=
"true"
/>
<
ClientEvents
OnRowDblClick
=
"ViewAccount"
OnGridCreated
=
"ResizeAccountGrid"
/>
<
Scrolling
AllowScroll
=
"true"
UseStaticHeaders
=
"true"
ScrollHeight
=
"100%"
/>
</
ClientSettings
>
<
GroupingSettings
ShowUnGroupButton
=
"true"
/>
<
FooterStyle
HorizontalAlign
=
"Right"
/>
<
ExportSettings
ExportOnlyData
=
"true"
HideStructureColumns
=
"true"
IgnorePaging
=
"true"
/>
</
telerik:RadGrid
>
<
telerik:RadScriptBlock
ID
=
"AccountGridScriptBlock"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
$(window).resize(function () { ResizeAccountGrid(); });
function ResizeAccountGrid(sender, eventArgs) {
ResizeGrid($find("<%= AccountGrid1.ClientID %>"));
}
function ViewAccount(sender, eventArgs) {
var accountId = eventArgs.get_gridDataItem().getDataKeyValue("Id");
ToolClick(null, null, "<%= Navigator.Inquiry() %>" + "?Id=" + accountId, "<%= (int)SiteNavigatorTab.Inquiry %>", false);
}
function RequestStart(sender, eventArgs) {
//Log the start time
startTime = new Date();
if (eventArgs.EventTarget.indexOf("gridBtnExport") > 0) {
eventArgs.EnableAjax = false;
}
}
function ResponseEnd(sender, eventArgs) {
//Log the end time
var endTime = new Date();
//Display the total time
//$get("<%= lblTotal.ClientID %>").innerHTML = endTime - startTime + " ms";
}
function EnableExportButton(sender, eventArgs) {
var item = eventArgs.get_item();
var button = $find('<%= (AccountGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0]).FindControl("gridBtnExport").ClientID %>');
var selectedIndex = item.get_index();
button.set_enabled(selectedIndex != 0);
}
function EnableStatButton(sender, eventArgs) {
var item = eventArgs.get_item();
var button = $find('<%= (AccountGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0]).FindControl("gridStatBtn").ClientID %>');
var dateBreak = $find('<%= (AccountGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0]).FindControl("gridStatDateCombo").ClientID %>');
var selectedIndex = item.get_index();
button.set_enabled(selectedIndex != 0);
var dateFields = "<%= JsDateTimeFields %>".split("|");
var text = item.get_text();
var exists = $.inArray(text, dateFields) > -1;
dateBreak.set_enabled(exists);
}
</
script
>
</
telerik:RadScriptBlock
>
</
telerik:RadAjaxPanel
>
The RadComboBox (id gridStatCombo) is populated server side in Page_Load:
protected
void
Page_Load(
object
sender, EventArgs e)
{
var gridStatCombo = (RadComboBox)AccountGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0].FindControl(
"gridStatCombo"
);
var gridStatDateCombo = (RadComboBox)AccountGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0].FindControl(
"gridStatDateCombo"
);
var gridStatBtn = (RadButton)AccountGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0].FindControl(
"gridStatBtn"
);
foreach
(var fieldName
in
Configuration[Vars.StatisticalReportFields].Value
.Split(
new
[] {
", "
}, StringSplitOptions.RemoveEmptyEntries).OrderBy(f => f.Trim()))
{
if
(!User.ParentCawClient.HasAccountField(fieldName))
continue
;
var field = User.ParentCawClient.GetAccountField(fieldName);
gridStatCombo.Items.Add(
new
RadComboBoxItem(field.DisplayName, field.ColumnName));
if
(SqlServerUtils.IsDateTimeSqlType(field.SqlDbType))
JsDateTimeFields += field.DisplayName +
"|"
;
}
if
(gridStatCombo.Items.Count > 1)
{
gridStatCombo.Visible =
true
;
gridStatDateCombo.Visible =
true
;
gridStatBtn.Visible =
true
;
}
}
This process works great on the initial load of the control. However, after making any form of Ajax call (sorting, paging, grouping, etc.) the combo box in the command item template is not updated. The content disappears. Stepping through the code, I can see that it is executed, but the control does not appear to be updated. The rest of the grid is updated via the Ajax call though.
What am I missing?