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

news2024/11/27 9:33:20

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

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

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

默认数据验证

默认情况下,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;
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(140)

目录 一、用法精讲 631、pandas.Timestamp类 631-1、语法 631-2、参数 631-3、功能 631-4、返回值 631-5、说明 631-6、用法 631-6-1、数据准备 631-6-2、代码示例 631-6-3、结果输出 632、pandas.Timestamp.asm8属性 632-1、语法 632-2、参数 632-3、功能 632…

java类和对象_成员变量方法修饰符局部变量this关键字-cnblog

java类和对象 成员变量 权限修饰符 变量类型 变量名; 成员变量可以是任意类型,整个类是成员变量的作用范围 成员变量 成员方法 权限修饰符 返回值类型 方法名() 成员方法可以有参数&#xff0c;也可以有返回值&#xff0c;用return声明 权限修饰符 private 只能在本类…

IDEA必装的插件:Spring Boot Helper的使用与功能特点

在IntelliJ IDEA中&#xff0c;Spring Boot Helper插件是一个非常实用的工具&#xff0c;可以帮助我们更快速地创建和管理Spring Boot项目。以下是Spring Boot Helper插件的详细介绍和使用方法&#xff1a; 激活码地址: 点击获取 一、安装Spring Boot Helper插件 1 打开Intell…

如何设计三极管放大电路?

设计放大电路 分压式串联负反馈放大电路 可以看下面这个视频 , 讲得更加详细 366-单管放大电路偏置电阻的计算&#xff0c;看完自己也会设计一个_哔哩哔哩_bilibili 计算流过电阻Rb2的电流过程中,工程当中常发现Rb2上的电流是Ib的5倍 , 因此由基尔霍夫电流定律也能知道流过R…

Java的基础概念和常识(二)

什么是字节码&#xff1f;采用字节码的好处是什么&#xff1f; 字节码&#xff08;Byte-code&#xff09;是一种中间形式的代码&#xff0c;是源代码编译后生成的一种低级表示&#xff0c;通常是在编译阶段生成的。在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&…

K8s(学习笔记)

swap分区是什么呀&#xff1f; 什么是ipvs呀&#xff1f; yaml是什么呀&#xff1f;&#xff1f;&#xff1f; p20看不下去了&#xff01;&#xff01;&#xff01;

ansible 流程控制

目录 1.流程控制 2.handlers触发器 2.1使用handlers案例 3.when 判断 3.1 案例1 用于给task设置条件 满足或者不满足运行对应模块 3.2 案例2 如果系统是centos则安装sl&#xff0c;cowsay 如果是unbantu则安装cmatrix 4.循环 4.1案例 1.流程控制 hand…

飞腾CPU技术发展分析

飞腾CPU剖析 CPU&#xff1a;信创根基&#xff0c;国之重器 国产CPU市场呈现三大领军阵营&#xff1a;x86、ARM以及其他创新架构。鲲鹏与飞腾在ARM阵营中引领风潮&#xff0c;依托ARM技术授权研发高性能处理器&#xff1b;海光与兆芯则以x86架构为基石&#xff0c;深入挖掘其潜…

图论day56|广度优先搜索理论基础 、bfs与dfs的对比(思维导图)、 99.岛屿数量(卡码网)、100.岛屿的最大面积(卡码网)

图论day56|广度优先搜索理论基础 、bfs与dfs的对比&#xff08;思维导图&#xff09;、 99.岛屿数量&#xff08;卡码网&#xff09;、100.岛屿的最大面积&#xff08;卡码网&#xff09;&#xff09; 广度优先搜索理论基础bfs与dfs的对比&#xff08;思维导图&#xff09;&…

Spring Boot Starter Parent介绍

引言 spring-boot-starter-parent 是一个特殊的项目&#xff0c;为基于 Spring Boot 的应用程序提供默认配置和默认依赖。 在本 Spring Boot 教程中&#xff0c;我们将深入了解所有 Spring Boot 项目内部使用的 spring-boot-starter-parent 依赖项。我们将探讨此依赖项所提供…

基于jmeter+perfmon的稳定性测试记录

1. 引子 最近承接了项目中一些性能测试的任务&#xff0c;因此决定记录一下&#xff0c;将测试的过程和一些心得收录下来。 说起来性能测试算是软件测试行业内&#xff0c;有些特殊的部分。这部分的测试活动&#xff0c;与传统的测试任务差别是比较大的&#xff0c;也比较依赖…

用Python实现运筹学——Day 12: 线性规划在物流优化中的应用

一、学习内容 线性规划在物流优化中可以用于解决诸如配送路径优化、货物运输调度等问题。配送中心的路径优化问题本质上是寻找一条最优路径&#xff0c;在满足需求点的需求条件下&#xff0c;最小化配送的总运输成本或时间。常见的物流优化问题包括&#xff1a; 配送中心的货…

集师知识付费小程序:打造培训机构在线教育的金字招牌 集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统 集师线上卖课小程序

在数字化浪潮的推动下&#xff0c;在线教育已成为教育领域的热门话题。而在众多在线教育平台中&#xff0c;集师知识付费小程序凭借其独特的定位和创新的模式&#xff0c;成功为培训机构打造了一张闪亮的在线教育金字招牌。 集师知识付费小程序&#xff0c;是一个集课程展示、…

Python 如何使用 Matplotlib 和 Seaborn 可视化数据

Python 如何使用 Matplotlib 和 Seaborn 可视化数据 一、简介 数据可视化是数据分析过程中非常重要的步骤。通过可视化&#xff0c;复杂的数据变得更直观&#xff0c;数据中的模式、趋势和异常可以更容易被识别。Python 提供了多个强大的库来进行数据可视化&#xff0c;其中最…

ChatGPT:引领人工智能新潮流!

一、ChatGPT 是什么&#xff1f; 1. ChatGPT 的强大功能和广泛应用。 ChatGPT 作为一款先进的 AI 语言模型&#xff0c;拥有众多强大功能。它可以进行文本生成、文本分类、情感分析、机器翻译等多种自然语言处理任务。同时&#xff0c;ChatGPT 还能进行对话式交互&#xff0c;…

python之详解集合

一种无序且不重复的数据容器&#xff0c;集合用大括号{}表示。 1、集合的查找访问 集合是不能通过 集合名[index] 这种方式访问的&#xff0c;其作用在于快速读取&#xff0c;而不是针对某个元素。 但&#xff0c;可将集合转为列表&#xff0c;再由列表访问元素。不过&#…

Laravel Filament 如何配置多语言支持

演示 一、安装拓展包outerweb/filament-translatable-fields composer require outerweb/filament-translatable-fields配置模型 该套件包含一个名为 HasTranslations 的特性&#xff0c;用于使 Eloquent 模型具备多语言功能。翻译值以 JSON 格式存储&#xff0c;并不需要额外…

叙说 OSI 七层网络模型 | 你在第几层

引言 开放系统互联&#xff08;OSI&#xff0c;Open Systems Interconnection&#xff09;模型&#xff0c;这一国际标准化组织&#xff08;ISO&#xff09;提出的理论框架&#xff0c;是计算机网络通信领域内不可或缺的基础工具。如同语法和句法对于构建和解析语言的重要性一…

Python对PDF文件页面的旋转和切割

Python对PDF文件页面的旋转和切割 利用Python的.rotate()方法和.mediabox属性对PDF页面进行旋转和切割&#xff0c;最终生成一个PDF。下面结合案例进行说明&#xff0c;本示例中的名为split_and_rotate.pdf文件在practice_files文件夹中&#xff0c; 示例&#xff08;1&#…

ShardingSphere分库分表产品介绍

目录 一、ShardingSphere分库分表产品介绍 二、客户端分库分表与服务端分库分表 1、ShardingJDBC客户端分库分表 2、ShardingProxy服务端分库分表 3、ShardingSphere混合部署架构 三、分库分表&#xff0c;能不分就不分&#xff01; 1、为什么要分库分表&#xff1f; 2、…