I have a RadGrid with several GridDropDownColumns configured as well as several GridBoundColumns. The grid is bound to a data source programatically using the NeedDataSource event. The dropdown columns use RadComboBox style drop downs which are also bound to datasources programatically, in the grid's ItemDataBound event when the grid is in Edit mode. When the grid is not in Edit mode, I set the value of the dropdown column cell's Text property, also in the ItemDataBound event.
This all works are required. However if I do something that causes a postback, but does not rebind the grid when the grid is not in Edit mode - for example selecting a row in the grid - the values in the dropdown columns go blank. Is the TableCell.Text property not persisted through postback? If not, which property should I use for this purpose, or how can I populate it again, given that the ItemDataBound property does not fire which you simply select a row in the grid.
Code sample below:
This all works are required. However if I do something that causes a postback, but does not rebind the grid when the grid is not in Edit mode - for example selecting a row in the grid - the values in the dropdown columns go blank. Is the TableCell.Text property not persisted through postback? If not, which property should I use for this purpose, or how can I populate it again, given that the ItemDataBound property does not fire which you simply select a row in the grid.
Code sample below:
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdControl"
AllowFilteringByColumn
=
"True"
AllowPaging
=
"True"
AllowSorting
=
"True"
GridLines
=
"None"
>
<
MasterTableView
AutoGenerateColumns
=
"False"
EditMode
=
"EditForms"
DataKeyNames
=
"ControlId, StepId"
CommandItemDisplay
=
"Bottom"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to Pdf"
></
CommandItemSettings
>
<
Columns
>
<
telerik:GridButtonColumn
ButtonType
=
"LinkButton"
Text
=
"Select"
CommandName
=
"Select"
UniqueName
=
"Select"
>
</
telerik:GridButtonColumn
>
<
telerik:GridEditCommandColumn
UniqueName
=
"Edit"
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridButtonColumn
CommandName
=
"Delete"
Text
=
"Delete"
UniqueName
=
"Delete"
>
</
telerik:GridButtonColumn
>
<
telerik:GridDropDownColumn
DataField
=
"ControlName"
HeaderText
=
"Control Type"
UniqueName
=
"ControlName"
>
</
telerik:GridDropDownColumn
>
<
telerik:GridBoundColumn
DataField
=
"MaxLength"
HeaderText
=
"Max Length"
UniqueName
=
"MaxLength"
>
</
telerik:GridBoundColumn
>
<
telerik:GridDropDownColumn
DataField
=
"TextMode"
HeaderText
=
"Text Mode"
UniqueName
=
"TextMode"
/>
<
telerik:GridDropDownColumn
DataField
=
"ListSource"
HeaderText
=
"List Source"
UniqueName
=
"ListSource"
>
</
telerik:GridDropDownColumn
>
<
telerik:GridBoundColumn
DataField
=
"EmptyListText"
HeaderText
=
"Empty List Text"
UniqueName
=
"EmptyListText"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
<
FilterMenu
>
</
FilterMenu
>
<
HeaderContextMenu
CssClass
=
"GridContextMenu GridContextMenu_Default"
>
</
HeaderContextMenu
>
</
telerik:RadGrid
>
Private Sub grdControl_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles grdControl.ItemDataBound
If TypeOf e.Item Is GridEditableItem Then
Dim item As GridEditableItem = e.Item
Dim control As FormControlInfo
Dim ffc As New FlexFormController()
If TypeOf e.Item Is GridEditFormItem AndAlso e.Item.IsInEditMode Then
If e.Item.OwnerTableView.IsItemInserted Then
control = New FormControlInfo()
Else
control = e.Item.DataItem
End If
Dim editor As GridDropDownListColumnEditor
Dim cbo As RadComboBox
'ControlName dropdown
Dim path As String = Server.MapPath("~/DesktopModules/Dotcom.FlexForm/Components/FormControls/")
Dim files As String() = IO.Directory.GetFiles(path, "*.ascx")
For i = 0 To files.Length - 1
files(i) = IO.Path.GetFileName(files(i)).Replace(".ascx", String.Empty)
Next
editor = item.EditManager.GetColumnEditor("ControlName")
editor.DataSource = files
editor.DataBind()
editor.SelectedValue = control.ControlName
'ListSource dropdown
editor = item.EditManager.GetColumnEditor("ListSource")
Dim controller As New Lists.ListController()
Dim list As Lists.ListInfoCollection
If String.IsNullOrEmpty(control.ParentKey) Then
list = controller.GetListInfoCollection()
editor.DataTextField = "DisplayName"
editor.DataValueField = "Key"
Else
list = controller.GetListInfoCollection(Nothing, control.ParentKey.Replace(":", "."))
editor.DataTextField = "Name"
editor.DataValueField = "Name"
End If
editor.DataSource = list
editor.DataBind()
cbo = editor.ComboBoxControl
cbo.Items.Insert(0, New RadComboBoxItem(Localization.GetString("EmptyListItem", Definition.SharedResources), String.Empty))
If Not String.IsNullOrEmpty(control.ListSource) Then
editor.SelectedValue = control.ListSource
End If
'TextMode dropdown
editor = item.EditManager.GetColumnEditor("TextMode")
editor.DataSource = [Enum].GetNames(GetType(TextBoxMode))
editor.DataBind()
cbo = editor.ComboBoxControl
cbo.Items.Insert(0, New RadComboBoxItem(Localization.GetString("EmptyListItem", Definition.SharedResources), String.Empty))
Else
control = e.Item.DataItem
item("ControlName").Text = control.ControlName
item("ListSource").Text = control.ListSource
item("EmptyListText").Text = Server.HtmlEncode(control.EmptyListText)
item("ParentControlId").Text = control.ParentId
If control.TextMode.HasValue Then
item("TextMode").Text = control.TextMode.Value.ToString
End If
End If
End If
End Sub