Dim box As TextBox = CType(DataGrid1.Items(e.Item.ItemIndex).Cells(1).Control(0), TextBox)//把这列转换为了模板列,想要对数据进行编辑,更新,但不知道为什么.Controls[1]索引得用1了,用0索引的话,会报无法进行类型转换的错. 但是如果我把Control(0)换成 FindControl("TextBox1")的话就总是得到TextBox1中更新前的值.
盼高手解答

解决方案 »

  1.   

    这样应该没有问题:
    Dim box As TextBox =DirectCast(DataGrid1.Items(e.Item.ItemIndex).FindControl("TextBox1"),TextBox))
      

  2.   

    Dim box As TextBox = CType(DataGrid1.Items(e.Item.ItemIndex).FindControl("TextBox1"), TextBox)
      

  3.   

    用Dim box As TextBox =DirectCast(DataGrid1.Items(e.Item.ItemIndex).FindControl("TextBox1"),TextBox))语句试了,可是在 DataGrid1.DataBind()语句中报错,IListSource 不包含任何数据源。 
     
    异常详细信息: System.Web.HttpException: IListSource 不包含任何数据源。这个问题已经困扰好几天了,头疼 Dim MemberId As String = DataGrid1.Items(e.Item.ItemIndex).Cells(0).Text
                   Dim box1 As TextBox = DirectCast(DataGrid1.Items(e.Item.ItemIndex).FindControl("TextBox1"), TextBox)
            Dim newName As String = box1.Text        Dim sqlstr As String = "Update 职工表 set 用户名 =" + Chr(39) + newName + Chr(39) + " where 用户ID= " + Chr(39) + MemberId + Chr(39)        Dim conn As New SqlConnection("uid=sa;pwd=422;server=JSZX-WYH;database=Test;")        Dim ds As New DataSet        Try            DataGrid1.EditItemIndex() = -1            conn.Open()            Dim da As New SqlDataAdapter            Dim cmd As New SqlCommand            cmd.CommandText() = sqlstr            cmd.Connection() = conn            ds.Clear()            da.SelectCommand() = cmd            da.Fill(ds, "职工表")            DataGrid1.DataSource() = ds            DataGrid1.DataBind()
            Catch ex As SqlException            Response.Write(sqlstr)        Finally            conn.Close()        End Try        BindData()
      

  4.   

    换成是Dim box As TextBox = CType(DataGrid1.Items(e.Item.ItemIndex).FindControl("TextBox1"), TextBox)也是报同样的错误
      

  5.   

    楼主是不是把 在page_load 事件中每次提交都重新绑定了一次数据呀,否则怎么会找到的值是以前的呢,如果是这样的话,应在page_load 事件中判断一下是不是Page.IsPostBack  然后再绑定DATAGRID的数据源:
      Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            If Not Page.IsPostBack Then
                showinfo()
            End If
        End Sub