指定的转换无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidCastException: 指定的转换无效。源错误: 
<asp:Image ID="FlagImage" runat="server" ImageUrl='<%#FormatImageUrl((bool)DataBinder.Eval(Container.DataItem,"Flag"),DataBinder.Eval(Container.DataItem,"Type").ToString()) %>' /> 我是在实现一个网络硬盘的例子,说明一下,第一次加载的时候不会报错,因为第一次显示的都是里面的文件夹,而当我点其中的一个文件夹,想要显示里面的文件的时候。
当调试到
  private void BindDirectoryData(int nParentID)
    {
        ///显示目录列表信息
        IDisk disk = new Disk();
        SqlDataReader dr = disk.GetDirectoryFile(nParentID);
        ///绑定控件的数据
        DiskView.DataSource = dr;
        DiskView.DataBind();
        dr.Close();        ReturnBtn.Visible = nParentID > 0 ? true : false;
    }这里面的DiskView.DataBind();它就报上面的错误,其中FormatImageUrl函数实现如下
protected string FormatImageUrl(bool bFlag, string sType)
    {
        if (bFlag == true) //bFlag是判断是否为文件夹类型:1为是,0为否
        {   ///文件类型
            return ("~/Images/folder.gif");
        }
        else
        {
            switch (sType) //sType是判断文件的类型
            {   ///bmp文件
                case "image/bmp": return ("~/Images/bmp.bmp");
                ///exe文件
                case "application/octet-stream": return ("~/Images/exe.bmp");
                default: return ("~/Images/other.gif");
            }
        }
        return ("");
    }

解决方案 »

  1.   

    DiskView.DataSource = dr; sqldatareader可以用来作数据绑定吗?
    SqlDataReader dr = disk.GetDirectoryFile(nParentID); 
      

  2.   

     SqlDataReader dr = disk.GetDirectoryFile(nParentID); 
            ///绑定控件的数据 
            DiskView.DataSource = dr; 
            DiskView.DataBind(); 你换别的容器绑定一下试试吧(DataTable ,DataSet)
      

  3.   

    结帖语:二楼和三楼的说法虽然不很准确,但提醒了我,谢谢,给你们一人一半吧,我先用了DataTable做数据源,调试了一下才发现了真正的错误不在程序而在数据库的存储过程有问题导致存写入数据库中的数据类型不正确,改过来了,就调试成功了,为了验证SqlDataReader是否能作为GIRDVIER的数据源,我又换过来了,用SqlDataReader作数据源,仍然运行成功。所以这两个都能作为GIRDVIEW的数据源.谢谢各位了