分享

关于DataGridView_DataError事件的问题

 长江黄鹤 2022-05-27 发布于湖北

当DataGridView 中某一列绑定为Int类型时,当编辑输入字符类型,便会弹出错误对话框,上面会有若干条错误,并且说要替换该对话框请处理DataError事件的,这本来是好事。但关键是DataError事件触发在CellValueChanged事件之前,而且一旦触发之后,焦点便无法离开该单元格,甚至连点击关闭按钮都不行,其他事件都触发不了

DataError事件处理器取得的DataGridViewDataErrorEventArgs对象的Cancel属性为False时,用户向单元格输入的值不正确时也不会出现错误,而且还原为原来的值。或者加上这一句

 dgvIn1.CausesValidation = false;//取消验证格式

这样即使错误,关闭和其他按钮都是可以点击的,也会继续触发其他事件。当然也可以直接在DataError 中验证输入格式

            if (e.ColumnIndex != dgvMain.Columns["Num"].Index)

                return;

            dgvMain.Rows[e.RowIndex].ErrorText = "输入数字格式不正确";

            dgvMain.CancelEdit();  //取消编辑,还原单元格值(这句一定要有,不恢复的话一样报错)

(或者用e.Cancel=false;可以达到同样的效果)

还有一种比较坑爹的方法,就是绑定之前对datatable进行转换,把int型的列转换成string的,于是就不需要考虑许多了,但是每次转换效率估计……

        private DataTable Create(DataTable dt)

        {

            DataTable dtNew = dt.Clone();

            dtNew.Columns["Num"].DataType = typeof(string);

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                DataRow row = dtNew.NewRow();

                for (int j = 0; j < dt.Columns.Count; j++)

                {

                    row[j] = dt.Rows[i][j];

                }

                dtNew.Rows.Add(row);

            }

            return dtNew;

        }

订正一下,在程序中转换不如就在读取数据库时做处理的

select cast(SNum as nvarchar) from XX where XX

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多