首页 > 其他分享 >DevExpress WinForms中文教程:Data Grid - 如何完成数据输入验证?

DevExpress WinForms中文教程:Data Grid - 如何完成数据输入验证?

时间:2024-10-09 09:23:09浏览次数:5  
标签:sender 错误 验证 DevExpress ExceptionMode WinForms Grid view

本教程介绍DevExpress WinForm的Data Grid控件是如何利用网格组件完成数据输入验证的。

P.S:DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

获取DevExpress WinForms v24.1正式版下载

DevExpress技术交流群10:532598169      欢迎一起进群讨论

默认数据验证

默认情况下,DevExpress WinForm网格控件启用了内置数据类型验证。如果在绑定到数字数据字段的列中输入字符串值,然后按ENTER键或尝试将焦点从单元格移开,则网格将验证数据输入并引发错误,因为字符串无法转换为数字值。将鼠标悬停在错误图标上,可以看到相同的错误消息。

DevExpress WinForms中文教程图集

更正输入的值或放弃更改来继续使用网格控件,要取消更改,请按ESCAPE。

修改默认错误信息

要手动指定默认错误消息,请执行以下操作。

1. 处理视图的BaseView.ValidatingEditor事件。

2. 在事件处理程序中,使用GridColumn.FieldName属性检查焦点列。

3. 尝试将事件的BaseContainerValidateEditorEventArgs.Value参数转换为所需的类型。

4. 如果该值不能转换,将BaseContainerValidateEditorEventArgs.Valid参数设置为false,并指定自定义的BaseContainerValidateEditorEventArgs.ErrorText属性值。

C#

private void gridView1_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) {
GridView view = sender as GridView;
if (view.FocusedColumn.FieldName == "UnitPrice") {
double price = 0;
if (!Double.TryParse(e.Value as String, out price)) {
e.Valid = false;
e.ErrorText = "Only numeric values are accepted.";
}
}
}

运行应用程序,看看验证机制现在是如何显示自定义的错误消息的。

DevExpress WinForms中文教程图集
提供自定义数据验证规则

要验证数据,请执行以下操作:

1. 处理相同的BaseView.ValidatingEditor事件。

2. 若要在特定列中只允许正数值,请检查转换值是否大于0。

3. 如果不是,将 BaseContainerValidateEditorEventArgs.Valid参数设置为false并指定您的自定义错误消息。

C#

private void gridView1_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) {
GridView view = sender as GridView;
if (view.FocusedColumn.FieldName == "UnitPrice") {
double price = 0;
if (!Double.TryParse(e.Value as String, out price)) {
e.Valid = false;
e.ErrorText = "Only numeric values are accepted.";
}
else if (price <= 0) {
e.Valid = false;
e.ErrorText = "The unit price must be positive.";
}
}
}

如果运行该应用程序,将看到在尝试向单元格中输入零时出现指定的错误消息。

DevExpress WinForms中文教程图集
显示“异常消息框”

要自定义显示错误的方式,请执行以下操作。

1. 处理视图的BaseView.InvalidValueException事件。

2. 在事件处理程序中,显示带有ExceptionEventArgs.ErrorText属性值的消息框。

3. 要禁用默认的错误图标和工具提示,请将ExceptionEventArgs.ExceptionMode参数设置为ExceptionMode.NoAction

C#

private void gridView1_InvalidValueException(object sender, InvalidValueExceptionEventArgs e) {
MessageBox.Show(this, e.ErrorText, "Invalid Value", MessageBoxButtons.OK, MessageBoxIcon.Error);
e.ExceptionMode = ExceptionMode.NoAction;
}

DevExpress WinForms网格控件现在使用消息框通知您有关错误的信息。

DevExpress WinForms中文教程图集
启用行验证

如果一个值的有效性取决于同一行中的其他值,则可以通过处理ColumnView.ValidateRow事件启用行验证。

例如,确保一列中的值大于另一列中的值。

  1. 在ValidateRow事件处理程序中,获取所需的列对象。
  2. 使用视图的ColumnView.GetRowCellValue方法来确定聚焦行中的列值。
  3. 检查其中一个值是否大于另一个值。
  4. 使用ColumnView.SetColumnError方法将错误消息设置为列单元格,使用列对象作为第一个参数,使用错误消息字符串作为第二个参数。
  5. 若要将错误分配给整个行,请调用ColumnView.SetColumnError方法,并将第一个参数设置为null。
  6. 将事件的ValidateRowEventArgs.Valid 参数设置为false,并将ValidateRowEventArgs.ErrorText设置为自定义错误消息。

C#

private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) {
GridView view = sender as GridView;
GridColumn colUnitsInStock = view.Columns["UnitsInStock"];
GridColumn colUnitsOnOrder = view.Columns["UnitsOnOrder"];

double unitsInStock = Convert.ToDouble(view.GetRowCellValue(view.FocusedRowHandle, colUnitsInStock));
double unitsOnOrder = Convert.ToDouble(view.GetRowCellValue(view.FocusedRowHandle, colUnitsOnOrder));
if (unitsInStock < unitsOnOrder) {
view.SetColumnError(colUnitsInStock, "The Units On Order value should be less than this value.");
view.SetColumnError(colUnitsOnOrder, "This value should be less than the Units In Stock value.");
view.SetColumnError(null, "Invalid data");
e.Valid = false;
e.ErrorText = "'Units On Order' and 'Units In Stock' values are not consistent.";
}
}

运行应用程序,输入无效值并尝试将焦点切换到另一行。此时将进行行验证,并调用带有指定错误文本的默认错误对话框。

DevExpress WinForms中文教程图集

单击Yes,然后将鼠标悬停在错误图标上,来查看为各个列指定的错误消息。

DevExpress WinForms中文教程图集
禁用默认错误信息框

要在验证行时禁用默认对话框窗口,请处理ColumnView.InvalidRowException事件并将ExceptionEventArgs.ExceptionMode参数设置为ExceptionMode.NoAction

C#

private void gridView1_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e) {
e.ExceptionMode = ExceptionMode.NoAction;
}

现在当输入不正确的值时,消息将被抑制,但是您仍然可以在数据单元格和行指示符区域中看到相同的错误图标。

标签:sender,错误,验证,DevExpress,ExceptionMode,WinForms,Grid,view
From: https://www.cnblogs.com/AABBbaby/p/18453529

相关文章

  • winforms基本操作-将datagridview内容保存为excel文件
    这里记录一下将winforms展示的datagridview,导出或保存为excel文件。这里说一下环境、版本信息:win系统:win11框架:winforms依赖:Microsoft.Office.Interop.Excel.net:8.0.401.netframework:4.8DataGridView对象为dataGridView1,然后添加一个按钮,绑定事件btnConfirm即可。priva......
  • 2024牛客多校第二场 - C. Red Walking on Grid
    题目大意:\(2\timesn\)大小的方格矩阵,某些格子不能走,走过的格子不能走。从任意点出发,一次最多走多少次?首先有一个贪心的思想,每次从最左走到最右,只能向上下右走,不能向左走(因为向左走一定不会让步数更多)。动态规划,设\(f_{i,j}\)表示从每个连通块走到\((i,j)\)的最大格子数......
  • WPF Datagrid display via DataGridTemplateColumn
    <DataGridTemplateColumnHeader="Image"><DataGridTemplateColumn.CellTemplate><DataTemplate><ImageSource="{BindingDataContext.ImgUrl,RelativeSource={RelativeSourceMode=F......
  • CSS display属性 inline-block flex grid
    CSSdisplayinline-block flexgrid=======================================CSS的display属性是一个核心属性,用于控制元素如何在页面布局中显示,包括其盒模型的行为。以下是display属性的一些常见值及其示例代码:1.block   说明:将元素变为块级元素,独占一行,可以设置宽高、......
  • hdu1705 Count the grid
    皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。多边形边界上的整数点怎么求呢?当然是gcd啦~~ gcd(x1-x2,y1-y2)就是这条边上整数点的个数。但是仅仅一条边是不准确的......
  • VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.20.0 - 运营商 Kubernete
    VMwareTanzuKubernetesGridIntegratedEdition(TKGI)1.20.0-运营商Kubernetes解决方案Kubernetes-basedcontainersolutionwithadvancednetworking,aprivatecontainerregistry,andlifecyclemanagement请访问原文链接:https://sysin.org/blog/vmware-tkgi/,......
  • DevExpress WinForms v24.1新版亮点:富文本编辑器、电子表格组件功能升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件v24.1日前已经全新发布,新......
  • VCL界面组件DevExpress VCL v24.1.6全新发布
    DevExpressVCLControls是Devexpress公司旗下老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程序立即获取DevExpressVCLv24.1.6正式版具......
  • VMware Tanzu Kubernetes Grid Integrated Edition 1.20 发布下载,新增功能概览
    VMwareTanzuKubernetesGridIntegratedEdition1.20发布下载,新增功能概览VMwareTanzuKubernetesGridIntegratedEdition(TKGI)1.20.0-运营商Kubernetes解决方案Kubernetes-basedcontainersolutionwithadvancednetworking,aprivatecontainerregistry,an......
  • vue3 vxe-grid 通过数据库返回的列信息,生成columns,并且其中有一列是img类型,进行slots
    1、一般我们写死的列信息的时候,会这样定义:2、然后我们在template里面,这样这样写slots格式化部分:这样表格中就会展示出一张图片,并且,我们点击了可以查看大图。3、那么我们从数据库中返回的列,应该如何去写:letfields={field:item.fieldname,......