By default, the labels shown next to each property display the property name. This works fine in many cases, but you may want to customize the display to provide more descriptive names. The easiest way to achieve this is to decorate the properties on the object with custom attributes and by setting the Name property in the Display attribute (note that the Display attribute is defined in the System.ComponentModel.DataAnnotations namespace, in the System.ComponentModel,DataAnnotations assembly).
For example, you could define the Display attribute in the class itself and set the value for the Name property as in the following code:
Public Class Customer
Private _Name As String
<Display(Name:="Customer Name")> _
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Private _EMail As String
<Display(Name:="e-Mail address")> _
Public Property EMail() As String
Get
Return _EMail
End Get
Set(ByVal value As String)
_EMail = value
End Set
End Property
Private _Address As String
Public Property Address() As String
Get
Return _Address
End Get
Set(ByVal value As String)
_Address = value
End Set
End Property
Private _CustomerSince As DateTime
<Display(Name:="Customer Since")> _
Public Property CustomerSince() As DateTime
Get
Return _CustomerSince
End Get
Set(ByVal value As DateTime)
_CustomerSince = value
End Set
End Property
Private _SendNewsletter As Boolean
<Display(Name:="Send Newsletter")> _
Public Property SendNewsletter() As Boolean
Get
Return _SendNewsletter
End Get
Set(ByVal value As Boolean)
_SendNewsletter = value
End Set
End Property
Private _PointBalance As System.Nullable(Of Integer)
<Display(Name:="Point Balance")> _
Public Property PointBalance() As System.Nullable(Of Integer)
Get
Return _PointBalance
End Get
Set(ByVal value As System.Nullable(Of Integer))
_PointBalance = value
End Set
End Property
End Class
•C#
public class Customer
{
[Display(Name = "Customer Name")]
public string Name { get; set; }
[Display(Name = "e-Mail address")]
public string EMail { get; set; }
public string Address { get; set; }
[Display(Name = "Customer Since")]
public DateTime CustomerSince { get; set; }
[Display(Name ="Send Newsletter")]
public bool SendNewsletter { get; set; }
[Display(Name ="Point Balance")]
public int? PointBalance { get; set; }
}
The C1PropertyGrid uses this additional information and displays the customer as shown below:
This method requires that you have access to the class being displayed in the C1PropertyGrid. If you want to change the display strings but cannot modify the class being shown, then you would have to use the PropertyAttributes property to provide explicit information about each property you want to show on the C1PropertyGrid.