【问题标题】:How to access values of row being deleted in RowDeleting event如何访问在 RowDeleting 事件中被删除的行的值
【发布时间】:2026-01-13 12:10:02
【问题描述】:

我试图在从数据库中删除之前保存一些信息。我正在使用asp gridview。我正在尝试从使用 RowDeleting 事件删除的行中检索值。但是,我非常不成功。

Protected Sub gv1_RowDeleting(sender As Object, e As System.EventArgs) Handles   gv1.RowDeleting
   Dim a As String = gv1.Columns(0).ToString
   Dim b As String = gv1.SelectedRow.RowIndex.ToString
   Dim c As String = gv1.Rows(a).Cells(0).Text
End Sub

a 最终成为标题行的第一列。 b 出错了。我尝试了很多不同的东西,但无法提出行索引。我会认为这个事件只会访问被删除的行。这是我的 gridview 声明:

<asp:GridView ID="gv1" runat="server" AllowSorting="True" AutoGenerateColumns="False" EnableViewState="false"
            DataSourceID="ds1" EmptyDataText="NO ROWS FOUND" CssClass="gridView" DataKeyNames="id" GridLines="None">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="ID" SortExpression="id" />
                <asp:BoundField DataField="totalsd" HeaderText="SD" SortExpression="totalsd" />
                <asp:BoundField DataField="freesd" HeaderText="FREE" SortExpression="freesd" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="deleteButton" runat="server" CommandName="Delete" Text="Delete" OnClientClick="return confirm('Are you sure you want to delete this record?');" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

【问题讨论】:

    标签: asp.net vb.net gridview rowdeleting


    【解决方案1】:

    e 声明为System.Web.UI.WebControls.GridViewDeleteEventArgs。然后您可以使用e.RowIndex 获取行索引。

    【讨论】:

      【解决方案2】:

      尝试这种示例方式,例如使用 RowCommand

      <asp:LinkButton ID="DelButton" runat=server Text="Delete" CommandName="Delete" CausesValidation=False CommandArgument='<%# Databinder.Eval(Container,"DataItem.id") %>'></asp:LinkButton>
      

      并在vb文件中更改

      Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
      
              Dim MyConn1 As New OleDbConnection(Your Connection string)
              Dim cmdDelete As OleDbCommand
      
              If e.CommandName = "Delete" Then
                   cmdDelete = New OleDbCommand("Delete from table" & _
                                                     "Where id= " & e.CommandArgument.ToString() & ";", MyConn1)
                  MyConn1.Open()
                  cmdDelete.ExecuteNonQuery()
                  MyConn1.Close()
                  BindAutoMake()
      
              End If
          End Sub 
      

      注意:确保您仍有 Row_deleting 事件处理程序方法,但为 Empty 且没有任何代码。否则会报错。

      【讨论】: