如何从asp:Repeater循环项目模板中的项目

本文关键字:项目 循环 Repeater asp | 更新日期: 2023-09-27 17:58:46

我有一个中继器,它与项目绑定在preRender上。在项目模板中,每行都有一个复选框。这很好用。

绑定项目模板后,我试图循环浏览该模板中的所有复选框。有办法做到这一点吗?

如何从asp:Repeater循环项目模板中的项目

听起来你想使用ItemDataBound事件。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

您需要检查RepeaterItem的ItemType,这样您就不会试图在Header/Footer/Seperator/Pager/Edit 中找到复选框

你的活动看起来像是:

void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var checkBox = (CheckBox) e.Item.FindControl("ckbActive");
        //Do something with your checkbox...
        checkBox.Checked = true;
    }
}

可以通过在代码后面添加事件来引发此事件,如下所示:

rptItems.ItemDataBound += new RepeaterItemEventHandler(rptItems_ItemDataBound);

或者通过将其添加到客户端上的控件:

onitemdatabound="rptItems_ItemDataBound"

或者,您可以按照其他人的建议进行,并在RepeaterItems上进行迭代,但是您仍然需要检查项目类型。

foreach (RepeaterItem item in rptItems.Items)
{
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
    {
        var checkBox = (CheckBox)item.FindControl("ckbActive");
        //Do something with your checkbox...
        checkBox.Checked = true;
    }
}

在绑定中继器之后,您可能希望在页面预渲染中执行此操作。

试试这个。

for each (RepeaterItem ri in Repeater1.Items)
{
     CheckBox CheckBoxInRepeater = ri.FindControl("CheckBox1") as CheckBox;
    //do something with the checkbox
}
for (int item = 0; item < Repeater.Items.Count; item++)
{
   CheckBox box = Repeater.Items[item].FindControl("CheckBoxID") as CheckBox;
   if (box.Checked)
   {
      DoStuff();
   }
   else
   {
      DoOtherStuff();
   }
}

脑海中浮现出一些不同的想法:

  1. 是否有在preRender中绑定此中继器的特定需求?请考虑在Page_Load事件之后使用更典型的绑定方式。

  2. 为什么要在中继器绑定后查找复选框?当被使用此事件绑定时,你能做任何你需要做的事情吗

    OnItemDataBound="Repeater1_OnItemDataBound"
    
  3. 无论哪种方式,你都可以通过迭代来查看中继器内部。注意,如果复选框嵌套在中继器项目内的不同元素中,你可能需要进行递归搜索

    for each (RepeaterItem r in Repeater1.Items) {
        CheckBox c = r.FindControl("CheckBox1") as CheckBox;
        //DO whatever
    }