Protected Sub gv_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gv.RowUpdating        Dim i As String = CType((gv.Rows(e.RowIndex).Cells(1).Controls(0)), TextBox).Text.ToString.Trim
        
        Dim s As String = "Data Source=.;Initial Catalog=teacher;Integrated Security=True"
        Dim s1 As String = CType((gv.Rows(e.RowIndex).Cells(2).Controls(0)), TextBox).Text.ToString.Trim
        Dim s2 As String = CType((gv.Rows(e.RowIndex).Cells(3).Controls(0)), TextBox).Text.ToString.Trim
        Dim s3 As String = "update AA set name='" + s1 + "',password='" + s2 + "'where id='" + i + "'"
        Dim sql As New SqlConnection(s)
        Dim sqlcom As New SqlCommand(s3, sql)
        sql.Open()
        Session.Clear()
        Session("ss") = s1//错误  “取出来的数值 是更新前的数据”        sqlcom.ExecuteNonQuery()        sql.Close()        gv.EditIndex = -1
        bind()

解决方案 »

  1.   

    【Session("ss") = s1//错误  “取出来的数值 是更新前的数据”】
    什么意思?这时s1的值是CType((gv.Rows(e.RowIndex).Cells(2).Controls(0)), TextBox).Text.ToString.Trim 的值,不对吗?
      

  2.   

    恩是啊,赋值得到的sessio是更新前的数据
      

  3.   

    我的意思是Dim s1 As String = CType((gv.Rows(e.RowIndex).Cells(2).Controls(0)), TextBox).Text.ToString.Trim 总是取的dateview 初始的值 没有取出更新之前的数值
      

  4.   

    我的意思是Dim s1 As String = CType((gv.Rows(e.RowIndex).Cells(2).Controls(0)), TextBox).Text.ToString.Trim 总是取的dateview 初始的值 没有取出更新之后的数值  
     
      

  5.   

    gv.Rows(e.RowIndex).Cells(2).后面能点出FindControl方法吗,要是能就用这个方法,然后里面的参数是你的TextBox的ID,我这没有开发环境,不能帮你试试。你自己试试吧!
      

  6.   

    出现这种可能的情况还有就是你点击更新按钮时,页面重新加载,可能会把你赋得值给清空掉。你把Page_load里的代码贴出来我给你看看。
      

  7.   


        Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
            Dim s As String = "Data Source=.;Initial Catalog=teacher;Integrated Security=True"
            Dim a As String = "select * from AA"
            Dim sql As New SqlConnection(s)
            sql.Open()
            Dim scmd As New SqlDataAdapter(a, sql)
            Dim ad As SqlCommandBuilder = New SqlCommandBuilder(scmd)
            Dim ds As Data.DataSet = New Data.DataSet()
            scmd.Fill(ds)        gv.DataSource = ds
            gv.DataBind()        sql.Close()    End Sub
      

  8.   

    你看看你Page_load事件对于DataGridView控件的绑定方法是不是放在
    if(!IsPostback)
    {
    DataGridView控件的绑定方法
    }里面了,如果没有这个判断,我估计就是这个造成的,你加上就可以了应该。
      

  9.   

    Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load 
    if(!Ispostback)
    {
            Dim s As String = "Data Source=.;Initial Catalog=teacher;Integrated Security=True" 
            Dim a As String = "select * from AA" 
            Dim sql As New SqlConnection(s) 
            sql.Open() 
            Dim scmd As New SqlDataAdapter(a, sql) 
            Dim ad As SqlCommandBuilder = New SqlCommandBuilder(scmd) 
            Dim ds As Data.DataSet = New Data.DataSet() 
            scmd.Fill(ds)         gv.DataSource = ds 
            gv.DataBind()         sql.Close() 
    }    End Sub
      

  10.   

    if(!IsPostback) 

    我引用了,还是一样的效果
    不过不太明白FindControl的意思
      

  11.   

    不可能吧,FindControl就是找控件的一个方法。
      

  12.   

    我觉得应该是页面刷新,然后将你数据给清空这种情况造成的,看不见你具体的代码,不好给你弄!
    你执行那个sql语句能好使吗?