开发者

How can I loop through Items in the Item Template from an asp:Repeater?

I have a repeater, which is bound on preRender with items. In the Item template each row has a check box. This works fine.

I'm trying to loop through all开发者_如何学Go the checkboxes in the item template after it has been bound. Is there any way of doing this?


It sounds to me like you want to use the ItemDataBound event.

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

You will want to check the ItemType of the RepeaterItem so that you don't attempt to find the checkbox in Header/Footer/Seperator/Pager/Edit

Your event would look something along the lines of:

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

This event can be raised by adding the event in your code behind like so:

rptItems.ItemDataBound += new RepeaterItemEventHandler(rptItems_ItemDataBound);

Or by adding it to the control on the client:

onitemdatabound="rptItems_ItemDataBound"

Alternatively you can do as the others suggested and iterate over the RepeaterItems, however you still need to check the 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;
    }
}

You would want to do that in the Page PreRender, after the Repeater has been bound.


Try this.

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


A few different thoughts come to mind:

  1. Is there a specific need to bind this repeater in preRender? Consider using the more typical way of binding after Page_Load event.

  2. Why are you wanting to look for the checkboxes after the repeater has been bound? Can you do whatever you need to do while it is being bound by using this event:

    OnItemDataBound="Repeater1_OnItemDataBound"
    
  3. Either way, you can always go back and look inside the repeater by just iterating through it. Note that you might have to do a recursive search if the checkbox is nested in a different element inside the repeater item

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜