Click here to Skip to main content
13,353,462 members (64,706 online)
Click here to Skip to main content
Add your own
alternative version


24 bookmarked
Posted 20 Dec 2009

Exploring the Behaviour of Property Grid

, 7 Nov 2012
Rate this:
Please Sign up or sign in to vote.
Exploring the behaviour and capabilities of a property grid control.


Property grid is a control which has strong capabilities.

Property grid extracts the properties of the class and displays corresponding values. A user can display a user friendly name that can differ from the property used for the class. Property name can be displayed in a different language as well. If multi language software is needed, the user may need to display property names in more than one language, maybe with switching between the languages at runtime.


Designing Class

The class can be designed with different attributes, to be used in property grid. These attributes belong to System.ComponentModel namespace.

Assignment of Default Property for the Class

DefaultPropertyAttribute("<PropertyName>") is the attribute which is used to create the property default to the class.

public class ExploringPropertyGrid
    public property Name

The above block of code will make the property Name default while browsing the object of the class in property grid.

Other Attributes

//Browsable attributes makes a property visible or non-visible in the property grid.

//It defines the collection group in the property grid.

[DescriptionAttribute("Name of the object")]
//It shows the text as help in the help bar.

//It makes the property READ ONLY in property grid. 

Editing Property the Grid

Property grid allows the user to edit the property in the grid according to the type. A boolean and an enum value shall be allowed to select from combo, while an integer type property shall be allowed to user to enter a value.

Using a Non boolean, Non enum Data Type as a Combo Editing

Here a type converter is useful to make a property editable as combo values in grid. Here is the code for sample converter. The code converts a string to combo type.

public class BTypeConVerter : StringConverter 
    public string[] tempStr; 
    public override bool GetStandardValuesSupported
                (ITypeDescriptorContext context)
        return true;
    public override bool GetStandardValuesExclusive
                (ITypeDescriptorContext context)
    return true;
    public override object ConvertFrom(ITypeDescriptorContext context, 
        System.Globalization.CultureInfo culture, object value)
        return base.ConvertFrom(context, culture, value);
    public override System.ComponentModel.TypeConverter.StandardValuesCollection 
        GetStandardValues(ITypeDescriptorContext context)
    return new StandardValuesCollection(new string[]{ "Val1", "Val2", "Val3" }); 

Accessing the Class's Members in Converter Class

The other members of the converting member's class, can be accessed under the converter class, context is the access door to the class instance. In the context.Instance you can find the instance of the current context. User can cast it to the class type and can access the member in the current context. The code example shows the same method.

public override System.ComponentModel.TypeConverter.StandardValuesCollection 
    GetStandardValues(ITypeDescriptorContext context)
    (context.Instance as ExploringPropertyGrid).Name = -----------
    //Other code here

Using Converter in the Property

public string Title
        //Set the another property values Here

Hiding a Property from Property Grid at Runtime

The attributes of a property can be set as read-only in runtime for property grid using a PropertyDescriptor. User can set it either in a member function of a class or in a get{} set{} section of property. The following code sets the readonly attribute of a property “DataType” to true. In the same way, the user can set it as false.

PropertyDescriptor descriptor = 
ReadOnlyAttribute attrib = 
FieldInfo isReadOnly = 
 attrib.GetType().GetField("isReadOnly", BindingFlags.NonPublic| BindingFlags.Instance); 
isReadOnly.SetValue(attrib, true);

Note: ReadOnlyAttribute of all the properties must be set before, like [ReadOnlyAttribute(true)], while writing the class. Otherwise, the above code will set all the property’s attributes to true.

In the same way, the Browsable attribute of any property can be set at runtime using PropertyDescriptor. Here is the code:

PropertyDescriptor descriptor= 
BrowsableAttribute attrib= 
FieldInfo isBrow = 
 attrib.GetType().GetField("browsable",BindingFlags.NonPublic | BindingFlags.Instance);

The point to remember in both the cases is that all the attributes must be set for all properties, otherwise it will refresh all the properties of the class.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Bhasker Kandpal
Architect IDS, Roma Italy
India India
Author has been working in software engineering and research since few years. The author worked and published a markable work in instrument interfacing techniques for 1m class telescopes. He is currently working in aero-navigation software research with a leading company at Europe.

You may also be interested in...


Comments and Discussions

QuestionWhat if field is part of a collection? Pin
breitbach10-Apr-14 14:10
memberbreitbach10-Apr-14 14:10 
QuestionRe: What if field is part of a collection? Pin
breitbach28-Apr-14 11:18
memberbreitbach28-Apr-14 11:18 
Questiongive a sample Pin
wuzhenda21-Nov-13 14:59
memberwuzhenda21-Nov-13 14:59 
QuestionWhat is ["DataType"] mean here ?? Pin
Prashant Raiyani14-Nov-13 0:02
memberPrashant Raiyani14-Nov-13 0:02 
QuestionCode not working Pin
omzz12-Jul-13 1:03
memberomzz12-Jul-13 1:03 
QuestionChange Browsable attribute for enum member Pin
Valery Koval27-Dec-12 6:11
memberValery Koval27-Dec-12 6:11 
BugHiding the Property Bug & its Solution Pin
sanjay_mcpd17-Oct-12 22:32
membersanjay_mcpd17-Oct-12 22:32 
GeneralRe: Hiding the Property Bug & its Solution Pin
Bhasker Kandpal7-Nov-12 7:53
memberBhasker Kandpal7-Nov-12 7:53 
GeneralThis doesn't work as expected Pin
zackp198320-Dec-10 13:06
memberzackp198320-Dec-10 13:06 
GeneralRe: This doesn't work as expected Pin
zackp198321-Dec-10 13:05
memberzackp198321-Dec-10 13:05 
GeneralRe: This doesn't work as expected Pin
Bhasker Kandpal21-Dec-10 20:06
memberBhasker Kandpal21-Dec-10 20:06 
Questionused your code... Pin
Antonio Cella26-Feb-10 0:50
memberAntonio Cella26-Feb-10 0:50 
AnswerRe: used your code... Pin
Bhasker Kandpal12-Mar-10 19:19
memberBhasker Kandpal12-Mar-10 19:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.180111.1 | Last Updated 7 Nov 2012
Article Copyright 2009 by Bhasker Kandpal
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid