ASP.NET Repeater - 循环项目模板中的项目

时间:2011-06-08 15:45:02

标签: c# asp.net repeater

我有一个转发器,它在preRender上绑定了物品。在Item模板中,每行都有一个复选框。这很好。

我试图在项目模板绑定后遍历项目模板中的所有复选框。有没有办法做到这一点?

谢谢!

4 个答案:

答案 0 :(得分:43)

听起来我想要使用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,但是你仍然需要检查itemtype。

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;
    }
}

在中继器绑定后,您可能希望在 Page PreRender 中执行此操作。

答案 1 :(得分:16)

试试这个。

foreach (RepeaterItem ri in Repeater1.Items)
{
     if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
     {
         CheckBox checkBoxInRepeater = ri.FindControl("CheckBox1") as CheckBox;

         //do something with the checkbox
     }
}

答案 2 :(得分:3)

for (int item = 0; item < Repeater.Items.Count; item++)
{
   CheckBox box = Repeater.Items[item].FindControl("CheckBoxID") as CheckBox;
   if (box.Checked)
   {
      DoStuff();
   }
   else
   {
      DoOtherStuff();
   }
}

答案 3 :(得分:1)

我想到了一些不同的想法:

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

  2. 为什么要在转发器绑定后查找复选框?你可以做任何你需要做的事吗使用这个事件绑定它时

    OnItemDataBound = “Repeater1_OnItemDataBound”

  3. 无论哪种方式,您都可以通过迭代重复查看转发器内部。请注意,如果复选框嵌套在转发器项内的其他元素中,则可能必须执行递归搜索

    每个

    (Repeater1.Items中的RepeaterItem r) {    CheckBox c = r.FindControl(“CheckBox1”)为CheckBox;

    //做任何事  }