Skip to main content

DataControlBase.ColumnsPopulated Event


Use the AutoGeneratedColumns event instead

Occurs after the columns have been automatically generated.

Namespace: DevExpress.Xpf.Grid

Assembly: DevExpress.Xpf.Grid.v22.1.Core.dll

NuGet Package: DevExpress.Wpf.Grid.Core


[Obsolete("Use the AutoGeneratedColumns event instead")]
public event RoutedEventHandler ColumnsPopulated

Event Data

The ColumnsPopulated event's data class is RoutedEventArgs. The following properties provide information specific to this event:

Property Description
Handled Gets or sets a value that indicates the present state of the event handling for a routed event as it travels the route.
OriginalSource Gets the original reporting source as determined by pure hit testing, before any possible Source adjustment by a parent class.
RoutedEvent Gets or sets the RoutedEvent associated with this RoutedEventArgs instance.
Source Gets or sets a reference to the object that raised the event.

The event data class exposes the following methods:

Method Description
InvokeEventHandler(Delegate, Object) When overridden in a derived class, provides a way to invoke event handlers in a type-specific way, which can increase efficiency over the base implementation.
OnSetSource(Object) When overridden in a derived class, provides a notification callback entry point whenever the value of the Source property of an instance changes.


If the grid’s DataControlBase.AutoPopulateColumns option is enabled and the GridControl.Columns collection is empty, binding the grid to a data source automatically generates columns for all data source fields. After all columns have been created and added to the GridControl.Columns collection, the grid fires the ColumnsPopulated event. Handle this event to specify column settings (e.g. assign column editors, hide individual columns, etc.).

The ColumnsPopulated event is not raised if the grid columns are explicitly specified (for instance, in the XAML file), or the DataControlBase.AutoPopulateColumns property is set to false.


This example shows how to use the AutoGeneratedColumns event to customize automatically generated columns.

View Example

<Window x:Class="E2019.Window1"
        Title="Window" Height="200" Width="470">
        <local:IssueTypeForegroundConverter x:Key="IssueTypeForegroundConverter"/>
        <DataTemplate x:Key="IssueNameTemplate">
            <dxe:TextEdit x:Name="PART_Editor" Foreground="Blue"/>
        <DataTemplate x:Key="IssueTypeTemplate">
            <dxe:TextEdit x:Name="PART_Editor" Foreground="{Binding Path=Value, Converter={StaticResource IssueTypeForegroundConverter}}"/>
       <dxg:GridControl x:Name="grid" AutoGenerateColumns="AddNew" AutoGeneratedColumns="OnColumnsGenerated">
             <dxg:TableView Name="tableView1" AutoWidth="True" />
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() {
            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;
                    case "IssueType":
                        column.CellTemplate = Application.Current.MainWindow.Resources["IssueTypeTemplate"] as DataTemplate;
                    case "ID":
                        column.Visible = false;
        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();

See Also