日期:2014-05-18  浏览次数:21001 次

DataGridView某列绑定数据类型为Datetime,输入内容然后清空报错,求帮助
我使用C#做的Winform程序中,使用了一个DateGridView空间,其中一列绑定的后台数据是Datetime类型,初始是为空。

现在如果输入了内容后,清空,然后单元格焦点离开就会报错。

DataGridView Default Error Dialog

The following exception occurred in the DataGridView:

System.FormatException: String was not recognized as a valid Datetime. --->

……

也就是说空字符串没有被识别为有效的日期类型,如何才能让这个空字符串变成DBNull存回去呢,有没有遇到过这个问题的朋友,看看如何解决?


------解决方案--------------------
不会呀,应该是你的数据源中这一列不能为空吧.
------解决方案--------------------
应该是数据库设计的时候表中这个字段的内容不能为空,所以不能保存吧?
------解决方案--------------------
这是因为:
“一列绑定的后台数据是Datetime类型”,使得DateGridView控件对单元格的值才去默认类型约束检查:即针对类型检查!正是因为你把单元格清空了,变成null,自然无法与Datetime转换,就会抛出异常!

解决办法:清空时,程序默认给一个时间的初始值:
C# code

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            try
            {
                if (e.ColumnIndex == 1)        //控制要Datetime的列
                {
                    if(e.Value==null)
                    {
                        e.Value = "1900-1-1 00:00:00";    //给定一个默认时间值,你可以改为其他的
                        e.FormattingApplied = true;
                    }
                }
            }
            catch (System.Exception ex)
            {
                e.FormattingApplied = false;
            }
        }