首先我想说的是这是不可能的,我想很多人都用过这种方法教科书上也有!包括我在内我也用过你好好检查你的程序!我给出一段我的程序看看有什么区别!希望有帮助!祝好运!private void grdStat_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
ResourceDataAccess rda = new ResourceDataAccess();
int id = Convert.ToInt16(e.Item.Cells[0].Text);
TextBox name =(TextBox)e.Item.Cells[1].Controls[0];
TextBox description =(TextBox)e.Item.Cells[2].Controls[0];
if(id!=1&&id!=2){
if(!rda.EditStat(id,name.Text,description.Text)){
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=编辑资源状态失败!");
}
}
else
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=前两个资源状态不能修改!");
this.grdStat.EditItemIndex =-1;
this.BindGrid();
} private void grdStat_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
ResourceDataAccess rda = new ResourceDataAccess();
int id = Convert.ToInt16(e.Item.Cells[0].Text);
if(id!=1&&id!=2){
if(!rda.DeleteStat(id)){
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=编辑资源状态失败!");
}
}
else
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=前两个资源状态不能修改!");
this.BindGrid();
} private void grdStat_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
this.grdStat.EditItemIndex = e.Item.ItemIndex;
this.BindGrid();
} private void grdStat_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
this.grdStat.EditItemIndex =-1;
this.BindGrid();
}

解决方案 »

  1.   

    ((TextBox)e.Item.Cells[1].Controls[0]).Text;
    其实获得数据就这个范例而已,如果是别的控件,把TextBox换个名字而已。
    主要是你要找到对应的数据行和列。
      

  2.   

    ((TextBox)e.Item.Cells[1].Controls[0]).Text;
    中的Controls[0]才是要命的,记住。当你按下update的时候,DG的状态是Edit,此时的控件状态并不如你所想像,textbox就是Cell(1),此时的Cell中隐藏了两个控件,默认的浏览状态的控件为.Controls[0]。所以你提取不到值!
    或者,用DG.Item.Findcontrol(),这样就不会有误解了!
      

  3.   

    此 id 列为 不显示,使用 TextBox id= (TextBox)(e.Item.FindControl("id"))
    this.Response.Write(id.ToString()); 出错 id 使用 int id=Convert.ToInt32(e.Item.Cells[1].Controls[0].ToString()) 报错 :输入字符串的格式不正确
      

  4.   

    你的id是DataKeys吗?要是你直接这样用MyDataGrid.DataKeys[(int)e.Item.ItemIndex]; 
    不显示列,我不知道datagrid是否在运行期有数据
      

  5.   

    string name=((TextBox)e.Item.Cells[1].Controls[0]).Text;
      

  6.   

    e.item.FindControl("name")怎么会有错,会不会是你的控件ID写错啦
      

  7.   

    此 id 列为 不显示,使用 TextBox id= (TextBox)(e.Item.FindControl("id"))
    this.Response.Write(id.ToString()); 出错 id --------------------------->什么错误,,还有 TextBox id_1 不知道定义成相同的控件名字会不会出错 
    使用 int id=Convert.ToInt32(e.Item.Cells[1].Controls[0].ToString()) 报错 :输入字符串的格式不正确
    -----------------------------------------》这一般不会对的,除非有(e.Item.Cells[1].Controls[0])控件是以 0-9的字符串命名的  ,一般字符串不能转化为int型
      

  8.   

    string name=((TextBox)e.Item.Cells[1].Controls[0]).Text; 可以通过
    TextBox  name= (TextBox)(e.Item.FindControl("name"));  不行
      

  9.   

    id 是 第一列 ,设置 为只读 或者不可见 时 ,TextBox  id=((TextBox)e.Item.Cells[1].Controls[0]); 报错 : 指定的参数已超出有效值的范围。参数名:index
      

  10.   

    I t 's too strange !