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 | name1 | 行の削除ボタン
----------------
| 2 | name2 | 行の削除ボタン
----------------

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") %>)たが、エラーメッセージで失敗しました:サーバータグが適切に形成されていません。



編集:解決策:

どうもありがとうございました。誰かが役に立つと思うかもしれない場合に備えて、以下の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の構文はよくわかりません。ただし、基本的には、送信者をButtonにキャストし、ボタンのCommandArgumentプロパティを取得して、現在の行のIDを取得します。

于 2013-02-25T23:33:27.037 に答える