如何在转发器控制中查找控件?
我想启用或禁用’ParticipateBtn’,具体取决于EventStartDate。 我收到此错误:对象引用未设置为对象的实例。
开始日期:
<asp:Button runat="server" ID="ParticipateBtn" CommandName="Participate" CommandArgument='' Text="Participate" />
背后的代码……
//Code behind protected string CheckEnability(DateTime eventstartdate) { if (eventstartdate.Date < DateTime.Now.Date) { Button btn = (Button)Repeater1.FindControl("ParticipateBtn"); btn.Enabled = false; } return eventstartdate.ToString("yyyy-MM-dd"); }
您可以使用声明性语法切换按钮控件的enabled属性,并使用Eval方法format参数显示和格式化Event_Start_Date
。 这样就不需要CheckEnability方法了。
Start Date : <%# Eval("Event_Start_Date", "{0:yyyy-MM-dd}")%>
转发器中的控件在数据绑定之前不存在,然后ItemTemplate中的每个控件都存在一个项目 – 因此,如果绑定到包含3个项目的源,则将有3个ParticipateBtns。 在找到之前,您需要知道自己想要哪一个。 一旦你这样做,你可以这样做:
myRepeater.Items[1].FindControl("ParticipateBtn");
将属性OnItemDataBound="repeater_ItemDataBound"
到转发器。
然后在你的代码后面做:
void repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) { if (((DateTime)e.Item.DataItem).Date < DateTime.Now.Date) { Button participate = (Button)e.Item.FindControl("ParticipateBtn"); participate.Enabled = false; } }