GridDataView的CellValidating事件与Button的Click事件先后顺序

Anod 2013-06-17 02:34:13
GridDataView设定了CellValidating事件,当某个cell输入了某个value时,直接点击旁边的Button,此时会执行Button的Click事件方法,不执行cell的验证事件方法.

难道改变当前页面Focus不行,非要改变GridDataView的CurrentCell才会触发CellValidating么?

CellValidating事件方法里已经有些提示,如数据格式不正确等.我需要实现在点击Button时若所有Cell有值,就保存所有值;若部分Cell无值,就提示用户需要填充完毕.若在Button事件中手动改变CurrentCell,则有可能会提示用户数据格式不正确后再提示用户需要填充完毕.除了将CellValidating事件方法里的提示用异常报出外有无其他方法呢?
...全文
292 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anod 2013-06-25
  • 打赏
  • 举报
回复
1.输入一个Cell之后,可能点击Button也可能继续输入其他Cell.输入其他Cell之前肯定要判断格式,所以验证事件少不了. 2.有的Button会填充多个Cell.所以在填充之前,也是会执行验证事件的. 3.输入一个Cell之后,再直接点击Button,是不执行验证事件的,如果设置Flag,必须要手工调用验证事件方法同功能的方法.在执行Button正常的功能.
stiff_neck 2013-06-17
  • 打赏
  • 举报
回复
1. 2.消息重叠这种现象只会出现在手动输入datagridview之后,直接点击button吧 我说的办法也只是针对这一种情况 3.foreach
Anod 2013-06-17
  • 打赏
  • 举报
回复
引用 6 楼 stiff_neck 的回复:
[quote=引用 楼主 anodaniu 的回复:] 若在Button事件中手动改变CurrentCell,则有可能会提示用户数据格式不正确后再提示用户需要填充完毕.除了将CellValidating事件方法里的提示用异常报出外有无其他方法呢?
1.这个方法是有点笨 2.你不是要解决message重叠的问题么?[/quote] 1.我说的笨是不便修改的意思. 2.偌大一个GridView,不可能所有cell都让人工输入啊...
stiff_neck 2013-06-17
  • 打赏
  • 举报
回复
引用 楼主 anodaniu 的回复:
若在Button事件中手动改变CurrentCell,则有可能会提示用户数据格式不正确后再提示用户需要填充完毕.除了将CellValidating事件方法里的提示用异常报出外有无其他方法呢?
1.这个方法是有点笨 2.你不是要解决message重叠的问题么?
Anod 2013-06-17
  • 打赏
  • 举报
回复
引用 4 楼 stiff_neck 的回复:
定义一个flag 如果格式不正确消息弹出 改变flag 在button事件里依据flag 判断是否继续执行
1.这个方法有点笨... 2.Cell有时不是一个一个来输入,可能是执行了某个操作,一次添加了几个cell的值,此时使用Flag不能描述几个cell准确的输入情况,而且并不是输入了cell就会点Button,是最后要保存才点的.
stiff_neck 2013-06-17
  • 打赏
  • 举报
回复
定义一个flag 如果格式不正确消息弹出 改变flag 在button事件里依据flag 判断是否继续执行
Anod 2013-06-17
  • 打赏
  • 举报
回复
引用 2 楼 anodaniu 的回复:
[quote=引用 1 楼 stiff_neck 的回复:] 是要先执行cellvalidating事件吧,设两个断点不就知道了么
发帖前就试过了,焦点还是在cell里,cellvalidating未执行.[/quote] 补充一下,button是ToolStrip里的button,不是普通的Button,难道是普通的Button的CanFocus为true.toolStrip中的button的canFocus为false?
Anod 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 stiff_neck 的回复:
是要先执行cellvalidating事件吧,设两个断点不就知道了么
发帖前就试过了,焦点还是在cell里,cellvalidating未执行.
stiff_neck 2013-06-17
  • 打赏
  • 举报
回复
是要先执行cellvalidating事件吧,设两个断点不就知道了么
dbfC#DataGridView中的常用技巧 只列出技巧部分,后面会有补充 0(最基本的技巧). 获取某列中的某行(某单元格)中的内容 this.currentposition = this.dataGridView1.BindingContext [this.dataGridView1.DataSource, this.dataGridView1.DataMember].Position; bookContent = this.database.dataSet.Tables[0].Rows [this.currentposition][21].ToString().Trim(); MessageBox.Show(bookContent); 1、自定义列 //定义列宽 this.dataGridView1.Columns[0].Width = 80; this.dataGridView1.Columns[1].Width = 80; this.dataGridView1.Columns[2].Width = 180; this.dataGridView1.Columns[3].Width = 120; this.dataGridView1.Columns[4].Width = 120; Customize Cells and Columns in the Windows Forms DataGridView Control by Extending Their Behavior and Appearance Host Controls in Windows Forms DataGridView Cells 继承 DataGridViewTextBoxCell 类生成新的Cell类,然后再继承 DataGridViewColumn 生成新的Column类,并指定 CellTemplate为新的Cell类。新生成的Column便可以增加到DataGridView中去。 2、自动适应列宽 Programmatically Resize Cells to Fit Content in the Windows Forms DataGridView Control Samples: DataGridView.AutoSizeColumns( DataGridViewAutoSizeColumnCriteria.HeaderAndDisplayedRows); DataGridView.AutoSizeColumn( DataGridViewAutoSizeColumnCriteria.HeaderOnly, 2, false); DataGridView.AutoSizeRow( DataGridViewAutoSizeRowCriteria.Columns, 2, false); DataGridView.AutoSizeRows( DataGridViewAutoSizeRowCriteria.HeaderAndColumns, 0, dataGridView1.Rows.Count, false); 3、可以绑定并显示对象 Bind Objects to Windows Forms DataGridView Controls 4、可以改变表格线条风格 Change the Border and Gridline Styles in the Windows Forms DataGridView Control Samples: this.dataGridView1.GridColor = Color.BlueViolet; this.dataGridView1.BorderStyle = BorderStyle.Fixed3D; this.dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None; this.dataGridView1.RowHeadersBorderStyle = DataGridVie

110,535

社区成员

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

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

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