treeList 节点验证事件 1.Validated事件触发时间是选择另外一个控件的时候触发2.Validating事件触发时间也是选择另外一个控件的时候触发3.ValidateNode事件触发时间是节点编辑完成后触发上代码private void treeList1_ValidateNode(object sender, DevExpress.XtraTreeList.ValidateNodeEventArgs e) { string column1 e.Node[columnCode].ToString(); string column2 e.Node[columnName].ToString(); if (column1.Length column2.Length) { e.Valid false; //用列的特定描述设置错误 treeList1.SetColumnError(columnCode, 第一列必须大于第二列); treeList1.SetColumnError(columnName, 第二列必须小于第一列); } }结果如图会有一个提示框进行提示如果不需要此提示框需要处理InvalidNodeException事件private void treeList1_InvalidNodeException(object sender, DevExpress.XtraTreeList.InvalidNodeExceptionEventArgs e) { e.ExceptionMode ExceptionMode.NoAction; }效果如图但是有一个缺点绑定了BindingList用于验证时候用户在修改完节点后才会触发此事件那会儿数据已经被修改过了然后才做判断例如public partial class TreeListForm : Form { private BindingListDataSourceModelView dataSourceModelViews; public TreeListForm() { InitializeComponent(); GenerateDataSource(); this.treeList1.DataSource dataSourceModelViews; } private void GenerateDataSource() { dataSourceModelViews new BindingListDataSourceModelView(); for (int i0;i10;i) { DataSourceModelView dataSourceModelView new DataSourceModelView(); dataSourceModelView.Code i.ToString(); dataSourceModelView.Name ${dataSourceModelView.Code}-{dataSourceModelView.Code}; dataSourceModelViews.Add(dataSourceModelView); } } private void treeList1_ValidateNode(object sender, DevExpress.XtraTreeList.ValidateNodeEventArgs e) { string column1 e.Node[columnCode].ToString(); string column2 e.Node[columnName].ToString(); if (column1.Length column2.Length) { e.Valid false; //用列的特定描述设置错误 treeList1.SetColumnError(columnCode, 第一列必须大于第二列); treeList1.SetColumnError(columnName, 第二列必须小于第一列); } } private void treeList1_InvalidNodeException(object sender, DevExpress.XtraTreeList.InvalidNodeExceptionEventArgs e) { e.ExceptionMode ExceptionMode.NoAction; } } //数据类 internal class DataSourceModelView { public string Code { get; set; } public string Name { get; set; } }结果虽然看上去挺正常的但是实际上数据已经被改变了所以ValidateNode 不适用于绑定BindingList数据源的情况这种情况需要用到第四种ValidatingEditor事件4.ValidatingEditor事件触发时间在数据更改之前发生也就是在数据set之前发生触发的是当前编辑的单元格上代码private void treeList1_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e) { if (e.Value.ToString() 123) { e.Valid false; e.ErrorText 名称不能等于123; return; } }看结果验证事件没有走完的时候BindingList数据源的值是不会set的我们看一下数据源5.列的columnEdit绑定TextEdit是否可以直接用TextEdit的验证事件呢列绑定TextEdit上代码private void repositoryItemTextEdit1_Validating(object sender, CancelEventArgs e) { TextEdit text (sender as TextEdit); if (text.Text.ToString() 123) { e.Cancel true; text.ErrorText 名称不能等于123; return; } }看结果大概效果等同于treeList的 ValidatingEditor事件但是ErrorText不起作用