如何从asp:Repeater循环项目模板中的项目
本文关键字:项目 循环 Repeater asp | 更新日期: 2023-09-27 17:58:46
我有一个中继器,它与项目绑定在preRender上。在项目模板中,每行都有一个复选框。这很好用。
绑定项目模板后,我试图循环浏览该模板中的所有复选框。有办法做到这一点吗?
听起来你想使用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();
}
}
脑海中浮现出一些不同的想法:
-
是否有在preRender中绑定此中继器的特定需求?请考虑在Page_Load事件之后使用更典型的绑定方式。
-
为什么要在中继器绑定后查找复选框?当被使用此事件绑定时,你能做任何你需要做的事情吗
OnItemDataBound="Repeater1_OnItemDataBound"
-
无论哪种方式,你都可以通过迭代来查看中继器内部。注意,如果复选框嵌套在中继器项目内的不同元素中,你可能需要进行递归搜索
for each (RepeaterItem r in Repeater1.Items) { CheckBox c = r.FindControl("CheckBox1") as CheckBox; //DO whatever }