c# – WinForms DataGridView行为类似于SQL Server Management S
发布时间:2020-12-15 21:28:44 所属栏目:百科 来源:网络整理
导读:我正在使用 Windows窗体项目中的DataGridViews. 我想获得类似于在MS SQL Server Management Studio中以编辑模式添加的内容. 我试着解释一下:我的数据网格中有一些必需的列,我想只有当这些列中的值有效时才会在网格中添加一行. 如果单元格的值无效,我想用消
我正在使用
Windows窗体项目中的DataGridViews.
我想获得类似于在MS SQL Server Management Studio中以编辑模式添加的内容. 我试着解释一下:我的数据网格中有一些必需的列,我想只有当这些列中的值有效时才会在网格中添加一行. 我尝试使用CellValidating和RowValidating事件,但我对结果不满意. 你能帮助我吗? UPDATE 我用这种方式实现了RowValidating: private void myGrid_RowValidating(object sender,DataGridViewCellCancelEventArgs e) { if (string.IsNullOrEmpty(myGrid.Rows[e.RowIndex].Cells["MandatoryColumn"].FormattedValue.ToString())) { e.Cancel = true; myGrid.Rows[e.RowIndex].Cells["MandatoryColumn"].ErrorText = "Mandatory"; MessageBox.Show("Error message"); } else { myGrid.Rows[e.RowIndex].Cells["MandatoryColumn"].ErrorText = string.Empty; } } 当必填字段中的值无效时,将显示消息框并且单元格为红点,但按ESC键我获取IndexOutOfRangeException … 解决方法
以下MSDN论坛帖子中解释了此问题:
DataGridView + RowValidating = Index 4 does not have a value? 基本上,它似乎是DataGridView处理验证的方式中的一个错误(或至少非常意外的行为) – MessageBox.Show()导致对不再存在的行进行验证. 我发现您的代码的以下更改修复了该问题: private void myGrid_RowValidating(object sender,DataGridViewCellCancelEventArgs e) { // Note the check to see if the current row is dirty if (string.IsNullOrEmpty(myGrid.Rows[e.RowIndex].Cells["MandatoryColumn"].FormattedValue.ToString()) && myGrid.IsCurrentRowDirty) { e.Cancel = true; myGrid.Rows[e.RowIndex].Cells["MandatoryColumn"].ErrorText = "Mandatory"; MessageBox.Show("Error message"); } else { myGrid.Rows[e.RowIndex].Cells["MandatoryColumn"].ErrorText = string.Empty; } } 更改是检查正在验证的行是否脏 – 当您按下escape并删除一行时它不再是脏的,这样可以防止错误地尝试编辑它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby – Sunspot:按属性排序/排序facet结果,例如created_a
- applicationContext.xml、quartzConfig.xml配置理解
- 分析并解决FLV格式文件上传服务器后不能播放
- 第四十二讲:tapestry Ajax混合(mixins)周期性更新
- 正则表达式 (Visual Studio)
- Oracle:ORA-01810:格式代码出现两次 日期格式、时间格式、t
- Ajax传输中文乱码问题的解决办法
- ruby-on-rails – 在Sass中访问Rails.env
- Mybatis出现ORA-00911: invalid character的解决办法
- c# – 打印输出窗口中的堆栈跟踪