【问题标题】:Update and OnRowUpdating更新和 OnRowUpdating
【发布时间】:2014-01-16 01:48:19
【问题描述】:

在 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).Text)

这意味着您选择“编辑”然后编辑条目然后按更新的行

第一列的“Cell(1)”1 是什么列?

第二列的“Cell(2)”2 是什么列?

id 在 col1 中并且是主键,所以如果它被更改,它应该进入堆栈的底部。

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

【问题讨论】:

  • 确保如果您在 Page_Load 中调用 ShowGrid(),它在任何 If Not IsPostBack ... EndIf 块内。

标签: asp.net gridview


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多