当前位置: 代码迷 >> C# >> 参数传递日期值为空报错
  详细解决方案

参数传递日期值为空报错

热度:548   发布时间:2016-05-05 05:32:58.0
参数传递日期值为空出错
 bj_gzrz.zxsj = Convert.ToDateTime(this.dgv.CurrentRow.Cells["zxsj"].Value);

窗口间参数的传递,取得的 bj_gzrz.zxsj 是空值,因为这个列的值有些是空有些有值
值为空的行就不能够打开  提示“对象不能从 DBNull 转换为其他类型。”

需要怎么处理呢?总不能每个都判断吧。
------解决思路----------------------
不能为空,你要先判断一下
------解决思路----------------------
这种情况,你需要写一个公用的函数来转换值,

public T GetValue<T>(object value, T defaultvalue = default(T))
        {
            if (value== null 
------解决思路----------------------
 value== DBNull.Value)
            {
                return defaultvalue;
            }
            return (T)result;
        }

你在调用的时候只要传入相应的你要转换的类型和Object值就行了
------解决思路----------------------

bj_gzrz.zxsj = Convert.ToDateTime(this.dgv.CurrentRow.Cells["zxsj"].Value == null ? 当前日期 :  this.dgv.CurrentRow.Cells["zxsj"].Value);

------解决思路----------------------
你要简单的话就try catch 或者写个方法处理一下
------解决思路----------------------
引用:
你要简单的话就try catch 或者写个方法处理一下


这种情况千万别去try,try了你的程序就别考虑性能了。
#6楼的方法好,但是返回(T)value真的没问题?不是Convert.ToDateTime(value)??
#6楼的方法也其实是封装了判断步骤。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这种情况,你需要写一个公用的函数来转换值,

public T GetValue<T>(object value, T defaultvalue = default(T))
        {
            if (value== null 
------解决思路----------------------
 value== DBNull.Value)
            {
                return defaultvalue;
            }
            return (T)result;
        }

你在调用的时候只要传入相应的你要转换的类型和Object值就行了


result需要定义?怎么调用

不要意思,修改为:

public T GetValue<T>(object value, T defaultvalue = default(T))
        {
            if (value== null 
------解决思路----------------------
 value== DBNull.Value)
            {
                return defaultvalue;
            }
            return (T)value;
        }

调用

bj_gzrz.zxsj =GetValue<DateTime>(this.dgv.CurrentRow.Cells["zxsj"].Value);


还是没达到效果


return (T)value; 改成 Convert.ToDateTime(value);
------解决思路----------------------
DateTime.TryParse试试看
------解决思路----------------------
引用:
Quote: 引用:

鉴于页面自动生成之后的值已经被篡改为“0001/1/1 0:00:00”,日期格式的数据,你需要自己判断一下

  if (DateTime.MinValue > zxsj)
            {
                zxsj = DateTime.Now;
            }


可是我本身这个就是没有值的所以也不希望在传值过去也不要有值有办法处理吗

只有两个办法,
1.接收参数的地方类型使用DateTime? 可空类型
2.判断如果没有值就不为这个属性赋值,最后判断是否等于DateTime.MinValue
  相关解决方案