Как FindControls в контроллере повторителя? - PullRequest
2 голосов
/ 15 ноября 2009

Я хочу включить или отключить «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" />&nbsp;&nbsp;

    </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");
}

Ответы [ 3 ]

5 голосов
/ 15 ноября 2009

В ретрансляторе не существует элементов управления до тех пор, пока он не будет связан с данными, а затем каждый элемент в шаблоне ItemTample существует один раз для каждого элемента - поэтому, если вы связываетесь с источником с 3 элементами, будет 3 ParticipateBtns. Вы должны знать, какой из них вы хотите, прежде чем вы сможете найти его. Как только вы это сделаете, вы можете получить это так:

myRepeater.Items[1].FindControl("ParticipateBtn");
1 голос
/ 04 декабря 2009

Добавьте атрибут 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;              
    }      
}
1 голос
/ 15 ноября 2009

Вы можете переключать свойство enabled элемента управления кнопки с помощью декларативного синтаксиса, а также отображать и форматировать Event_Start_Date с помощью параметра формата методов Eval. Таким образом, метод 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" />&nbsp;&nbsp;
    </ItemTemplate>
    <FooterTemplate></FooterTemplate>
    <SeparatorTemplate><hr style="color:Silver; height:1px;" /></SeparatorTemplate>
</asp:Repeater>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...