Back to Devexpress

How to: Assign editors to individual cells (replace default editors for specific cells)

windowsforms-5636-controls-and-libraries-tree-list-examples-data-editing-how-to-assign-editors-to-individual-cells.md

latest4.5 KB
Original Source

How to: Assign editors to individual cells (replace default editors for specific cells)

  • Jul 28, 2023
  • 3 minutes to read

The following examples handles the TreeList.CustomNodeCellEdit event to assign different repository items to cells based on a condition.

csharp
using DevExpress.XtraEditors.Repository;

public Form1() {
    InitializeComponent();
    treeList1.RootValue = 0;
    // Binds the TreeList to a data source.
    treeList1.DataSource = Order.InitData();
    // Forces the TreeList to initialize its settings.
    treeList1.ForceInitialize();
    // Creates a 'SpinEdit' repository item.
    RepositoryItem spinEditor = new RepositoryItemSpinEdit();
    // Creates a 'CalcEdit' repository item.
    RepositoryItem calcEditor = new RepositoryItemCalcEdit();
    // Adds the repository items to the TreeList's RepositoryItems collection.
    treeList1.RepositoryItems.AddRange(new RepositoryItem[] { spinEditor, calcEditor });
    /* Handles the 'CustomNodeCellEdit' event to assign different editors to cells
     * in the 'Discount' column.
     */
    treeList1.CustomNodeCellEdit += (sender, e) => {
        if(e.Column.FieldName == "Discount")
            e.RepositoryItem = e.Node.HasChildren ? spinEditor : calcEditor;
    };
}

public class Order {
    int fid;
    public Order(int id) {
        this.fid = id;
    }
    public int ID { get { return this.fid; } }
    public int ParentID { get; set; }
    public string Name { get; set; }
    public DateTime OrderDate { get; set; }
    public double Price { get; set; }
    public double Discount { get; set; }
    static public List<Order> InitData() {
        return new List<Order> {
            new Order(0){ ParentID = 0, Name = "Order A", OrderDate = DateTime.Today, Price = 199.99, Discount = 15.99 },
            new Order(1){ ParentID = 0, Name = "Order B", OrderDate = DateTime.Today, Price = 219.99, Discount = 5.99 },
            new Order(2){ ParentID = 1, Name = "Order C", OrderDate = DateTime.Today, Price = 549.99, Discount = 44.99 },
            new Order(3){ ParentID = 1, Name = "Order D", OrderDate = DateTime.Today, Price = 889.99, Discount = 99.99 }
        };
    }
}
vb
Imports DevExpress.XtraEditors.Repository

Public Sub New()
    InitializeComponent()
    treeList1.RootValue = 0
    ' Binds the TreeList to a data source.
    treeList1.DataSource = Order.InitData()
    ' Forces the TreeList to initialize its settings.
    treeList1.ForceInitialize()
    ' Creates a 'SpinEdit' repository item.
    Dim spinEditor As RepositoryItem = New RepositoryItemSpinEdit()
    ' Creates a 'CalcEdit' repository item.
    Dim calcEditor As RepositoryItem = New RepositoryItemCalcEdit()
    ' Adds the repository items to the TreeList's RepositoryItems collection.
    treeList1.RepositoryItems.AddRange(New RepositoryItem() { spinEditor, calcEditor })
    ' Handles the 'CustomNodeCellEdit' event to assign different editors to cells
    ' in the 'Discount' column.
    AddHandler treeList1.CustomNodeCellEdit, Sub(sender, e)
        If e.Column.FieldName = "Discount" Then
            e.RepositoryItem = If(e.Node.HasChildren, spinEditor, calcEditor)
        End If
    End Sub
End Sub

Public Class Order
    Private fid As Integer
    Public Sub New(ByVal id As Integer)
        Me.fid = id
    End Sub
    Public ReadOnly Property ID() As Integer
        Get
            Return Me.fid
        End Get
    End Property
    Public Property ParentID() As Integer
    Public Property Name() As String
    Public Property OrderDate() As Date
    Public Property Price() As Double
    Public Property Discount() As Double
    Public Shared Function InitData() As List(Of Order)
        Return New List(Of Order) From {
            New Order(0) With {.ParentID = 0, .Name = "Order A", .OrderDate = Date.Today, .Price = 199.99, .Discount = 15.99},
            New Order(1) With {.ParentID = 0, .Name = "Order B", .OrderDate = Date.Today, .Price = 219.99, .Discount = 5.99},
            New Order(2) With {.ParentID = 1, .Name = "Order C", .OrderDate = Date.Today, .Price = 549.99, .Discount = 44.99},
            New Order(3) With {.ParentID = 1, .Name = "Order D", .OrderDate = Date.Today, .Price = 889.99, .Discount = 99.99}
        }
    End Function
End Class

The image below shows the result: