0

私が抱えている問題は、ボタンのクリックで複数の引数を渡す必要があることです。sqlqueryから値を出力するリピーターオブジェクトがあり、ボタンには同じクエリからの引数があります

これが私のリピーターです:

 <asp:Repeater ID="Edit_Repeater" runat="server" DataSourceID="Edit_Repeater_Source">
                <HeaderTemplate>
                    <table class="u_Repeater">
                        <tr>
                            <th>
                                Group Name:
                            </th>
                            <th>
                                Permission Level:
                            </th>
                            <th>
                                Remove:
                            </th>
                        </tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "Group_Name")%>
                        </td>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "Name")%>
                        </td>
                        <td>
                            <asp:Button ID="Submit_Remove" runat="server" Text="Remove Permission" OnClick="Remove_Permission" CommandArgument='<%# Eval("GID") + ";" + Eval("PID") %>' />
                        </td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>

そして、これが私の背後にあるコードです:

protected void Remove_Permission(object sender, CommandEventArgs e)
    {
        string[] arg = new string[2];            
        string[] commandArgs = e.CommandArgument.ToString().Split(';');
        float GID = float.Parse(arg[0]);
        float PID = float.Parse(arg[1]);
        string UID = User_ID.SelectedValue;

        using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["app_migrationConnectionString"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand("DELETE FROM Membership WHERE GID = @GID AND PID = @PID AND UID = @UID", connection);
            cmd.Parameters.Add("@GID", SqlDbType.BigInt, -1);
            cmd.Parameters["@GID"].Value = GID;
            cmd.Parameters.Add("@PID", SqlDbType.BigInt, -1);
            cmd.Parameters["@PID"].Value = PID;
            cmd.Parameters.Add("@UID", SqlDbType.NVarChar, -1);
            cmd.Parameters["@UID"].Value = UID;

            try
            {
                connection.Open();
                cmd.ExecuteNonQuery();
                connection.Close();
            }

            catch (Exception ex)
            {

                throw ex;
            }
        }
    }

ビルドエラーは発生しませんが、ページを実行すると、次のようなコンパイルエラーが発生します。

'Remove_Permission'のオーバーロードはデリゲート'System.EventHandler'と一致しません

私はコードが正しいとほぼ確信しています、それで問題は何ですか?

4

2 に答える 2

1

CommandEventArgsあなたをEventArgsに変更します-次に、送信者をButtonにキャストし、そこからコマンド引数を取得します。

protected void Remove_Permission(object sender, EventArgs e)
{
    var button = sender as Button;
    if (button !=null)
    {
        var commandArg = button.CommandArgument;
        //etc....
    }
}

または、イベントの代わりにコマンドイベントClickを使用します。

于 2013-01-22T16:26:13.467 に答える
0

Remove_Permission関数は次のタイプである必要があるようです。

public delegate void EventHandler(
Object sender,
EventArgs e
)
于 2013-01-22T16:26:57.927 に答える