0

Default.aspx :(我在页面上动态生成了表格行,其中数据来自具有 2 个字段的数据库表,如您所见:ID和)(顺便说一句,为了示例清晰起见,studentname我从下面的代码中删除了)<table>,<tr>,<td>

<asp:AccessDataSource ID="AccessDataSource1" runat="server"
                      DataFile="C:\db1.mdb"
                      SelectCommand="SELECT * FROM [table1]">
</asp:AccessDataSource>
<asp:DataList ID="DataList1" runat="server" DataSourceID="AccessDataSource1"
              DataKeyField="ID" RepeatColumns="3" RepeatDirection="Horizontal">
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# "ID: " & Eval("ID") %>'></asp:Label>
        <asp:Label ID="Label2" runat="server" Text='<%# Eval("studentname") %>'></asp:Label>
        <asp:Button ID="Button1" runat="server" Text="Delete Row Button"  OnClick="Button1_Click" />
    </ItemTemplate>
</asp:DataList>

因此,如果我的数据库表有 2 条记录,则在这样的页面上生成一个有 2 行的表,并且我为每一行创建了一个删除按钮:
----------------
| 1 | 名称1 | 删除行按钮
----------------
| 2 | 名称2 | 删除行按钮
----------------

Default.aspx.vb:(命令按钮的代码隐藏)

Dim x As New Connection

Protected Sub Button1_Click(ByVal a As Object,
                            ByVal b As System.EventArgs)
    x.deleterowclass("1")

End Sub

connection.vb:(我创建的一个类,我在其中删除记录)

Imports System.Data.OleDb
Imports System.Data
Imports Microsoft.VisualBasic
Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\db1.mdb"
Dim con As New OleDbConnection(str)

Public Sub deleterowclass(ByVal ID As Integer)
    con.Open()
    Dim adp As New OleDbCommand("Delete * from table1 where ID=" & ID, con)
    adp.ExecuteNonQuery()
    con.Close()
End Sub


问题:

- 上面的按钮代码从访问数据库中删除一条记录,只有我指定的 ID 为“1”:x.deleterowclass("1")
- 因为数据库中的每条记录都会在页面上的每一行旁边创建一个新按钮Button1,我是不确定解决问题是问题还是优势,因为它确实有效。

我的问题:

如何通过单击旁边存在的按钮(我的意思是页面上的行旁边)删除任何记录?我的想法是也要处理 ID 并将其传递到某个地方,但不幸的是我不确定如何完成它,我尝试了很多这样的参数,OnClick="Button2_Click(<%# Eval("ID") %>)但我失败了,并显示错误消息:服务器标签格式不正确。



编辑:解决方案:

非常感谢 atbebtg,下面是 VB 中的对应代码,以防有人发现它有用。

Default.aspx 中的按钮代码(与您的答案相同,但我也想把它放在这里):

<asp:Button ID="Button1" runat="server" Text="Delete Row Button" OnClick="Button1_Click" CommandArgument='<%# Eval("MyID") %>'/>

VB中的OnClick代码:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim mybutton As Button = DirectCast(sender, Button)
    x.deleterowclass(Convert.ToInt32(mybutton.CommandArgument))
End Sub
4

1 回答 1

0

将您的按钮代码更改为以下内容:

  <asp:Button ID="Button1" runat="server" Text="Delete Row Button" OnClick="Button1_Click" CommandArgument='<%# Eval("MyID") %>'/>

现在在您的 onclick 上甚至添加以下代码

 protected void Button1_Click(object sender, EventArgs e)
    {
        Button mybutton = (Button)sender;
        deleterowclass(Convert.ToInt32(mybutton.CommandArgument);
    }

抱歉,上面是 c# 代码,我真的不知道 vb 的语法。但基本上你想将发送者转换为按钮并获取按钮的 CommandArgument 属性以获取当前行的 ID。

于 2013-02-25T23:33:27.037 回答