单选按钮不在转发器中触发itemcommand事件

时间:2013-02-20 05:14:55

标签: asp.net gridview radio-button custom-controls

我正在使用asp.net custom control我正在使用repeater control来显示radio buttons

点击ItemCommand event时,我需要触发转发器RadioButton 我遇到的问题是RadioButton不是触发ItemCommend event的标尺,而且没有CommendArgumentCommandName属性。

要完成我创建asp.net server control,请从RadioButton驱逐我,并在其中添加CommendArgumentCommandName属性。
我还在其中添加了Button,以便我可以通过编程方式调用此button的点击事件来触发转发器ItemCommand event
现在我面临的问题是我已经解雇了Button's click事件,但仍未发生ItemCommand事件。

知道怎么收拾这个骗局吗?

1 个答案:

答案 0 :(得分:1)

当单选按钮的ItemCommand被触发时,您可以调用转发器OnCheckedChanged事件。

我认为主要的问题是你不确定如何创建ItemCommand期望的参数,这是一个我相信会有所帮助的例子:

<强> ASPX:

<asp:Repeater ID="rptColors" runat="server" onitemcommand="rptColors_ItemCommand">
    <ItemTemplate>
        <asp:RadioButton ID="rdbColour" Text='<%# Eval("Color") %>' AutoPostBack="true" runat="server" OnCheckedChanged="Checked" /> <br />
    </ItemTemplate>
</asp:Repeater>

代码背后:

public class Colours
{
    public string Color { get; set; }
}

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            rptColors.DataSource = new List<Colours> { new Colours { Color = "Red" }, new Colours { Color = "Black" } };
            rptColors.DataBind();
        }
    }

    protected void Checked(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in rptColors.Items)
        {
            RadioButton rdbColour = item.FindControl("rdbColour") as RadioButton;
            if (rdbColour.Text.Equals((sender as RadioButton).Text))
            {
                CommandEventArgs commandArgs = new CommandEventArgs("SomeCommand", rdbColour.Text);
                RepeaterCommandEventArgs repeaterArgs = new RepeaterCommandEventArgs(item, rdbColour, commandArgs);
                rptColors_ItemCommand(rdbColour, repeaterArgs);
            }
        }
    }

    protected void rptColors_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        //Runs when you select the radio button in the repeater
        System.Diagnostics.Debugger.Break();
    }
}