在Default.aspx中,AutoGenerateEditButton启用第一列的“编辑”按钮(OnRowEditing)当您按下“编辑”按钮时,它会再显示两个按钮:更新(OnRowUpdating)和取消(OnRowCancelingEdit)。我需要有关“更新”按钮和SQL语句中的数据的帮助。
<asp:GridView ID="GridView1" runat="server" AutoPostBack="True" AutoGenerateColumns="False" AutoGenerateEditButton="True" OnRowCancelingEdit="Gridview1_OnRowCancelingEdit" OnRowEditing="Gridview1_OnRowEditing" OnRowUpdating="GridView1_OnRowUpdating>
</asp:GridView>
在Default.aspx.vb
中Protected Sub GridView1_OnRowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
GridView1.EditIndex = e.NewEditIndex
ViewState("pageIndex") = GridView1.EditIndex
ShowGrid()
End Sub
Protected Sub GridView1_OnRowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs)
GridView1.EditIndex = -1
ViewState("pageIndex") = GridView1.EditIndex
ShowGrid()
End Sub
Protected Sub GridView1_OnRowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
Dim connStr, cmdStr As String
connStr = "Connection String works"
cmdStr = "UPDATE table1 SET (col2=@col2,col3=@col3,col4=@col4) WHERE id=@id;"
Try
Using conn As New SqlConnection(connStr)
Using cmd As New SqlCommand(cmdStr, conn)
conn.Open()
cmd.Parameters.AddWithValue("@id", GridView1.Rows(e.RowIndex).Cells(1).Text)
cmd.Parameters.AddWithValue("@col2", GridView1.Rows(e.RowIndex).Cells(2).Text)
cmd.Parameters.AddWithValue("@col3", GridView1.Rows(e.RowIndex).Cells(3).Text)
cmd.Parameters.AddWithValue("@col4", GridView1.Rows(e.RowIndex).Cells(4).Text)
cmd.ExecuteNonQuery()
conn.Close()
cmd.Dispose()
conn.Dispose()
End Using
End Using
Catch ex As Exception
End Try
ShowGrid()
End Sub
我不确定代码行:
GridView1.Rows(e.RowIndex).Cells(1)。文本)
这意味着您选择“编辑”的行然后编辑条目然后按更新
第一列的“Cell(1)”1列是什么?
什么是“Cell(2)”2列是第二列?
id在col1中并且是主键,因此如果它被更改,它应该转到堆栈的底部。
当我更新列时,它会自动恢复为旧值。
答案 0 :(得分:0)
e.RowIndex
表示正在编辑的行的索引,它是从零开始的。例如,0表示第一行,1表示第二行,依此类推。
GridView1.Rows(e.RowIndex).Cells(1).Text
表示某列的文字,Cells(i)
也是基于零的e.RowIndex
。例如,如果e.RowIndex
值为0,则GridView1.Rows(e.RowIndex).Cells(1).Text
将返回第一行和第二列的文本。同样的事情适用于GridView1.Rows(e.RowIndex).Cells(2).Text
,它将返回第一行和第三列的文本。
我认为您可能将错误的值传递给@id
参数,并且更新语句没有更新任何内容,因为在数据库中找不到该值。
既然你说“id在col1中并且是主键”,我猜这一行:
cmd.Parameters.AddWithValue("@id", GridView1.Rows(e.RowIndex).Cells(1).Text)
应改为:
cmd.Parameters.AddWithValue("@id", GridView1.Rows(e.RowIndex).Cells(0).Text)