问题1  因为我用的是vs2005 所以GridView1的更新代码是不是必须设置gv.DataKeyNames 属性和必须用gv.DataKeys来取值。
问题2  如果用datakeynames怎么赋值?怎么取值
问题3   Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
        If IsPostBack = True Then
            bind() //绑定
        End If
    End Sub
   
 更新    Protected Sub gv_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gv.RowUpdating
                Dim s As String = "Data Source=.;Initial Catalog=teacher;Integrated Security=True"
               
        Dim i As String = CType((gv.Rows(e.RowIndex).Cells(1).Controls(0)), TextBox).Text.ToString.Trim        
        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("ss") = s1// 为什么s1显示出来是更新前的数据 不是更新后的数据
        
        sqlcom.ExecuteNonQuery()        sql.Close()        gv.EditIndex = -1
        bind()
    End Sub

解决方案 »

  1.   

    问题一:
    GridView1的更新代码不是必须设置gv.DataKeyNames 属性和必须用gv.DataKeys来取值。 
    还可以用其他的绑定功能来取值。
    比如把ID绑定到像按钮之类的控件上,进行取值和修改:就是这个:CommandArgument属性。
      

  2.   

    问题二:如果用datakeynames怎么赋值?怎么取值 
    先是在视图上点击GridView——右键属性——设置datakeynames的值:这里的值是一些数据库的字段,比如ID
    然后用的时候在GridView的行绑定事件里写代码: string value=this.GridView1.DataKeys[e.Row.RowIndex].value.ToString();//这个用e来确定行数。这样来得到绑定的值。
      

  3.   

    谢谢
    可是vb里面用代码datekeynames怎么赋值
      

  4.   

    前两个问题,你参照我的方法去做一下就明白了,
    第三个问题,
         Session("ss") = s1。你这样写,语法正确吗。我不记得是Session["ss"]=s1.这样写吗
      

  5.   

    datakeynames怎么赋值
    可以再gridview属性里面赋值
      

  6.   

    不用设置,直接用
    string id=((DataRowView)GridView1.Rows[e.RowIndex].DataItem)["字段名称"].ToString();
      

  7.   

    问题三谁能帮我解决谢谢!!!!!!!!!!!!!
    顺便解释下7楼的大哥的代码
    string id=((DataRowView)GridView1.Rows[e.RowIndex].DataItem)["字段名称"].ToString();
    谢谢
      

  8.   


    虽然我没用过GV,不过这个也很容易看出来你所取的字段值=((数据行类型)GV1.行[对象的行索引].数据项)["对应绑定的数据字段"].ToString();
      

  9.   

    问题3  Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load 
            If IsPostBack = True Then 
                bind() //绑定 
            End If 
        End Sub 
      
    更新     Protected Sub gv_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gv.RowUpdating 
                    Dim s As String = "Data Source=.;Initial Catalog=teacher;Integrated Security=True" 
                  
            Dim i As String = CType((gv.Rows(e.RowIndex).Cells(1).Controls(0)), TextBox).Text.ToString.Trim         
            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("ss") = s1// 为什么s1显示出来是更新前的数据 不是更新后的数据 
            sqlcom.ExecuteNonQuery() 
            sql.Close() 
            gv.EditIndex = -1 
            bind() 
        End Sub
      

  10.   

    前台Button绑定Id
    后台取选中的Id:
            Button btn = (Button)sender;
            string id= btn.Text.Trim();
    就是那么简单.绝对可行.
      

  11.   

    楼主问的是三个问题。
    问题一,问题二已解决了,剩下问题三,你没仔细看吧。If IsPostBack = True Then 
                bind() //绑定 
            End If 
        End Sub bind()方法怎么写的,有可能是没有回调,
    造成Dim s1 As String = CType((gv.Rows(e.RowIndex).Cells(2).Controls(0)), TextBox).Text.ToString.Trim 
    的值没有获取到你需要更新的值。
      

  12.   

     20楼的星爷!!有问题没有?
    Public Sub bind()
            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.Tables(0)
            gv.DataBind()        sql.Close()    End Sub
      

  13.   

    Session("ss") 在更新前是否赋值
    在更新后重新赋值