还是上面的分页语句,程序执行这段代码时出错:
一、错误信息:
指定的转换无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.InvalidCastException: 指定的转换无效。
源错误: 
行 49: 
行 50:  if (dr.Read())
行 51:  MyDataGrid.VirtualItemCount = (int)dr["bs"];
行 52: 
行 53:  dr.Close();
二、源代码:
private void Page_Load(object sender, System.EventArgs e)
{
  // 设定当按下「上一页」与「下一页」按钮便执行 NavigateToPage 方法
  this.btnPreviousPage.Click += new System.EventHandler(this.NavigateToPage);
  this.btnNextPage.Click += new System.EventHandler(this.NavigateToPage);  if (!IsPostBack)
     {
      StartIndex = 0;
      // 以下这段程式码用来取得数据表的数据记录数目,
      // 并将它指派给 DataGrid 控件的 VirtualItemCount 属性。
      string sqlstring="select COUNT(*) as bs from clgl_xtdm";
      OleDbCommand cmd = new OleDbCommand(sqlstring,cn);
      cn.Open();
      //MyDataGrid.VirtualItemCount =(int)cmd.ExecuteScalar();
      OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
      if (dr.Read())
MyDataGrid.VirtualItemCount = (int)dr["bs"];
      dr.Close();
      cn.Close();
      BindGridToSource(StartIndex, "上一页");
      }
}
三、请问该怎么改?

解决方案 »

  1.   

    1:dr["bs"]很可能是空值
    2:为什么要改?理由
      

  2.   

    MyDataGrid.VirtualItemCount = (int)dr["bs"].ToString();
      

  3.   


    try
    {
    MyDataGrid.VirtualItemCount =convert.toint16(dr["bs"]);
    }
    catch
    {
     Mydatagrid.Virtualitemcont=0;
    }
    2
      

  4.   

    MyDataGrid.VirtualItemCount = (int)dr["bs"];
    ===========>
    使用Convert,不要用int
      

  5.   

    改成
    int i=Convert.ToInt32(cmd.ExecuteScalar()); 
    MyDataGrid.VirtualItemCount =i;
    好象就可以了。
    但现在有另外一个问题:
    MyCommand = new OleDbCommand("SELECT TOP 10 flmc,xmmc FROM clgl_xtdm WHERE flmc> @uid ORDER BY  fldh,xmmc", cn);
    MyCommand.Parameters.Add("@uid", OleDbType.VarChar, 18).Value = DropDownList1.SelectedItem.Text;
    这两句在数据库是sql server时没错,但数据库是Oracle时就出错了,说是找不到from关键字。估计就是在 @uid 出错,不知道这个变量该怎么写?
      

  6.   

    MyDataGrid.VirtualItemCount = int.Parse(dr["bs"].ToString());