如何在C1DataGrid提交新行时进行数据验证?
C1DataGrid 提交新行时的验证实现
首先,不要在属性setter中抛出异常——这种方式会在输入每个字符时触发验证,完全不符合你“仅提交新行时验证”的需求,而且无法有效阻止无效行提交。
下面是两种精准匹配需求的实现方案:
方案1:通过RowEndEdit事件手动验证
RowEndEdit事件会在用户完成行编辑(比如按下Enter、点击其他行提交新行)时触发,正好对应你需要的验证时机。
实现步骤:
- 给C1DataGrid绑定
RowEndEdit事件 - 在事件处理方法中获取当前行的数据对象,执行自定义验证逻辑
- 验证不通过时,调用
CancelEdit()阻止行提交,并提示错误
代码示例(C#):
private void C1DataGrid_RowEndEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e) { // 获取当前编辑行的数据模型 var rowModel = c1DataGrid.Rows[e.Row].DataItem as YourDataModel; if (rowModel == null) return; // 执行自定义验证规则 if (!IsRowValid(rowModel)) { // 取消编辑,阻止无效行提交 c1DataGrid.CancelEdit(); MessageBox.Show("数据验证失败,请检查输入!"); } } // 自定义验证方法,根据你的业务规则编写 private bool IsRowValid(YourDataModel model) { // 示例:检查单列数据不为空且长度≥3 return !string.IsNullOrWhiteSpace(model.TargetColumn) && model.TargetColumn.Length >= 3; }
方案2:基于IDataErrorInfo的行级验证
如果你的数据模型已经实现了IDataErrorInfo,只需调整C1DataGrid的验证模式,就能把验证时机从实时输入改为行提交时触发。
实现步骤:
- 让数据模型实现
IDataErrorInfo接口,在索引器中编写列验证逻辑 - 设置C1DataGrid的
ValidationMode为Row,开启行级验证 - 开启
ShowErrors属性,让控件自动显示错误提示
代码示例:
数据模型实现
public class YourDataModel : IDataErrorInfo { // 你的目标列属性 public string TargetColumn { get; set; } public string Error => null; public string this[string columnName] { get { if (columnName == nameof(TargetColumn)) { if (string.IsNullOrWhiteSpace(TargetColumn) || TargetColumn.Length < 3) { return "输入内容不能为空,且长度至少为3"; } } return null; } } }
配置C1DataGrid
// 设置验证模式为行级,仅在提交行时触发验证 c1DataGrid.ValidationMode = C1.Win.C1FlexGrid.ValidationMode.Row; // 开启错误提示,让控件自动显示验证失败信息 c1DataGrid.ShowErrors = true;
这两种方案都能实现“仅提交新行时验证”的需求,并且可以有效阻止无效数据提交。根据你的项目架构选择即可。
内容的提问来源于stack exchange,提问作者MuriTuri
相关产品推荐
相关产品推荐

