高手急救TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[0];问题
“/UserWeb”应用程序中的服务器错误。
--------------------------------------------------------------------------------指定的转换无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidCastException: 指定的转换无效。源错误: 
行 88:  Response.Write("</script>");
行 89:  */
行 90:  TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[0];
行 91: 
行 92:  /*
 源文件: e:\www\userweb\admin\egame.aspx.cs    行: 90 堆栈跟踪: 
[InvalidCastException: 指定的转换无效。]
   UserWeb.admin.egame.editDataGrid_UpdateCommand(Object source, DataGridCommandEventArgs e) in e:\www\userweb\admin\egame.aspx.cs:90
   System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArgs e) +109
   System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) +507
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
   System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) +100
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +120
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +115
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
   System.Web.UI.Page.ProcessRequestMain() +1292
当我用DATAGRID的更新事件时就出现这个问题,以前用的好好的呀
 

解决方案 »

  1.   

    private void editDataGrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //设置DataGrid控件的编辑项的索引为选择的当前项
    editDataGrid.EditItemIndex = e.Item.ItemIndex;
    //数据绑定
    DataGridDataBind();
    } private void editDataGrid_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //取得编辑行的关键字段的值
    int empID = (int)editDataGrid.DataKeys[e.Item.ItemIndex];
    TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[0];


    //定义SQL语句
    string sqlCom = "update gamename set gamename='" +nwcCit.Text.ToString()+"' where gamenameid="+empID;
    //定义数据连接对象,其中数据库连接字符串是在Web.Config文件中定义的
    SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"].ToString());
    //定义命令对象
    SqlCommand cmd = new SqlCommand(sqlCom,conn);
    ////打开数据连接
    conn.Open(); //执行SQL命令
    cmd.ExecuteNonQuery();
    //取消编辑
    conn.Close();
    editDataGrid.EditItemIndex = -1;
    DataGridDataBind();
      

  2.   

    用TextBox  nwcCit=e.Item.Cells[0].Controls[0] as TextBox;
      

  3.   

    这样获取不到值呀 空指针说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 82: 
    行 83:  //定义SQL语句
    行 84:  string sqlCom = "update gamename set gamename='" +nwcCit.Text+"' where gamenameid="+empID;
    行 85:  //定义数据连接对象,其中数据库连接字符串是在Web.Config文件中定义的
    行 86:  SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"].ToString());
     
      

  4.   

    在editDataGrid_UpdateCommand事件的開頭加上下面語句
    if(e.Item.ItemType==ListItemType.EditItem)
    來去掉dataGrid頭,因為在datagrid標頭上沒有找到控件
      

  5.   

    上面說錯了,在UpdateComman事件中是不用的你可以利用((TextBox)e.Item.Cells[3].FindControl("xx"))來試試主要看你這個控件是怎麼加進去的
      

  6.   

    如果你用了分页那么e.Item.ItemIndex取到的总是DataGrid现有的索引值,如果你经过翻页就会发生错误,所以把你的e.Item.ItemIndex改成e.Item.DataSetIndex
      

  7.   

    TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[1];
      

  8.   

    private void DataGridDataBind()
    {
    //定义数据连接对象,其中数据库连接字符串是在Web.Config文件中定义的
    SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"].ToString());
    //创建数据适配器对象
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter("select a.*,g.gamename from acting a INNER JOIN gamename g ON a.gamenameid=g.gamenameid",conn);
    //创建DataSet对象
    DataSet ds = new DataSet();

    //填充数据集
    da.Fill(ds,"acting");
    //进行数据绑定
    DataTable   mytable=ds.Tables["acting"];
    DataColumn  mycolumn=  mytable.Columns.Add ("number",System.Type .GetType ("System.String"));
    for (int i=0;i<mytable.Rows.Count ;i++)
    {
    mytable.Rows [i]["number"]=(i+1).ToString ();
    }
    editDataGrid.DataSource = mytable.DefaultView;
    editDataGrid.DataBind();
    conn.Close();

    }
    DATAGRID是这样帮定的
    当点击修改的时候用   TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[1]; 取值就报错
     
    异常详细信息: System.InvalidCastException: 指定的转换无效。
      

  9.   

    select a.*,g.gamename from acting a INNER JOIN gamename g ON a.gamenameid=g.gamenameid",
    为什么用上面的查询之后用DataGrid修改的时候
    用下面的这条语句不能取到值,而是提示下面的异常
    TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[0];异常详细信息: System.InvalidCastException: 指定的转换无效。那位高手能指点一下呀
      

  10.   

    先确定有这个TextBox没有?
    还有就是如果是在DataGrid中取你放进去的控件,控件的序号是1、3、5、7……这样的
    所以试下
    TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[1];
    一定要注意控件的摆放顺序,按照1、3、5、7的序号来取~!
      

  11.   

    TextBox  nwcCit=(TextBox)e.Item.Cells[0].findcontrol("id值")
      

  12.   

    再看看是不是这里的错误啊,这样没错啊。
    TextBox  nwcCit=(TextBox)e.Item.Cells[0].Controls[0];
      

  13.   

    转换成模板列再试试,不行的话用Findcontrol("")试试。