如何在点击更新按钮时把想要的行的值保存到一个变量里?private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{ DataGrid1.EditItemIndex=e.Item.ItemIndex;
tempetname=((TextBox)e.Item.Cells[2].Controls[0]).Text;
tempetage=((TextBox)e.Item.Cells[4].Controls[0]).Text;
tempettype=((TextBox)e.Item.Cells[2].Controls[0]).Text;
}为什么说
指定的参数超出范围呢?
参数名:index

解决方案 »

  1.   

    如果你打算做更新,应该是在UpdateCommand事件中处理
      

  2.   

    你总共是不是只有4列,那e.Item.Cells[4].Controls[0]).Text;修改成
    e.Item.Cells[3].Controls[0]).Text;
    也有可能Cells中就没有控件,使用Controls[0]无效。
      

  3.   

    tempetname=((TextBox)e.Item.Cells[2].Controls[0]).Text;
    tempetage=((TextBox)e.Item.Cells[4].Controls[0]).Text;
    tempettype=((TextBox)e.Item.Cells[2].Controls[0]).Text;这里不对了 
    tempetname=((TextBox)e.Item.Cells[1].Controls[0]).Text;
    tempetage=((TextBox)e.Item.Cells[2].Controls[0]).Text;
    tempettype=((TextBox)e.Item.Cells[3].Controls[0]).Text;
      

  4.   

    如果你打算做更新,应该是在UpdateCommand事件中处理;问题是我要先获取原来的值来进行查询记录。楼上的, 不行。  
    无法将类型为“System.Web.UI.WebControls.Button”的对象强制转换为类型
    “System.Web.UI.WebControls.TextBox”。
    我的 DataGrid 里 第一列是删除按钮,第二列是编辑按钮。第三列开始是数据。
      

  5.   

    问题是我要先获取原来的值来进行查询记录
    ===================================
    这句话你刚才可没说...其实索引越界的很大可能性是因为单元格的下标或控件位置有误如果你用的是模版列,那么用FindControl去找控件应该是不会错的,否则要贴你的aspx文件,看看究竟是什么位置
      

  6.   

    这个问题可以这样:
    datagrid.rows[e.index]cell[0~n].value
      

  7.   

    这个问题可以这样:
    datagrid.rows[e.index]cell[0~n].value
    我是.net 1.1 的 datagrid1. 好像没ROWS 这个出来。。 ================================
    如果你用的是模版列,那么用FindControl去找控件应该是不会错的,否则要贴你的aspx文件,看看究竟是什么位置唉。。作业来的。。 你肯帮我看源码。我全发你是了。。留下邮箱。 不过是2003 .net 1.1的
    FindControl 这函数也不知哪里来。。
    可能我的表达能力问题吧。。 唉。想的功能可能看了是很简单的。。 至少在WINFORM里。。
      

  8.   

    tempetage=((TextBox)e.Item.Cells[4].Controls[0]).Text;
    改成
    tempetage=((TextBox)e.Item.Cells[4].Controls[1]).Text;
    试试
      

  9.   

    tempetage=((TextBox)e.Item.Cells[4].Controls[0]).Text;
    改成
    tempetage=((TextBox)e.Item.Cells[4].Controls[1]).Text;
    试试同样说是超出的。。我看主要是 DataGrid1_EditCommand  要在这个事件里面取值的问题
      

  10.   

    看到现在我才知道是Winform下的..刚才基本所有的人都当WebForm来回答了..
      

  11.   

    这个问题,设个断点,单步调试,在监视中看看每一行代码用到的对象的相关对象的属性,特别是执行到报错的代码行,比如在代码执行到tempetage=((TextBox)e.Item.Cells[4].Controls[0]).Text;这行报错时,下次调试时在监视中看看e.Item.Cells[4]是否报错,e.Item.Cells[4].Controls[0]是否报错,((TextBox)e.Item.Cells[4].Controls[0])是否报错,一步步的分析.这样才会对你有帮助,也能很快的找到原因并解决问题.
      

  12.   

    这个问题,设个断点,单步调试,在监视中看看每一行代码用到的对象的相关对象的属性,特别是执行到报错的代码行,比如在代码执行到tempetage=((TextBox)e.Item.Cells[4].Controls[0]).Text;这行报错时,下次调试时在监视中看看e.Item.Cells[4]是否报错,e.Item.Cells[4].Controls[0]是否报错,((TextBox)e.Item.Cells[4].Controls[0])是否报错,一步步的分析.这样才会对你有帮助,也能很快的找到原因并解决问题.
    别想那么复杂可能我还没说清楚我想要的功能
    就是在UpdateCommand 事件 去更新数据到数据库
    string updatestr="";
    updatestr+="pettype='"+((TextBox)e.Item.Cells[2].Controls[0]).Text+"'";
    updatestr+=",petname='"+((TextBox)e.Item.Cells[3].Controls[0]).Text+"'";
    updatestr+=",petage='"+((TextBox)e.Item.Cells[4].Controls[0]).Text+"'";

    提交一个SQL语句
    update petinformation set "+updatestr+"where petname='"+tempetname+"' and petage='"+tempetage+"'";其中 tempetname 和tempetage 要要回原来的值才可以在数据库中查询到那条记录啊。
    ((TextBox)e.Item.Cells[2].Controls[0]).Text  这个已经是在 DataGrid1 控件上的新值了。所以不可能
    update petinformation set "+updatestr+"where petname='"+((TextBox)e.Item.Cells[2].Controls[0]).Text  +"'"……那样去找啊