Hi
Version: Q2 2010 SP2
I want use custom editor.
So in EditorRequired handler I create RadDropDownListEditor
and in CellBeginEdit I set data source for dropdownlist.
In CellBeginEdit handler I want also set DropDownStyle on DropDownList but I get exception from telerik source code NullReferenceException.
If I do not change DropDownStyle property everything looks ok.
I tried set DropDownStyle on DropDownList in EditorRequired handler but I also got the same exception.
I cannot use just combo box type of column – in the same column I need display different editors.
Check my short source code.
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls.UI;
namespace
GridViewComboBox
{
public
partial
class
Form1 : Form
{
private
CompoundAssignmentExpression _list =
new
CompoundAssignmentExpression();
public
Form1()
{
InitializeComponent();
SimpleAssignmentExpression sae =
new
SimpleAssignmentExpression();
sae.AttributeName =
"Test"
;
sae.Value =
"123"
;
_list.Add(sae);
sae =
new
SimpleAssignmentExpression();
sae.AttributeName =
"Test1"
;
sae.Value =
"xx"
;
_list.Add(sae);
bsCAE.DataSource = _list;
}
private
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor comboBoxEditor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(comboBoxEditor !=
null
)
{
RadDropDownListEditorElement editorElement = comboBoxEditor.EditorElement
as
RadDropDownListEditorElement;
editorElement.DataSource =
new
string
[] {
"aaa"
,
"bbb"
,
"ccc"
,
"ddd"
};
//these lines cause exception:
//editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
//comboBoxEditor.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
}
private
void
radGridView1_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
if
((radGridView1.CurrentRow.Index == 0) && (radGridView1.CurrentCell.ColumnIndex == 0))
{
RadDropDownListEditor editor =
new
RadDropDownListEditor();
//exception here:
//editor.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
e.EditorType =
typeof
(RadDropDownListEditor);
e.Editor = editor;
}
}
}
}
Regards
15 Answers, 1 is accepted

ok I solved this problem
I used RadComboBoxEditor - I can set for this class DropDownStyle
on DropDownList.
But this was weird becasue GridViewComboBoxColumn uses RadDropDownListEditor as editor.
Thank you for writing.
I am unable to reproduce the described issues when setting DropDownStyle property. The following code works fine on my side with latest official version Q2 2010 SP2 :
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor editor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
RadDropDownListEditorElement editorElement = (RadDropDownListEditorElement)editor.EditorElement;
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
}
}
If you do not use the latest version of RadControls, please download it and give it a try. If you still experience any issues please send me a small sample project which demonstrates your scenario. This will allow me to investigate the case further.
Greetings,
Martin Vasilev
the Telerik team

The exception is happening here:
void
radGridView1_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
if
(radGridView1.CurrentCell.ColumnInfo.Name ==
"SomeComboboxColumn"
)
{
RadDropDownListEditor editor =
new
RadDropDownListEditor();
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
if
(editorElement !=
null
)
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
e.EditorType =
typeof
(RadDropDownListEditor);
e.Editor = editor;
}
}
and / or here:
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor editor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
if
(editorElement !=
null
)
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
}
}
And it is very strange because it is setting the style, but it's throwing a Null Reference... and this happens JUST for DropDownList style, for DropDown everything is OK.
*Update: For anyone interested you can use this as a workaround:
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadComboBoxEditor editor =
this
.radGridView1.ActiveEditor
as
RadComboBoxEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadComboBoxEditorElement;
if
(editorElement !=
null
)
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
}
}
void
radGridView1_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
if
(radGridView1.CurrentCell.ColumnInfo.Name ==
"SomeComboboxColumn"
)
{
RadComboBoxEditor editor =
new
RadComboBoxEditor();
var editorElement = editor.EditorElement
as
RadComboBoxEditorElement;
if
(editorElement !=
null
)
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
e.EditorType =
typeof
(RadComboBoxEditorElement);
e.Editor = editor;
}
}
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga

I use 2010 Q2 SP2
This workaround is not perfect:
- When cell is selected and I want expand combo box, very often combo box is expanded and immediately collapsed. User cannot select value from list. I had very similar problem with column GridViewComboBoxColumn in 2010 Q2 SP1.
2. Combo box is not automatically expanded after cell click when previously was selected some another cell – in this way works
column GridViewComboBoxColumn.
I cannot get the same behavior when I use custom editor.
In CellBeginEdit I call RadComboBoxEditorElement.ShowPopup() but it does not work.
3. Background of selected cell is pink/yellow – it should be white.
Do you have any ideas?
Regards

1 & 2. This was always an issue, at least in my point of view with the ComboBox, because if you just try this test in an application, you will see that the dropdown for the DropDownList stays open while as the dropdown for the ComboBox closes:
var dropDownList =
new
RadDropDownList();
dropDownList.Dock = DockStyle.Top;
dropDownList.DataSource = some data source;
this
.Controls.Add(dropDownList);
dropDownList.ShowDropDown();
var comboBox =
new
RadComboBox();
comboBox.Dock = DockStyle.Bottom;
comboBox.DataSource = same data source
as
the dropdown;
this
.Controls.Add(comboBox);
comboBox.ShowDropDown();
3. That could be just a strange theme issue, i will look into it, but the 2 points are the most important ones..
Best Regards,
Emanuel Varga

Raymond, please try the following code, from my test i can see that it is working fine:
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor editor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadComboBoxEditorElement;
if
(editorElement !=
null
)
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
}
}
void
radGridView1_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
if
(radGridView1.CurrentCell.ColumnInfo.Name ==
"SomeComboboxColumn"
)
{
e.EditorType =
typeof
(RadDropDownListEditor);
}
}
It's still strange that i had to cast to ComboBoxEditorElement instead of DropDownListEditorElement, but it's working, please let me know if this is OK for you.
Best Regards,
Emanuel Varga

It does not work in my app.
1. In EditorRequired handler I set
e.EditorType = typeof(RadDropDownListEditor);
2. In CellBeginEdit handler I do the same as you
…
var editorElement = comboBoxEditor.EditorElement as RadComboBoxEditorElement;
and editorElement is NULL L
I use version 2010.2.10.914.

You're right, it's null, i think I'm too tired today, but i was assuming it was set, but in my test application you cannot type inside the DropDownListEditor, not even when it's in DropDown mode
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor editor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
if
(editorElement !=
null
)
{
try
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
catch
(Exception)
{
}
}
}
}
** Stupid workaround but altough it is throwing an exception it IS changing the drop down Style
Just as a fun fact, you can change the value from the visual studio debugger from DropDown to DropDownLIst, and it is changing it without any exception.
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga

This workaround is still not enough good.
When I first time expand comb box everything is ok, but if I select some another cell and return to cell with comb box that was previously expanded this combo box does not have any items! L
I don`t know what to do with this simple use case.

This does not happen in my test application, please test the following application and tell me what is different in your approach
using
System;
using
System.ComponentModel;
using
System.Windows.Forms;
using
Telerik.WinControls.UI;
public
partial
class
Form1 : Form
{
private
RadGridView radGridView1 =
new
RadGridView();
public
Form1()
{
InitializeComponent();
this
.Load +=
new
EventHandler(Form1_Load);
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
radGridView1.Dock = DockStyle.Fill;
this
.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
this
.radGridView1.EditorRequired +=
new
EditorRequiredEventHandler(radGridView1_EditorRequired);
this
.radGridView1.CellBeginEdit +=
new
GridViewCellCancelEventHandler(radGridView1_CellBeginEdit);
radGridView1.DataBindingComplete +=
new
GridViewBindingCompleteEventHandler(radGridView1_DataBindingComplete);
this
.radGridView1.DataSource =
new
ProductsCollection(1000);
this
.Controls.Add(radGridView1);
}
void
radGridView1_DataBindingComplete(
object
sender, GridViewBindingCompleteEventArgs e)
{
radGridView1.Columns[
"BuyerId"
].IsVisible =
false
;
var column =
new
GridViewComboBoxColumn(
"SomeComboboxColumn"
,
"SomeComboboxColumn"
);
column.DataSource =
new
BuyersCollection();
column.ValueMember =
"Id"
;
column.FieldName =
"BuyerId"
;
column.DisplayMember =
"Name"
;
this
.radGridView1.Columns.Add(column);
this
.radGridView1.BestFitColumns();
}
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor editor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
if
(editorElement !=
null
)
{
try
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
catch
(Exception)
{
}
}
};
}
void
radGridView1_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
if
(radGridView1.CurrentCell.ColumnInfo.Name ==
"SomeComboboxColumn"
)
{
e.EditorType =
typeof
(RadDropDownListEditor);
}
}
}
#region Helpers
public
class
Product
{
public
int
Id
{
get
;
set
;
}
public
int
BuyerId
{
get
;
set
;
}
public
Product(
int
id,
int
buyerId)
{
this
.Id = id;
this
.BuyerId = buyerId;
}
}
public
class
Buyer
{
public
int
Id
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
public
Buyer(
int
id,
string
name)
{
this
.Id = id;
this
.Name = name;
}
}
public
class
ProductsCollection : BindingList<Product>
{
public
ProductsCollection(
int
noItems)
{
for
(
int
i = 0; i < noItems; i++)
{
this
.Add(
new
Product(i, i + 10));
}
}
}
public
class
BuyersCollection : BindingList<Buyer>
{
public
BuyersCollection()
{
for
(
int
i = 0; i < 10; i++)
{
this
.Add(
new
Buyer(i + 10,
"Buyer"
+ (i + 1)));
}
}
}
#endregion Helpers
Best Regards,
Emanuel Varga

In your example you used GridViewComboBoxColumn – it does not satisfy my needs.
I need to have in one column for some rows simple cell (text box) and for other rows combo box in cell.
In your example in all rows for column GridViewComboBoxColumn there is combo box.
I used GridViewTextBoxColumn and for some rows I want have combo box for this column.

Hope this time everything will be OK...
Please try this, it works in my tests with a GridTextBoxColumn:
void
radGridView1_CellBeginEdit(
object
sender, GridViewCellCancelEventArgs e)
{
RadDropDownListEditor editor =
this
.radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
if
(editorElement !=
null
)
{
editorElement.DataSource = products;
editorElement.DisplayMember =
"Name"
;
editorElement.ValueMember =
"Name"
;
}
}
}
void
radGridView1_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
if
(radGridView1.CurrentCell.ColumnInfo.Name ==
"Name"
&& radGridView1.CurrentRow.Index % 2 == 0)
{
var editor =
new
RadDropDownListEditor();
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
try
{
editorElement.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;
}
catch
(Exception)
{
}
e.Editor = editor;
e.EditorType =
typeof
(RadDropDownListEditor);
}
}
Please let me know if this is working for you...
Best Regards,
Emanuel Varga

Fantastic, it works!
Thank you very much!
But you could fix this problem with exception – source code with empty catch does not look professional.

I know, but sadly I'm not the one who can fix it, just glad to be able to help.
Best Regards,
Emanuel Varga
I managed to reproduce the described exception. We are going to address it in the next major release. Thank you for your cooperation.
Best wishes,
Martin Vasilev
the Telerik team