winform中DataGridView在应该什么事件里进行数据验证?

expeditioner 2008-11-25 10:42:55
可能大家都会说在 DataGridView 的 CellValidating 事件中验证,但这个事件无论该单元格内容是否被用户修改,只要单元格焦点离开就会被触发,有时焦点进入单元格后用户不想做任何修改就关闭窗体,而这时就会触发验证事件执行验证代码,如果代码限制该单元格只允许输入数字,否则出现提示,而此时为空,就会出现提示,实际上,用户很有可能打开录入窗体后不做任何操作就退出,或者进行录入以外的操作,但因为焦点从单元格离开而出现“请输入数字”之类的提示,这问大家是怎样解决这个问题的。
PB中datawindow的itemchanged事件是当单元格被修改后焦点离开时被触发,非常适用,而Dot Net难道没有类似的解决方案吗,困扰很久了,请大家帮忙。先谢谢了.
...全文
255 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
justindreams 2008-11-25
  • 打赏
  • 举报
回复
使用DataGridView的DataBindingComplete事件,可以在有修改的时候,触发此事件
跟PB中datawindow的itemchanged类似。
wangping_li 2008-11-25
  • 打赏
  • 举报
回复
有一个EditingControlShowing 事件

void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
//在执行下面的之前可以先在这屏蔽掉不想验证的单元格
TextBox TB = new TextBox();//把当前编辑的单元格转换为TextBox
TB.TextChanged += new EventHandler(TB_TextChanged);//用TextBox.TextChanged事件来判断
}

void TB_TextChanged(object sender, EventArgs e)
{
//这里验证
}
bloodish 2008-11-25
  • 打赏
  • 举报
回复
你可以不在DataGridView的CellValidating里做,而在某个Cell关联的编辑控件(实际是某列关联的编辑控件)的Validating事件里做.
另外你需要选择正确的编辑模式 DataGridView.EditMode,比如设置EditMode = DataGridViewEditMode.EditOnKeystroke,这样只有在有按键时控件才会被激活


TextBox textBox = null;
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
int colIndex = dataGridView1.CurrentCell.ColumnIndex;
if(colIndex == 0) //0可以替换成你需要验证的列的Index
{
textBox = e.Control as TextBox;
if(textBox != null)
{
//先注销,在注册,可以防止事件重复注册
textBox.Validating -= (textBox_Validating);
textBox.Validating += (textBox_Validating);
}
}

}

void textBox_Validating(object sender, CancelEventArgs e)
{
//to do
}

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧