The following example shows how to customize automatically generated columns.In this example, the ColumnsPopulated event is handled to hide the 'ID' column, and specify the sorting order of the first visible column.Starting with version 2013 vol 1 the GridControl.ColumnsPopulated event is marked as obsolete. The GridControl.AutoGeneratedColumns event should be used instead. Moreover, in 13.1, this example includes two ways for setting templates in code-behind.
View Example
<Window x:Class="E2019.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:local="clr-namespace:E2019"
Title="Window" Height="200" Width="470">
<Window.Resources>
<local:IssueTypeForegroundConverter x:Key="IssueTypeForegroundConverter"/>
<DataTemplate x:Key="IssueNameTemplate">
<dxe:TextEdit x:Name="PART_Editor" Foreground="Blue"/>
</DataTemplate>
<DataTemplate x:Key="IssueTypeTemplate">
<dxe:TextEdit x:Name="PART_Editor" Foreground="{Binding Path=Value, Converter={StaticResource IssueTypeForegroundConverter}}"/>
</DataTemplate>
</Window.Resources>
<Grid>
<dxg:GridControl x:Name="grid" AutoGenerateColumns="AddNew" AutoGeneratedColumns="OnColumnsGenerated">
<dxg:GridControl.View>
<dxg:TableView Name="tableView1" AutoWidth="True" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
using System.Windows.Documents;
using DevExpress.Xpf.Grid;
using System.Windows.Data;
using System.Windows.Media;
namespace E2019 {
public partial class Window1 : Window {
public Window1() {
InitializeComponent();
grid.ItemsSource = IssueList.GetData();
}
private void OnColumnsGenerated(object sender, RoutedEventArgs e) {
foreach (GridColumn column in grid.Columns) {
switch (column.FieldName) {
case "IssueName":
column.CellTemplate = Application.Current.MainWindow.Resources["IssueNameTemplate"] as DataTemplate;
column.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;
break;
case "IssueType":
column.CellTemplate = Application.Current.MainWindow.Resources["IssueTypeTemplate"] as DataTemplate;
break;
case "ID":
column.Visible = false;
break;
}
}
}
public class IssueList {
static public List<IssueDataObject> GetData() {
List<IssueDataObject> data = new List<IssueDataObject>();
data.Add(new IssueDataObject() {
ID = 0,
IssueName = "Transaction History", IssueType = "Bug", IsPrivate = true
});
data.Add(new IssueDataObject() {
ID = 1,
IssueName = "Ledger: Inconsistency", IssueType = "Bug", IsPrivate = false
});
data.Add(new IssueDataObject() {
ID = 2,
IssueName = "Data Import", IssueType = "Request", IsPrivate = false
});
data.Add(new IssueDataObject() {
ID = 3,
IssueName = "Data Archiving", IssueType = "Request", IsPrivate = true
});
return data;
}
}
public class IssueDataObject {
public int ID { get; set; }
public string IssueName { get; set; }
public string IssueType { get; set; }
public bool IsPrivate { get; set; }
}
}
public class IssueTypeForegroundConverter : IValueConverter {
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (value == null)
return null;
string issueType = value.ToString();
if (issueType == "Bug")
return new SolidColorBrush(Colors.Red);
return new SolidColorBrush(Colors.Black);
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new System.NotImplementedException();
}
}
}
<Application x:Class="DXGrid_ColumnsPopulatedEvent.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window1.xaml">
<Application.Resources>
</Application.Resources>
</Application>
Imports System
Imports System.Collections.Generic
Imports System.Configuration
Imports System.Data
Imports System.Linq
Imports System.Windows
Namespace DXGrid_ColumnsPopulatedEvent
''' <summary>
''' Interaction logic for App.xaml
''' </summary>
Partial Public Class App
Inherits Application
End Class
End Namespace
Imports System.Collections.Generic
Imports System.Windows
Imports System.Windows.Documents
Imports DevExpress.Xpf.Grid
Imports System.Windows.Data
Imports System.Windows.Media
Namespace E2019
Partial Public Class Window1
Inherits Window
Public Sub New()
InitializeComponent()
grid.ItemsSource = IssueList.GetData()
End Sub
Private Sub OnColumnsGenerated(ByVal sender As Object, ByVal e As RoutedEventArgs)
For Each column As GridColumn In grid.Columns
Select Case column.FieldName
Case "IssueName"
column.CellTemplate = TryCast(Application.Current.MainWindow.Resources("IssueNameTemplate"), DataTemplate)
column.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending
Case "IssueType"
column.CellTemplate = TryCast(Application.Current.MainWindow.Resources("IssueTypeTemplate"), DataTemplate)
Case "ID"
column.Visible = False
End Select
Next column
End Sub
Public Class IssueList
Public Shared Function GetData() As List(Of IssueDataObject)
Dim data As New List(Of IssueDataObject)()
data.Add(New IssueDataObject() With {.ID = 0, .IssueName = "Transaction History", .IssueType = "Bug", .IsPrivate = True})
data.Add(New IssueDataObject() With {.ID = 1, .IssueName = "Ledger: Inconsistency", .IssueType = "Bug", .IsPrivate = False})
data.Add(New IssueDataObject() With {.ID = 2, .IssueName = "Data Import", .IssueType = "Request", .IsPrivate = False})
data.Add(New IssueDataObject() With {.ID = 3, .IssueName = "Data Archiving", .IssueType = "Request", .IsPrivate = True})
Return data
End Function
End Class
Public Class IssueDataObject
Public Property ID() As Integer
Public Property IssueName() As String
Public Property IssueType() As String
Public Property IsPrivate() As Boolean
End Class
End Class
Public Class IssueTypeForegroundConverter
Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
If value Is Nothing Then
Return Nothing
End If
Dim issueType As String = value.ToString()
If issueType = "Bug" Then
Return New SolidColorBrush(Colors.Red)
End If
Return New SolidColorBrush(Colors.Black)
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New System.NotImplementedException()
End Function
End Class
End Namespace