Holger Boskugel
Top achievements
Rank 2
Holger Boskugel
asked on 18 Apr 2012, 09:59 AM
Hello,
I'm using a GridViewComboBoxColumn with DropDownStyle = DropDown, but the underlaying RadDropDownListEditor don't assing the typed text from text area into cell value. Only entries from the list are placed in cell value. Datasource behind the combobox is a List<string>. I want do two things:
a) Get the editor working to assing also value not placed in list to cell value
b) Get text from editor text area to be able checking agains data list and adding to list for next use of editor
Regards from Leipzig
Holger Boskugel
I'm using a GridViewComboBoxColumn with DropDownStyle = DropDown, but the underlaying RadDropDownListEditor don't assing the typed text from text area into cell value. Only entries from the list are placed in cell value. Datasource behind the combobox is a List<string>. I want do two things:
a) Get the editor working to assing also value not placed in list to cell value
b) Get text from editor text area to be able checking agains data list and adding to list for next use of editor
Regards from Leipzig
Holger Boskugel
4 Answers, 1 is accepted
0
Accepted
Hello Holger,
We have an article which exactly covers your scenario. It allows the end-user to type text freely and if the value does not exists in the list of available values, this value is added to the list and committed to the cell:
http://www.telerik.com/help/winforms/gridview-editors-howto-allow-end-users-to-add-items-to-dropdownlisteditor.html
I hope this helps.
Kind regards,
Nikolay
the Telerik team
We have an article which exactly covers your scenario. It allows the end-user to type text freely and if the value does not exists in the list of available values, this value is added to the list and committed to the cell:
http://www.telerik.com/help/winforms/gridview-editors-howto-allow-end-users-to-add-items-to-dropdownlisteditor.html
I hope this helps.
Kind regards,
Nikolay
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
0
Accepted
Holger Boskugel
Top achievements
Rank 2
answered on 20 Apr 2012, 10:45 AM
Thanks, got me started on right way to my DropDownListAddEditor, see class below
And implementation in underlaying Form class is quiet easy:
Hope it helps others.
Regards
Holger
..
http://vbwebprofi.de
/// <summary>
/// Rad controls drop down editor with InputValueNotFound event
/// </summary>
internal
class
DropDownListAddEditor :
RadDropDownListEditor
{
protected
GridDataCellElement cell;
protected
InputValueNotFoundArgs e;
/// <summary>
/// Event handler for missing values in item list of editor
/// </summary>
/// <param name="sender">Event source of type DropDownListAddEditor</param>
/// <param name="e">Event arguments</param>
public
delegate
void
InputValueNotFoundHandler(
object
sender,
InputValueNotFoundArgs e);
/// <summary>
/// Event for missing values in item list of editor
/// </summary>
public
event
InputValueNotFoundHandler InputValueNotFound;
/// <summary>
/// Constructor
/// </summary>
public
DropDownListAddEditor() :
base
()
{
// Nothing to do
}
public
override
bool
EndEdit()
{
RadDropDownListEditorElement element =
this
.EditorElement
as
RadDropDownListEditorElement;
string
text = element.Text;
RadListDataItem item =
null
;
foreach
(RadListDataItem entry
in
element.Items)
{
if
(entry.Text == text)
{
item = entry;
break
;
}
}
if
((item ==
null
) &&
(InputValueNotFound !=
null
))
{
// Get cell for handling CellEndEdit event
this
.cell = (
this
.EditorManager
as
GridViewEditManager).GridViewElement.CurrentCell;
// Add event handling for setting value to cell
(
this
.OwnerElement
as
GridComboBoxCellElement).GridControl.CellEndEdit +=
new
GridViewCellEventHandler(OnCellEndEdit);
this
.e =
new
InputValueNotFoundArgs(element);
this
.InputValueNotFound(
this
,
this
.e);
}
return
base
.EndEdit();
}
/// <summary>
/// Puts added value into cell value
/// </summary>
/// <param name="sender">Event source of type GridViewEditManager</param>
/// <param name="e">Event arguments</param>
/// <remarks>Connected to GridView event CellEndEdit</remarks>
protected
void
OnCellEndEdit(
object
sender,
GridViewCellEventArgs e)
{
if
(
this
.e !=
null
)
{
// Handle only added value, others by default handling of grid
if
((
this
.cell == (sender
as
GridViewEditManager).GridViewElement.CurrentCell) &&
this
.e.ValueAdded)
{
e.Row.Cells[e.ColumnIndex].Value =
this
.e.Value;
}
this
.e =
null
;
}
}
/// <summary>
/// Event arguments for InputValueNotFound
/// </summary>
public
class
InputValueNotFoundArgs :
EventArgs
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="editorElement">Editor assiciated element</param>
internal
protected
InputValueNotFoundArgs(RadDropDownListEditorElement editorElement)
{
this
.EditorElement = editorElement;
this
.Text = editorElement.Text;
}
/// <summary>
/// Editor associated element
/// </summary>
public
RadDropDownListEditorElement EditorElement {
get
;
protected
set
; }
/// <summary>
/// Input text with no match in drop down list
/// </summary>
public
string
Text {
get
;
protected
set
; }
/// <summary>
/// Text related missing value
/// </summary>
/// <remarks>Has to be set during event processing</remarks>
/// <seealso cref="ValueAdded"/>
public
object
Value {
get
;
set
; }
/// <summary>
/// Missing value added
/// </summary>
/// <remarks>Set also the Value property</remarks>
public
bool
ValueAdded {
get
;
set
; }
}
}
And implementation in underlaying Form class is quiet easy:
private
void
GridView_EditorRequired(
object
sender, EditorRequiredEventArgs e)
{
GridViewEditManager manager = sender
as
GridViewEditManager;
// Assigning DropDownListAddEditor to the right column
if
(manager.GridViewElement.CurrentColumn.Name ==
"SPSite"
)
{
DropDownListAddEditor editor =
new
DropDownListAddEditor();
editor.InputValueNotFound +=
new
DropDownListAddEditor.InputValueNotFoundHandler(DropDownListAddEditor_InputValueNotFound);
e.Editor = editor;
}
}
private
void
DropDownListAddEditor_InputValueNotFound(
object
sender, DropDownListAddEditor.InputValueNotFoundArgs e)
{
if
(!
string
.IsNullOrEmpty(e.Text))
{
List<
string
> values = e.EditorElement.DataSource
as
List<
string
>;
values.Add(e.Text);
e.Value = e.Text;
e.ValueAdded =
true
;
}
}
Hope it helps others.
Regards
Holger
..
http://vbwebprofi.de
0
Hello Holger,
Nikolay
the Telerik team
Thank you for sharing your solution with the community. I believe that it will be helpful to those interested in the topic.
Let us know if you have additional questions or feedback.
Nikolay
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
0
Michael Bakker
Top achievements
Rank 2
answered on 05 Dec 2014, 10:39 AM
Thanks for sharing!