我想启用或禁用'ParticipateBtn',具体取决于EventStartDate。我收到此错误:对象引用未设置为对象的实例。
开始日期 : <%#CheckEnability((DateTime)Eval(“Event_Start_Date”))%>
<asp:Button runat="server"
ID="ParticipateBtn"
CommandName="Participate"
CommandArgument='<%# Eval("Event_Id") + "|" + Eval("Event_Name") + "|" + Eval("Volume") + "|" + Eval("Tournament_Id") %>'
Text="Participate" />
</ItemTemplate>
<FooterTemplate></FooterTemplate>
<SeparatorTemplate>
<hr style="color:Silver; height:1px;" />
</SeparatorTemplate>
</asp:Repeater>
背后的代码......
//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");
}
答案 0 :(得分:5)
转发器中的控件在数据绑定之前不存在,然后每个项目的ItemTemplate中的每个控件都存在一次 - 所以如果绑定到包含3个项目的源,则会有3个ParticipateBtns。在找到之前,您需要知道自己想要哪一个。一旦你这样做,你就可以这样做:
myRepeater.Items[1].FindControl("ParticipateBtn");
答案 1 :(得分:1)
您可以使用声明性语法切换按钮控件的enabled属性,并使用Eval方法格式参数显示和格式化Event_Start_Date
。这样就不需要CheckEnability方法了。
<asp:Repeater>
<table>
<tr>
<td align="right" style=" font-weight:bold">Start Date : </td>
<td><%# Eval("Event_Start_Date", "{0:yyyy-MM-dd}")%></td>
</tr>
<asp:Button ID="ParticipateBtn" Enabled='<%# Convert.ToDateTime(Eval("Event_Start_Date") ) < DateTime.Now %>' CommandName="Participate" CommandArgument='<%# Eval("Event_Id") + "|" + Eval("Event_Name") + "|" + Eval("Volume") + "|" + Eval("Tournament_Id") %>' runat="server" Text="Participate" />
</ItemTemplate>
<FooterTemplate></FooterTemplate>
<SeparatorTemplate><hr style="color:Silver; height:1px;" /></SeparatorTemplate>
</asp:Repeater>
答案 2 :(得分:1)
将属性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;
}
}