如何为重复项设置不同的可见性属性

时间:2015-06-24 14:27:33

标签: c# asp.net

我有一个用户自定义控件,其中包含一个日历和一个按钮,可以切换每个重复日历的可见性。

    <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;

                }
            }
        } 

我设法投射目标日历,并且在跟踪中我将对象作为日历,但是当我尝试获取可见性属性时,它表示对象引用未设置为对象的实例。

我的代码中缺少什么?

1 个答案:

答案 0 :(得分:0)

这就是函数的工作方式,如果通过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;
                }
            }
        }
    }
}