none
datalist 绑定pagedatasource 列空值异常 RRS feed

  • 问题

  • 我用一个datalist绑定一个pagedatasource,但是从数据库里面读出来的数据存在空值的列,就出现了下面这种情况,如果不用pagedatasource来指定objectdatasource的数据源就没有出现异常!现在怎么办呢?


    指定的转换无效。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.InvalidCastException: 指定的转换无效。

    源错误:

    行 1017:            get {
    行 1018:                try {
    行 1019:                    return ((global::System.DateTime)(this[this.tableRoutes.StartTimeColumn]));
    行 1020:                }
    行 1021:                catch (global::System.InvalidCastException e) {

    源文件: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\travel\90ed0754\b1f05c99\App_Code.birvcall.3.cs    行: 1019
    2009年5月20日 3:11

答案

全部回复

  • 跟踪检查一下 this[this.tableRoutes.StartTimeColumn] 不是一个有效的 DateTime,如果是有效的 DataTetime 格式可以换成 return Convert.ToDateTime(this[this.tableRoutes.StartTimeColumn])

    知识改变命运,奋斗成就人生!
    2009年5月20日 3:17
    版主
  • 发生错误的代码不是我写的.怎么跟踪,还有已经说过数据库中读出的数据有些列是空的,这个datetime列就是可以为空的!

    2009年5月20日 3:54
  • 那你要把数据集中对应的列设置可以为 Null,然后重新编译
    知识改变命运,奋斗成就人生!
    2009年5月20日 3:55
    版主
  • 不行.数据集里面的对应列的allowNull本来就是true的.原来不用pagedatasource的时候没错.但是用分页的pagedatasource时候所有的空值列都出现这种问题.

    2009年5月20日 4:00
  • 自动生成的代码你是不是干预与修改的,如果是这样你可以把数据字段设置为不能为 Null, 默认时间用 1900-01-01 来表示,在界面上判断是否为 1900-01-01 如果是就替换为空
    知识改变命运,奋斗成就人生!
    2009年5月20日 4:05
    版主
  • 晕.这样不是允许空值的所有列都要该

    2009年5月20日 4:12
  • 这样做感觉有点太过累赘了.数据库里面肯定有很多表,每张表的也不会少于一列是允许空值的.这样做代码会很多,有没有更好的方法解决这个问题呢?

    2009年5月20日 10:43
  • 楼主,你好
    你绑定的时候是怎么绑定的?如果你采用模板绑定,你可以写一个函数专门用来处理当绑定的对象为null时的情况。


    Microsoft Online Community Support
    2009年5月21日 7:23
  • 我用的是objdatasoure做为数据源的,在业务逻辑层有个方法是返回一个pagedatasource的,objdatasource就是用这个方法获取数据,上面出错的代码不是我自己写的,应该是pagedatasource里面的属性,所以我不知道如何进去出现异常的那段代码进行修改.

    2009年5月21日 13:31
  • 使用Convert.ToDateTime 替代(System.DateTime)(this[this.tableRoutes.StartTimeColumn]);

    你还可以在绑定之前判断数据源是否有数据,没有数据则无需执行绑定方法
    【孟子E章】
    2009年5月21日 15:21
    版主
  • 楼主,你好

    如果你的问题仍没有解决。
    请贴出你页面datalist部分代码和后台绑定datalist部分代码。
    Microsoft Online Community Support
    2009年5月22日 1:35
  • 你可以在程序里面转换成默认时间,或者可以直接在SQL语句里面判断是NULL就变成一个时间就行了。。。

    如果你用模板绑定的话,一般来说NULL都不会出错,你只有debug一下那个代码的具体错误是什么,如果你debug不了的话,其实我也不知道怎么办(因为你又说不是你写的),你先试试转换一下看看吧。。

    低调,低调
    2009年5月22日 2:59
    版主
  • 对头,可以从读出 的 SQL 解决, Select Isnull(ModifyDate, '1900-01-01') from xxx, 如果不你想显示 1900-01-01 你可以将数据集中的这个字段类型改为 String 对应 SQL 改为 Select Isnull(ModifyDate, '') from xxx


    知识改变命运,奋斗成就人生!
    2009年5月22日 3:11
    版主
  • 那个出错的代码我不知道在哪里,我没写过那段代码.估计是pagedatasource里面的属性.进不去.
    估计也只能像下面xxy说的那样做了.

    2009年5月24日 5:24
  • 那个出错的代码我不知道在哪里,我没写过那段代码.估计是pagedatasource里面的属性.进不去.
    估计也只能像下面xxy说的那样做了.


    如果出错的代码不是你写的,请检查你的aspx和cs文件,是可以解决的
    【孟子E章】
    2009年5月24日 7:27
    版主
  • 算了,我改用别的办法分页了,不用它了.
    十分感谢大家的帮忙!!

    • 已标记为答案 KeFang Chen 2009年5月26日 10:04
    2009年5月25日 12:04