日期:2014-05-18  浏览次数:20885 次

DataGridView数据验证
DataGridView数据验证用cellValidating事件只能在用户点击这个单元格然后离开的时候才验证,如果用户没有点击这个单元格,那么就不会验证,怎么让用户不管点不点单元格,都在保存的时候对该单元格验证啊?有没有DataGridView控件带的哪个事件可以解决这个问题,或者其他方法解决这个问题

------解决方案--------------------
所以你要把各个不同的验证放各自控件的validate的事件里面。
------解决方案--------------------
循环遍历Datagridview中的每一个单元格,进行验证。
------解决方案--------------------
每天回帖即可获得10分可用分!
------解决方案--------------------
探讨
引用:
调用窗体的验证。this.Validate()
是的,这个可以弹出一个有很多内容的关于异常的对话框,不过,我想对异常分类处理,比如验证司机姓名如果为空,弹出司机姓名不能为空,如果时间为空,弹出时间不能为空,能不能根据异常内容来分类弹出对话框告诉用户呢?

------解决方案--------------------
建议你这样:
1、在编辑控件失去焦点的时候,进行数据合法性的判断
2、你可以在保存的时候进行验证,保存按钮的逻辑可以这样编写,我给的是示例,你理解就可以了:
首先你把datagridview的CausesValidaton设置成false,自己来验证:
C# code
 
SqlDs1.Tables("学生信息").RowChanged += new DataRowChangeEventHandler(sqlDt_RowChanged);
private void sqlDt_RowChanged(object sender, DataRowChangeEventArgs eRow)
{
? ? string strRowErrInfo = "";
? ?
? ? if (Information.IsNumeric(eRow.Row("学号").ToString().Trim) == false) {
? ? ? ? strRowErrInfo = "学号必须为数字!" + ControlChars.CrLf;
? ? }
? ? else {
? ? ? ? if (eRow.Row("学号").ToString().Trim.Length != 12) {
? ? ? ? ? ? strRowErrInfo = "学号只能是12个数字字符!" + ControlChars.CrLf;
? ? ? ? }
? ? }
? ?
? ? if (eRow.Row("姓名").Trim.Length == 0) {
? ? ? ? strRowErrInfo += "姓名不能为空!" + ControlChars.CrLf;
? ? }
? ?
? ? if (eRow.Row("性别").Trim.Length == 0) {
? ? ? ? strRowErrInfo += "性别不能为空!" + ControlChars.CrLf;
? ? }
? ? else {
? ? ? ? if (eRow.Row("性别").Trim != "男" & eRow.Row("性别").Trim != "女") {
? ? ? ? ? ? strRowErrInfo += "性别只能为男或女!" + ControlChars.CrLf;
? ? ? ? }
? ? }
? ?
? ? if (Information.IsNumeric(eRow.Row("班级编号").trim) == false) {
? ? ? ? strRowErrInfo += "班级编号必须为数字!" + ControlChars.CrLf;
? ? }
? ? else {
? ? ? ? if (eRow.Row("班级编号").Trim.Length != 10) {
? ? ? ? ? ? strRowErrInfo += "班级编号只能是10个数字字符!" + ControlChars.CrLf;
? ? ? ? }
? ? }
? ?
? ? if (strRowErrInfo.Trim.Length != 0) {
? ? ? ? eRow.Row.RowError = "本行数据存在以下错误:" + ControlChars.CrLf + strRowErrInfo;
? ? }
}