更新和OnRowUpdating

时间:2014-01-16 01:48:19

标签: asp.net gridview

在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中并且是主键,因此如果它被更改,它应该转到堆栈的底部。

当我更新列时,它会自动恢复为旧值。

1 个答案:

答案 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)