传递多个参数时编译错误

时间:2013-01-22 16:22:44

标签: c# asp.net onclick arguments repeater

我遇到的问题是,我需要通过点击按钮传递多个参数。我有一个转发器对象打印出来自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'

我几乎肯定代码是对的,那么问题是什么?

2 个答案:

答案 0 :(得分: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....
    }
}

或使用Command Event代替Click事件。

答案 1 :(得分:0)

您的Remove_Permission函数似乎应该是类型:

public delegate void EventHandler(
Object sender,
EventArgs e
)