我有一个转发器,它在preRender上绑定了物品。在Item模板中,每行都有一个复选框。这很好。
我试图在项目模板绑定后遍历项目模板中的所有复选框。有没有办法做到这一点?
谢谢!
答案 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)
我想到了一些不同的想法:
是否有特定需要在preRender中绑定此转发器?考虑在Page_Load事件之后使用更典型的绑定方式。
为什么要在转发器绑定后查找复选框?你可以做任何你需要做的事吗当使用这个事件绑定它时
:OnItemDataBound = “Repeater1_OnItemDataBound”
无论哪种方式,您都可以通过迭代重复查看转发器内部。请注意,如果复选框嵌套在转发器项内的其他元素中,则可能必须执行递归搜索
每个(Repeater1.Items中的RepeaterItem r) { CheckBox c = r.FindControl(“CheckBox1”)为CheckBox;
//做任何事 }