一个DataGrid,自己建立各列,从数据库读取数据,除去首行外,共10行6列,因为需要读取更改后的某些单元格的值,使用更改EditItemIndex的方法修改数据,然后我想读取某单元格的值,使用如下语句:
string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text
string id = e.Item.Cells[1].Controls[0].ToString();//普通单元格
报错,说参数超出范围??这是怎么回事啊?明明没有超出么....

解决方案 »

  1.   

    不是这原因啊,我试了好久了,我是用ReadOnly属性让某列不能修改的,能修改就是文本框,现在同样的单元格,是单元格的,使用
    string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text
    可以正常访问,改成ReadOnly后,使用
    string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text
    或者string id = e.Item.Cells[1].Controls[0].ToString();
    都报错,显示走出范围
    百思不解啊,请大家帮帮忙啊,不弄明白我睡不着啊...
      

  2.   

    string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text
    可以正常访问,
    是因为你这是到编辑模式下,.Controls[0]这个表示在编辑模式下自动出现了一个textbox改成ReadOnly后,就不会产生textbox   ,只能通过(TextBox)e.Item.Cells[1].text得到值
      

  3.   

    string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text
    应该修改的是第二列,可能楼主是不是修改第一列,如果是就用
    string id = ( (TextBox)e.Item.Cells[0].Controls[0] ).Text
      

  4.   

    Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
            If e.Item.DataSetIndex <> -1 Then
                Dim t As TextBox
                Dim DI As DataGridItem
                DI = e.Item
                t = CType(DI.Cells(0).Controls(0), TextBox)
                Response.Write(t.Text.ToString)        End If
            BindDg()
        End Sub
      

  5.   

    “string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text
    应该修改的是第二列,可能楼主是不是修改第一列,如果是就用
    string id = ( (TextBox)e.Item.Cells[0].Controls[0] ).Text”这个我没弄错,我上面是举个例子,我现在要的是第二列的当前行数据,第二列是自动编号列,不可编辑,现在我这么写
    string id = ( (TextBox)e.Item.Cells[1].Controls[0] ).Text;
    显示超出范围
    这么写
    string id = ( (TextBox)e.Item.Cells[1] ).Text;
    显示不能把TableCell转换为TextBox....
    大侠们再帮帮我,谢谢了!!
      

  6.   

    第二列设为了只读,也就是并不像在编辑模式下修改它,你直接
    读取 string id=e.item.cells[1].text就行吧,不需要转化为
    textbox属性
      

  7.   

    不是很清楚楼主的情况
    楼主可以试试输出
    Response.Write("在第二列的控件数是:"+e.Item.Cells[1].Controls.Count)
    如果等于0说明没有控件,你要调试一下hope it will help you
      

  8.   

    tb.Text = ((TextBox)e.Item.FindControl("tb_id")).Text;