Defining Columns
RadGridView provides two mechanisms for defining its columns:
Automatic columns definition based on the underlying data source.
Manual columns definition in XAML or code-behind.
This help article explains how to do both with code examples. You can also copy properties from one column to another.
Automatic Columns Generation
By default, RadGridView will generate its columns automatically based on the underlying data source. When, for example, you set the ItemsSource of RadGridView to a collection of employees (see code in Example 1 and the result in Figure 1), the control will create a separate column for each public property of the Employee object.
Specific editors will be generated for the following types:
- String: TextBox editor (default)
- Boolean: CheckBox editor accompanied by GridViewCheckBox element displayed in view mode
- DateTime: RadDatePicker editor
However, if you wish to explicitly specify the column name for certain property of your data class or to prevent the creation of a column for it, use the System.ComponentModel.DataAnnotations.DisplayAttribute, as it is shown in Example 1.
Example 1: Defining the business object
public class Employee
{
[DisplayAttribute(AutoGenerateField = false)]
public int EmployeeId
{
get;
set;
}
[DisplayAttribute(Name = "First Name")]
public string FirstName
{
get;
set;
}
[DisplayAttribute(Name = "Last Name")]
public string LastName
{
get;
set;
}
}
Public Class Employee
<DisplayAttribute(AutoGenerateField:=False)>
Public Property EmployeeId() As Integer
Get
Return m_EmployeeId
End Get
Set(value As Integer)
m_EmployeeId = value
End Set
End Property
Private m_EmployeeId As Integer
<DisplayAttribute(Name:="First Name")>
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(value As String)
m_FirstName = value
End Set
End Property
Private m_FirstName As String
<DisplayAttribute(Name:="Last Name")>
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(value As String)
m_LastName = value
End Set
End Property
Private m_LastName As String
End Class
If you wish to further customize the generated columns, you can handle the AutoGeneratingColumn event as shown in Example 2.
Example 2: Customizing auto-generated columns
private void gridView_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
{
if((e.Column as GridViewDataColumn).DataMemberBinding.Path.Path == "Name")
{
var newColumn = new GridViewDataColumn();
newColumn.CopyPropertiesFrom(e.Column);
newColumn.Header = "Full Name";
newColumn.Width = 100;
e.Column = newColumn;
}
}
Private Sub gridView_AutoGeneratingColumn(ByVal sender As Object, ByVal e As GridViewAutoGeneratingColumnEventArgs)
If (TryCast(e.Column, GridViewDataColumn)).DataMemberBinding.Path.Path = "Name" Then
Dim newColumn = New GridViewDataColumn()
newColumn.CopyPropertiesFrom(e.Column)
newColumn.Header = "Full Name"
newColumn.Width = 100
e.Column = newColumn
End If
End Sub
Manual Columns Definition
Using the built-in auto generation of columns does not fit all scenarios. In such cases you can manually define the needed columns. When defining a column you can choose between several column types:
- GridViewColumn
- GridViewBoundColumnBase
- Data Column
- Hyperlink Column
- Dynamic Hyperlink Column
- Expression Column
- Image Column
- Select Column
- CheckBox Column
- Toggle Row Details Column.
You must add the columns to the Columns collection of RadGridView. Later on in the application lifecycle, you can easily access them via the Columns indexer by specifying the name of the property the column is bound to or the index of the column.
Examples 2 and 3 demonstrate how to define a column both in XAML and code-behind.
Example 3: Defining a GridViewDataColumn declaratively
<telerik:GridViewDataColumn/>
You will find the column types in the same namespace (Telerik.Windows.Controls) and assembly (Telerik.Windows.Controls.GridView.dll) as RadGridView.
Example 4: Defining a GridViewDataColumn programmatically
GridViewDataColumn column = new GridViewDataColumn();
Dim column As New GridViewDataColumn()
You can then set the column's Header property and add the column to the Columns collection. The default Header will be the property specified as DataMemberBinding.
Example 5: Defining a column declaratively with DataMemberBinding property set
<telerik:RadGridView x:Name="radGridView"
AutoGenerateColumns="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" Header="First Name" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
Example 6: Defining a column programmatically with UniqueName property set
GridViewDataColumn column = new GridViewDataColumn();
column.DataMemberBinding = new Binding("FirstName");
column.Header = "My Column";
this.radGridView.AutoGenerateColumns = false;
this.radGridView.Columns.Add(column);
Dim column As New GridViewDataColumn()
column.DataMemberBinding = New Binding("FirstName")
column.Header = "My Column"
Me.radGridView.AutoGenerateColumns = False
Me.radGridView.Columns.Add(column)
Similarly, you can set any of the column's other properties or copy them from another column.
To access the column later, use the string used for the DataMemberBinding value or its column index as a key for the Columns collection.
Example 7: Accessing a column by index
var myColumn = this.radGridView.Columns["MyColumn"];
myColumn = this.radGridView.Columns[0];
Dim myColumn = Me.radGridView.Columns("MyColumn")
myColumn = Me.radGridView.Columns(0)
Copying Properties from Another Column
RadGridView provides a mechanism for easily fetching the properties of one column to another. This can be done through the CopyPropertiesFrom method of GridViewColumn.
Example 8: Copying the properties of one column to another
GridViewDataColumn col = new GridViewDataColumn();
col.CopyPropertiesFrom(this.clubsGrid.Columns[0]);
this.clubsGrid.Columns.Add(col);
Dim col As GridViewDataColumn = New GridViewDataColumn()
col.CopyPropertiesFrom(Me.clubsGrid.Columns(0))
Me.clubsGrid.Columns.Add(col)