I am building the property grid at runtime and I want to use the standard property editors/Attributes  such as Password, browser, dropdown list, etc.    I've found examples of how to write custom editors, but in this case I want to leverage the build in editors.    How can I assign editor attributes at runtime for programmatically added items in a property grid ?
This is the WinForm version of the control , not WPF
                                This is the WinForm version of the control , not WPF
5 Answers, 1 is accepted
0
                                Hello Dennis,
Thank you for writing.
It is possible to specify the used editor for a certain property by using the EditorRequired event and setting the EditorType property:
Additionally if you populate the RadPropertyGrid via RadPropertyStore with PropertyStoreItems, you are allowed to add attributes, including EditorAttribute as well:
 
 
 
I hope this information helps. Should you have further questions, I would be glad to help.
Regards,
Desislava
Telerik 
 
                                        Thank you for writing.
It is possible to specify the used editor for a certain property by using the EditorRequired event and setting the EditorType property:
private void radPropertyGrid1_EditorRequired(object sender, PropertyGridEditorRequiredEventArgs e){    if (e.Item.Name == "String")    {        e.EditorType = typeof(PropertyGridDropDownListEditor);    }}Additionally if you populate the RadPropertyGrid via RadPropertyStore with PropertyStoreItems, you are allowed to add attributes, including EditorAttribute as well:
PropertyStoreItem intItem = new PropertyStoreItem(typeof(int), "Integer", 1);intItem.Attributes.Add(new EditorAttribute(typeof(PropertyGridBrowseEditor), typeof(BaseInputEditor)));//some other store itemsRadPropertyStore store = new RadPropertyStore();store.Add(intItem);this.radPropertyGrid1.SelectedObject = store;I hope this information helps. Should you have further questions, I would be glad to help.
Regards,
Desislava
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
                                
                                                    Dennis
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 24 Oct 2014, 01:40 AM
                                            
                                        Thanks, this is exactly what I was looking for.   
On this approach if I want to use a PropertyGridDropDownListEditor how do I set the properties of the editors when I'm adding an item to the store ? For example, provide a list of values for the dropdownlist, I can add Passwordtext psItem.Attributes.Add(new PasswordPropertyTextAttribute(true));
and a numeric range to a spin edit, but can't seem to find an attribute to supply the drop down list its set of values
psItem.Attributes.Add(new EditorAttribute(typeof(Telerik.WinControls.UI.PropertyGridSpinEditor), typeof(BaseInputEditor)));
psItem.Attributes.Add(new RadRangeAttribute(1, 100));
PropertyStoreItem intItem = new PropertyStoreItem(typeof(int), "Integer", 1);intItem.Attributes.Add(new EditorAttribute(typeof(PropertyGridBrowseEditor), typeof(BaseInputEditor)));
                                        On this approach if I want to use a PropertyGridDropDownListEditor how do I set the properties of the editors when I'm adding an item to the store ? For example, provide a list of values for the dropdownlist, I can add Passwordtext psItem.Attributes.Add(new PasswordPropertyTextAttribute(true));
and a numeric range to a spin edit, but can't seem to find an attribute to supply the drop down list its set of values
psItem.Attributes.Add(new EditorAttribute(typeof(Telerik.WinControls.UI.PropertyGridSpinEditor), typeof(BaseInputEditor)));
psItem.Attributes.Add(new RadRangeAttribute(1, 100));
PropertyStoreItem intItem = new PropertyStoreItem(typeof(int), "Integer", 1);intItem.Attributes.Add(new EditorAttribute(typeof(PropertyGridBrowseEditor), typeof(BaseInputEditor)));
0
                                Hello Dennis,
Thank you for writing back.
If I understand your requirement correctly, you are trying to populate the PropertyGridDropDownListEditor with items. For this purpose, you should use the EditorInitialized event and set the BaseDropDownListEditorElement.DataSource property to the desired items collection:
 
 
 
If it is not the exact requirement, please specify in details the expected behavior. Thus, we would be able to investigate the precise case and assist you further.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Desislava
Telerik 
 
                                        Thank you for writing back.
If I understand your requirement correctly, you are trying to populate the PropertyGridDropDownListEditor with items. For this purpose, you should use the EditorInitialized event and set the BaseDropDownListEditorElement.DataSource property to the desired items collection:
private void radPropertyGrid1_EditorInitialized(object sender, PropertyGridItemEditorInitializedEventArgs e){    PropertyGridDropDownListEditor ddl = e.Editor as PropertyGridDropDownListEditor;    if (ddl != null && e.Item.Name == "ItemName")    {        BaseDropDownListEditorElement element = ddl.EditorElement as BaseDropDownListEditorElement;        if (element.DataSource == null)        {            element.DataSource = GetDataTable();            element.DisplayMember = "Name";            element.ValueMember = "Id";        }        PropertyGridItem pgi = e.Item as PropertyGridItem;        element.SelectedValue = int.Parse(pgi.Value + "");    }}private object GetDataTable(){    DataTable dt = new DataTable();    dt.Columns.Add("Id", typeof(int));    dt.Columns.Add("Name", typeof(string));    for (int i = 0; i < 5; i++)    {        dt.Rows.Add(i, "Item" + i);    }    return dt;}If it is not the exact requirement, please specify in details the expected behavior. Thus, we would be able to investigate the precise case and assist you further.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Desislava
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
                                
                                                    Juan Gustavo
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 10 Nov 2015, 11:35 PM
                                            
                                        Hi 
I am  using this editor   but I need to  allow to add new items 
I changed the DropDownStyle  but does not take  effect​
It's necessary to set another property?
Regards
PropertyGridDropDownListEditor editor = new PropertyGridDropDownListEditor();BaseDropDownListEditorElement element = editor.EditorElement as BaseDropDownListEditorElement;element.DataSource = new Dictionary<string, string>(); element.DataSource = ParameterGroup;element.DisplayMember = "Value";element.ValueMember = "Key";element.DropDownStyle = RadDropDownStyle.DropDown;element.SelectedValue = item.Value ?? "";e.Editor = editor;0
                                Hello Juan,
Thank you for writing.
PropertyGridDropDownListEditor allows only valid values which are available in the DataSource collection. If your requirement is to allow the user to enter custom values, these new values should be added in the DataSource. I have prepared a sample code snippet which result is illustrated on the attached gif file:
 
 
 
 
 
 
 
 
 
 
 
 
 
Note that this is just a sample approach and it may not cover all possible cases. Feel free to modify it in a way which suits your requirement best.
I hope this information helps. Should you have further questions I would be glad to help.
 
Regards,
Dess
Telerik
                                        Thank you for writing.
PropertyGridDropDownListEditor allows only valid values which are available in the DataSource collection. If your requirement is to allow the user to enter custom values, these new values should be added in the DataSource. I have prepared a sample code snippet which result is illustrated on the attached gif file:
DataTable dt = new DataTable();public Form1(){    InitializeComponent();    dt.Columns.Add("Id", typeof(int));    dt.Columns.Add("Name", typeof(string));    for (int i = 0; i < 5; i++)    {        dt.Rows.Add(i, "Item" + i);    }         PropertyStoreItem intItem = new PropertyStoreItem(typeof(int), "Integer", 1);    intItem.Attributes.Add(new EditorAttribute(typeof(PropertyGridBrowseEditor),         typeof(BaseInputEditor)));    PropertyStoreItem floatItem = new PropertyStoreItem(typeof(string), "ItemName", 1,         "Property storing a value.");    floatItem.Attributes.Add(new EditorAttribute(typeof(PropertyGridDropDownListEditor),         typeof(BaseInputEditor)));    PropertyStoreItem stringItem = new PropertyStoreItem(typeof(string), "String", "telerik",        "Property storing a string value", "Telerik");    PropertyStoreItem dockItem = new PropertyStoreItem(typeof(DockStyle), "Dock", DockStyle.Top,        "Property containing DockStyle value", "Layout", false);    RadPropertyStore store = new RadPropertyStore();    store.Add(intItem);    store.Add(floatItem);    store.Add(stringItem);    store.Add(dockItem);    this.radPropertyGrid1.SelectedObject = store;    this.radPropertyGrid1.EditorRequired += radPropertyGrid1_EditorRequired;    this.radPropertyGrid1.EditorInitialized += radPropertyGrid1_EditorInitialized;}public class CustomPropertyGridDropDownListEditor : PropertyGridDropDownListEditor{    DataTable dt;    public override void BeginEdit()    {         base.BeginEdit();        BaseDropDownListEditorElement element = this.EditorElement as BaseDropDownListEditorElement;        element.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;        if (element.DataSource != null)        {            dt = element.DataSource as DataTable;        }    }    public override bool EndEdit()    {        BaseDropDownListEditorElement element = this.EditorElement as BaseDropDownListEditorElement;                 if (dt != null)        {            foreach (DataRow row in dt.Rows)            {                if (row[element.DisplayMember].ToString() == element.Text)                {                    return base.EndEdit();                }            }            dt.Rows.Add(dt.Rows.Count, element.Text);        }        PropertyGridItemElement itemElement = this.OwnerElement as PropertyGridItemElement;        PropertyGridItem item = itemElement.Data as PropertyGridItem;        if (item != null)        {            item.Value = element.SelectedValue;        }        return base.EndEdit();     }}private void radPropertyGrid1_EditorInitialized(object sender, PropertyGridItemEditorInitializedEventArgs e){    PropertyGridDropDownListEditor ddl = e.Editor as PropertyGridDropDownListEditor;    if (ddl != null && e.Item.Name == "ItemName")    {        CustomPropertyGridDropDownListEditor editor = new CustomPropertyGridDropDownListEditor();        BaseDropDownListEditorElement element = editor.EditorElement as BaseDropDownListEditorElement;        PropertyGridItem pgi = e.Item as PropertyGridItem;        element.SelectedValue = int.Parse(pgi.Value + "");    }}private void radPropertyGrid1_EditorRequired(object sender, PropertyGridEditorRequiredEventArgs e){    if (e.Item.Name == "ItemName")    {        CustomPropertyGridDropDownListEditor editor = new CustomPropertyGridDropDownListEditor();        BaseDropDownListEditorElement element = editor.EditorElement as BaseDropDownListEditorElement;        if (element.DataSource == null)        {            element.DataSource = dt;            element.DisplayMember = "Name";            element.ValueMember = "Id";        }        e.Editor = editor;    }}Note that this is just a sample approach and it may not cover all possible cases. Feel free to modify it in a way which suits your requirement best.
I hope this information helps. Should you have further questions I would be glad to help.
Dess
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the  Telerik Feedback Portal and vote to affect the priority of the items
