windowsforms-5633-controls-and-libraries-tree-list-feature-center-data-editing-assigning-editors-to-individual-cells.md
Handle the TreeList.CustomNodeCellEdit event to specify a specific in-place editor for a certain cell or a group of cells. Repository items should be added to the TreeList’s RepositoryItems collection.
The following examples handles the TreeList.CustomNodeCellEdit event to assign different repository items to cells based on a condition.
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 }
};
}
}
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:
Note
Handle the TreeList.CustomNodeCellEditForEditing event to use a different editor only for in-place editing.
See Also