I'm trying to swap out the datasource on a ComboBoxColumn depending on other data bound to the row. Below is a simple example to reproduce the problem. (In my actual project we are not using simple strings for the options)
In this example the second row's combo box should have a 3rd option not shown by the first row.
If I let the grid automatically generate columns instead of adding it manually it seems to work correctly. What am I doing wrong?
Relevant code behind for the form:
In this example the second row's combo box should have a 3rd option not shown by the first row.
If I let the grid automatically generate columns instead of adding it manually it seems to work correctly. What am I doing wrong?
public
class
SimpleObject
{
public
string
Option {
get
;
set
; }
public
bool
ShowOtherOptions {
get
;
set
; }
public
SimpleObject (
string
option)
{
Option = option;
}
}
Relevant code behind for the form:
private
List<String> options =
new
List<String>(){
"First"
,
"Second"
};
private
List<String> specialoptions =
new
List<String>(){
"First"
,
"Second"
,
"Third"
};
public
SimpleSample ()
{
List<SimpleObject> myList =
new
List<SimpleObject> ();
myList.Add (
new
SimpleObject (
"First"
));
myList.Add (
new
SimpleObject (
"Second"
) {ShowOtherOptions =
true
});
InitializeComponent ();
this
.radGridView1.AutoGenerateColumns =
false
;
AddComboColoumn ();
radGridView1.DataSource = myList;
radGridView1.EditorRequired += radGridView1_EditorRequired;
}
private
void
AddComboColoumn()
{
GridViewComboBoxColumn comboColumn =
new
GridViewComboBoxColumn(
"ComboBox column"
);
comboColumn.Width = 150;
comboColumn.FieldName =
"Option"
;
comboColumn.DataSource = options;
radGridView1.Columns.Add(comboColumn);
}
private
void
radGridView1_EditorRequired (
object
sender, Telerik.WinControls.UI.EditorRequiredEventArgs e)
{
if
(radGridView1.CurrentColumn.Name ==
"Option"
)
{
var data =
(((Telerik.WinControls.UI.GridViewEditManager) (sender)).GridViewElement.CurrentRow).DataBoundItem
as
SimpleObject;
RadDropDownListEditor dropdownEditor =
new
RadDropDownListEditor ();
if
(data.ShowOtherOptions)
{
((RadDropDownListEditorElement) (dropdownEditor.EditorElement)).DataSource = specialoptions;
}
else
{
((RadDropDownListEditorElement) (dropdownEditor.EditorElement)).DataSource = options;
}
dropdownEditor.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
e.Editor = dropdownEditor;
}
}