如何为重复项目设置不同的可见性属性
本文关键字:可见性 属性 设置 项目 | 更新日期: 2023-09-27 17:59:31
我有一个用户自定义控件,它有一个中继器,中继器有一个日历和一个按钮,可以切换每个重复日历的可见性。
<asp:Repeater ID="DateRepeater" runat="server"
DataSourceID="DateSource" OnItemCommand="DateRepeater_ItemCommand" OnPreRender="DateRepeater_PreRender">
<ItemTemplate>
<tr>
<td class="auto-style8">
<asp:ImageButton ID="CalendarButtonRef" runat="server" ImageUrl="~/img/calendar.png" OnClick="ShowCalendar_Click" />
<asp:Calendar ID = "RefCalendar" Width="176" runat="server" OnSelectionChanged="Calendar_SelChanged"></asp:Calendar>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
在代码隐藏中,我试图将点击的图像按钮定位在相同的重复项目上
protected void ShowCalendar_Click(object sender, ImageClickEventArgs e)
{
ImageButton btnSender = (ImageButton)sender;
String TragetCalendarID = btnSender.UniqueID.Remove(19) + "RefCalendar";
if (Page.IsPostBack)
{
Calendar TargetCalendar;
foreach (RepeaterItem rpt in DateRepeater.Items)
{
if (rpt.FindControl("RefCalendar").UniqueID == TragetCalendarID)
{
Trace.Write(rpt.FindControl("RefCalendar").UniqueID);
Trace.Write(rpt.FindControl("RefCalendar").GetType().ToString());
TargetCalendar = (Calendar)rpt.FindControl(TragetCalendarID);
if (TargetCalendar.Visible == false)
{
TargetCalendar.Visible = true;
}
}
else
{
TargetCalendar.Visible = false;
}
}
}
我设法转换了目标日历,在跟踪中,我将对象作为日历获取,但当我尝试获取可见性属性时,它表示对象引用未设置为对象的实例。
我的代码中缺少什么?
这就是函数的工作方式,如果使用FindControl通过对象ID引用对象,它就会工作。我试图将该对象强制转换为日历,并将其用作变量,但它并不是这样工作的。
这是工作代码
protected void ShowCalendar_Click(object sender, ImageClickEventArgs e)
{
ImageButton btnSender = (ImageButton)sender;
String TragetCalendarID = btnSender.UniqueID.Remove(19) + "RefCalendar";
if (Page.IsPostBack)
{
foreach (RepeaterItem rpt in DateRepeater.Items)
{
if (rpt.FindControl("RefCalendar").UniqueID == TragetCalendarID)
{
if (rpt.FindControl("RefCalendar").Visible == false)
{
rpt.FindControl("RefCalendar").Visible = true;
}
else
{
rpt.FindControl("RefCalendar").Visible = false;
}
}
}
}
}