从Repeater获取Checkbox对象

时间:2017-06-19 22:46:39

标签: c# asp.net checkbox

我有一个转发器,我试图从LinkBut​​ton事件访问Checkbox控制器.Repeater控件只包含文字和链接按钮,但不包含复选框控件。

<asp:Repeater ID="rptTicketsInPerformance" OnItemDataBound="rptTicketsInPerformance_ItemBound" runat="server">
 <ItemTemplate>
   <asp:CheckBox ID="cbticketSelect" runat="server" />
   <asp:Literal ID="ltticketDescription" runat="server" />
 </ItemTemplate>
 <FooterTemplate>
   <div class="change-buttons">
   <asp:LinkButton ID="btDonate" runat="server" CssClass="button-primary" Text="Donate"  OnClick="donateButton_click" />
   <asp:HyperLink ID="hlCancel" runat="server" CssClass="button-primary close-reveal-modal" Text="Cancel" />
   </div>
 </FooterTemplate>
</asp:Repeater>

代码背后

    protected void donateButton_click(object sender, System.EventArgs e)
    {
        RepeaterItem items = ((sender as LinkButton).Parent as RepeaterItem);
        foreach(var itm in items.Controls)
        {
            if(itm is CheckBox)
            {
              // Do something here
            }
        }
     }

3 个答案:

答案 0 :(得分:0)

您应该注意Parent的{​​{1}}实际上是sender,而不是转发器项目。

所以,你应该指向

Repeater

然后迭代这些,找到sender.Parent.Items

答案 1 :(得分:0)

请尝试FindControl

protected void donateButton_click(object sender, System.EventArgs e)
{
    RepeaterItem items = ((sender as LinkButton).Parent as RepeaterItem);
    foreach (RepeaterItem itm in items.Controls)
    {
        CheckBox chk = (CheckBox)itm.FindControl("cbticketSelect");

        if (chk.Checked)
        {
            Lable1.Text = "Do something ";
            // Do something here
        }
    }
}

答案 2 :(得分:0)

您可以循环所有Repeater项目并使用FindControl在每个项目中找到CheckBox。

protected void donateButton_Click(object sender, EventArgs e)
{
    string checkedBoxes = "";

    foreach (RepeaterItem item in rptTicketsInPerformance.Items)
    {
        CheckBox cb = item.FindControl("cbticketSelect") as CheckBox;
        checkedBoxes += cb.Checked.ToString() + ", ";
    }

    Label1.Text = checkedBoxes;
}