Dev GridControl 单元格输入数据的验证方法

今天要做一个dev gridcongtrol输入单元格内容有效性的检测,此处以不允许为空、该列的值不允许重复为例。(当然也可以使用别的方式,但别的方式不好实现:当该单元格值不满足条件时,锁定整个gridview,除该单元格之外的位置都不允许输入,即将焦点锁定在这一个单元格)。

1、首先将要验证的列设置为RepositoryItemCheckEdit类型,或者别的控件类型(其余控件类型未测试),以下以RepositoryItemCheckEdit类型为例

2、找到RepositoryItemCheckEdit的Validating事件,具体代码如下:

<span style="font-size:14px;"> private void TextEdit1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            BaseEdit textEdit = sender as BaseEdit;
            if (textEdit.Text.ToString().Trim().Length == 0)
            {
                e.Cancel = true;
                //标识 错误提示
                errorReason = 0;
                return;
            }
            else
            {
                //获取GridView中所有的选中的行号
                //此处不允许多选,故只有一行
                int[] iRowId = this.gViewActList.GetSelectedRows();
                for (int i = 0; i < gViewActList.DataRowCount; i++)
                {
                    //重复检验时,不验证当前行
                    if (i != iRowId[0])
                    {
                        //textEdit.EditValue  当前编辑的值
                        //需要注意的是取当前单元格的值要用:textEdit.EditValue
                        //GridView在TextEdit1_Validating执行时还未将你输入的值更新进去,但执行完该方法后,即使不满足条件,你所输入的值,也会更新到GridView中去
                        //同时,也说明了,在Validating函数中排除重复值的时候,通过GridView获取当前行的值,不是最新的,即不是你最近一次输入的
                        if (textEdit.EditValue.ToString().Trim() == gViewActList.GetDataRow(i)["GridView上绑定的列名"].ToString().Trim())
                        {
                            e.Cancel = true;
                            //标识 错误提示
                            errorReason = 1;
                            return;
                        }
                    }
                }
            }</span>

3、根据Validating事件中的标识,进行错误信息提示:

<span style="font-size:14px;">private void gViewActList_InvalidValueException(object sender, InvalidValueExceptionEventArgs e)
        {
            if (errorReason == 0)
            {
                e.ErrorText = "动作名称不允许为空!";
            }
            else if (errorReason == 1)
            {
                e.ErrorText = "动作名称不允许为重复!";
            }
            else
            {
                e.ErrorText = "值无效!";
            }
        }</span>

具体效果如下:

小注:

1、使用RepositoryItem.Validating事件,事件的"sender" 必须转换为BaseEdit类型,使用EditValue来获取当前输入的值并进行校验,如果校验不通过,把e.Cancel设置True。这种方法一般用来对内置控件的单元格进行数据验证。

2、使用 GridView.ValidatingEditor 事件

 事件的"sender"必须转换为GridView类型,当前列可以从GridView.FocusedColumn属性获得,值可以从e.Value获取,如果校验不通过,需要把e.Valid设置为False.。这种方法一般用于对整个Grid内的文本框进行数据验证。

具体错误提示信息可以在GridView.InvalidValueException事件中进行处理

时间: 2024-08-06 20:46:32

Dev GridControl 单元格输入数据的验证方法的相关文章

GridControl单元格编辑验证的方法

本文实例演示了DevExpress实现GridControl单元格编辑验证的方法,比较实用的功能,具体方法如下: 主要功能代码如下: /// <summary> /// 自定义单元格验证 /// </summary> /// <param name="view">GridView</param> /// <param name="e">BaseContainerValidateEditorEventArgs

[DevExpress]GridControl单元格编辑验证

关键代码: /// <summary> /// 自定义单元格验证 /// </summary> /// <param name="view">GridView</param> /// <param name="e">BaseContainerValidateEditorEventArgs</param> /// <param name="fieldNameHandler"

获取光标在GridControl单元格中的位置

前段时间遇到一个需求,在gridcontrol单元格中光标位置插入选择的特殊符号,按理说需求很简单,但是在开发过程中却遇到一个问题,无法获取光标在单元格中的位置,查遍了控件的帮助文档也没有找到现成的方法,最后通过BaseEdit折中转换了一下,算是解决了这个问题,现讲解决代码贴出来,给有需要的人提供帮助         private DevExpress.XtraEditors.BaseEdit m_gridViewActiveEditor = null;         private vo

DevExpress GridControl 单元格添加进度条(ProgressBar)

首先可以使用DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所以的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. 那么就要自己手动的编写代码来完成了. 1 : 绘制一个单元格进度条 形状   当进度小于50%时显示为红色. 1 public void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) 2 {

Excel 2013中单元格添加下拉列表的方法

使用Excel录入数据的时候我们通常使用下拉列表来限定输入的数据,这样录入数据就很少发生错误了.Excel 2013较以前的版本发生了很大的变化,那么在Excel 2013是如何添加下拉列表的呢? 下面Office办公助手的小编就以“性别”中下拉选择男女为例,讲解下Excel 2013中添加下拉列表的方法.更复杂的大家可以举一反三,方法是一样的. 1.首先要选中你要添加下拉列表的单元格. 2.在菜单栏上选择数据--数据验证--数据验证. 3.打开如图所示的对话框,切换到设置选项下. 4.将允许条

jqgrid单元格设置空值的方法

项目中使用jqgrid,在使用的场景下经常需要清空单元格内容,于是使用了下面的代码: 1 $("#jqgrid1").jqGrid('setCell',rowId, 'column', ''); 然后竟然没有起作用,值还是有的,这个不可能jqgrid没有这种方式,于是没有查文档,查看了一下页面的源代码,发现在初始化的时候,没有赋值的情况下,html的元素内容为 1 &nbsp 于是自己做了如下的代码试验: 1 $("#jqgrid1").jqGrid('se

PHP使用PHPExcel删除Excel单元格指定列的方法是怎样

有一个系统仅公司内部和外部经销商使用,在一个导出功能中公司内部员工跟外部经销商导出的列是不一样的(某些数据是不能提供给经销商的)因为导出的数据都是一样的(某些列外数据外部没有)因此并没有单独处理,而是统一生成然后根据不同的账户再删除没有权限的列/*** @Author: HTL* @Description: 移出单元列* @objPHPExcel: phpexecel object* @remove_columns:要移出的列*/function _remove_column($objPHPEx

按条件设置gridcontrol 单元格属性

等价代码设置:(注意这里使用都是FieldName, 即绑定对象的字段名) var cn = new StyleFormatCondition(FormatConditionEnum.Expression); cn.Expression = "[ProduceName] !=null"; cn.Column = gridView4.Columns["Process"]; cn.ApplyToRow = true; cn.Appearance.BackColor =

gridControl单元格的值随另一个单元格值的改变而改变

private void grvDetail_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (grvDetail.RowCount > 0 && e.RowHandle >= 0) { if (grvDetail.FocusedColumn.FieldName == "partQty" || grvDetail.