DataGridView数据验证CellValidating()
DataGridView中的单元格,无法通过KeyPress()控制,可能我没找到方法。
通过CellValidating()在用户结束编辑时判断,如果不合法则还原数据。
{
//可编辑的列
if (e.ColumnIndex != 2 && e.ColumnIndex != 3)
return;
double outDb = 0;
if (double.TryParse(e.FormattedValue.ToString(), out outDb))
{
e.Cancel = false;
}
else
{
e.Cancel = true;//数据格式不正确则还原
dataGridView1.CancelEdit();
}
}
TextBox的KeyPress()事件
{
double outDb = 0;
if (double.TryParse(txtK.Text + e.KeyChar.ToString(), out outDb))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
我继承TextBox重写KeyPress()封装了个自定义控件。
url:http://greatverve.cnblogs.com/archive/2012/06/14/DataGridView-CellValidating.html
要求:
验证错误后焦点不离开。
实现:
单元格的验证可以使用dgv_details_CellValidating事件。
验证不通过时调用e.Cancel = true;终止事件链,单元格将保持编辑状态。
调用dgv_details.CancelEdit();可以使单元格的内容会滚到修改前的值。
使用System.Windows.Forms.SendKeys.Send("^a");将全选单元格的内容。
单元格选中并开始编辑状态
实现:
//DataGridView获得焦点
dgv_details.Focus();
//DataGridView指定当前单元格
dgv_details.CurrentCell = dgv_details[0, 0];
//开始编辑状态
dgv_details.BeginEdit(false);
定制自动生成绑定了列
实现:
dgv_details.AutoGenerateColumns = false;
设置列的背景色
实现:
Color GridReadOnlyColor = Color.LightGoldenrodYellow;
dgv_details.Columns[1].DefaultCellStyle.BackColor =
WinKeys.GridReadOnlyColor;
DataGridView单元格验证的设计的问题
问题一:绑定还是不绑定?
绑定的优势:比较简单,代码少。
绑定得缺点:DataGridView中的数据受数据源的影响(主键约束、值类型约束)。不一至时会激发DataError事件,输入的内容无法保存到单元格中和数据源中。特殊的验证(比如长度、格式等)还是需要另外写代码实现。
关于增加行的问题。增加新行时多主键的验证有问题,而且验证不通过时会将新行全部删除。限制很多,很不方便。
非绑定的优势:验证等处理比较灵活。不受数据源的约束。
非绑定得缺点:显示和向数据库更新数据时需要比较多的代码实现,效率比较低。
总的感觉在处理验证比较麻烦的场合,我还是比较喜欢非绑定的方式。如果数据量大,验证比较简单的场合使用绑定模式比较好
转载于:https://www.cnblogs.com/greatverve/archive/2012/06/14/DataGridView-CellValidating.html
DataGridView数据验证CellValidating()相关推荐
- 数据验证html,JavaScript 表单数据验证
JavaScript 表单 HTML 表单验证可以通过 JavaScript 来完成. HTML 表单验证也可以通过浏览器来自动完成. 如果表单字段 (fname) 的值为空, required 属性 ...
- java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...
此问题包含多个不同的问题. 首先,我们需要获取工作表的数据验证,然后为每个数据验证获取数据验证所适用的Excel单元格范围. 如果该单元格位于该单元格范围之一中,并且数据验证是列表约束,则进行进一步处 ...
- ExtJs 备忘录(3)—— Form表单(三) [ 数据验证 ]
正文 一.资料 1.1. 表单提示的方式设置,如: Ext.form.Field.prototype.msgTarget='side' 该设置为枚举值:'qtip','side','title','u ...
- Silverlight实例教程 - Validation数据验证开篇
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- 基于jquery,bootstrap数据验证插件bootstrapValidator 教程
ootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说. 需要引用css: bootstrap.min.cs ...
- 《Excel 职场手册:260招菜鸟变达人》一第 14 招 利用数据验证记录数据录入时间...
本节书摘来异步社区<Excel 职场手册:260招菜鸟变达人>一书中的第1章,第14节,作者: 聂春霞 , 佛山小老鼠 责编: 王峰松,更多章节内容可以访问云栖社区"异步社区&q ...
- WEB应用数据验证指南
WEB应用数据验证指南 1.为什么要验证数据? 如果不验证数据,容易导致WEB应用出现多种漏洞,比如:SQL注入攻击,命令注入攻击,跨站点脚本攻击,编码攻击,文件系统攻击和缓冲区溢出.因此,为了保护W ...
- day22-Model数据验证以及钩子
一.前言 其实在django内部也是支持数据验证的,只是这个数据验证比较弱而已,只能支持单个的验证,但是对于组合的,或者固定的,我们就验证不了,你说可以验证邮箱格式,但是不能验证 不能@qq.com结 ...
- Silverlight – Datagrid,Dataform数据验证和ValidationSummary
上一篇,我们讨论了,捕获用户提交数据验证.本篇将集中讨论Datagrid和Dataform两个数据控件的数据验证方法,其中,我们会附加介绍一个新的验证控件ValidationSummary. 概述 D ...
最新文章
- Element 2.6.0 发布,基于 Vue 2.0 的桌面端组件库
- 校园二手交易平台的开发和利用
- OSX 挂载 NTFS 格式硬盘
- QML 界面切换的几种方法
- Dreamoon Likes Coloring CodeForces - 1330C(贪心+思维)
- 在html中怎么写加起来的,css可以在html里面写吗?
- 不同浏览器对回车提交表单的处理办法(转载)
- 使用Flash Builder 4.5进行多平台游戏开发
- 软件工程实验报告:图书管理系统
- Xshell7免费版申请无需破解
- 【开篇】初等数论及其核心内容
- 02、RS485 通信与 Modbus 协议
- excel常用函数公式及技巧搜集4
- html如何让英文自动换行,HTML如何让英文自动换行不断词
- php apache mpm,RHEL 7 Apache MPM 配置
- 基于Python(Django)+MongoDB实现的(Web)新闻采集和订阅系统【100010319】
- 发送端口25,465,587端口
- 通过跳绳瘦下来是一种怎么样的体验?
- fuchsiaos和鸿蒙os区别,谷歌Fuchsia OS和华为鸿蒙系统(HarmonyOS)没有必然联系
- java 随机数生成算法_java 语言实现的随机数生成算法
热门文章
- context root修改无效:web修改项目路径(eclipse)
- C语言 | C语言实现日历打印
- SQLite学习手册(索引和数据分析/清理)
- oracle存储照片,[oracle]中存储图片
- linux pci 寄存器,Linux 内核 标准 PCI 配置寄存器
- es dsl java api_求帮助将dsl翻译为java的API
- 第四范式入围Forrester Wave™:预测分析与机器学习中国市场评测报告 位列领导者行列...
- vb.net2019-打开外部程序发送键盘信号(4)
- mxnet基础到提高(53)-ndarray与numpy之间转换
- 【CV】基于聚类的图像分割-Python