C # Как установить текст метки в виде списка? - PullRequest
0 голосов
/ 02 октября 2009

В моем коде позади я хочу установить текст метки. Вот код aspx:

<asp:ListView ID="lstRegistrations" runat="server">
    <LayoutTemplate>
        <table cellspacing="0" cellpadding="0" border="0">
            <tr>
                <th width="80" align="left">
                    <asp:Label ID="lblDate" runat="server" Text="<%= GetTranslatedText(7726) %>" />
                </th>
                <th width="150" align="left">
                    <asp:Label ID="lblAuthor" runat="server" Text="<%= GetTranslatedText(7728) %>"  />
                </th>
                <th width="290" align="left">
                    <asp:Label ID="lblRegistration" runat="server" Text="<%= GetTranslatedText(6671) %>"  />
                </th>
                <th width="60" align="left">
                    <asp:Label ID="lblVersion" runat="server" Text="<%= GetTranslatedText(13) %>"  />
                </th>
            </tr>
            <tr>
                <td colspan="4" style="height: 3px;"></td>
            </tr>
            <tr runat="server" id="itemPlaceholder"></tr>
        </table>
    </LayoutTemplate>

    <ItemTemplate>
        <tr style="background-color:#FFFFD0;">
            <td style="padding-left: 3px">
                <%# ((DateTime)Eval("Date")).ToString("d-M-yyyy") %>
            </td>
            <td>
                <%# GetStaffNameById((int)Eval("StaffID")) %>
            </td>
            <td>
               <%# Server.HtmlEncode(Eval("Text").ToString())%> 
            </td>
            <td>
                <%# Eval("Version") %>
            </td>
        </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <tr style="background-color: #C89292">
            <td style="padding-left: 3px">
                <%# ((DateTime)Eval("Date")).ToString("d-M-yyyy") %>
            </td>
            <td> 
                <%# GetStaffNameById((int)Eval("StaffID")) %>
            </td>
            <td>
               <%# Server.HtmlEncode( Eval("Text").ToString() )%> 
            </td>
            <td>
                <%# Eval("Version") %>
            </td>
        </tr>
    </AlternatingItemTemplate>
</asp:ListView>

Вверху, в layoutTemplate, у меня есть 4 метки, текстовое свойство которых я хочу изменить. Я пытался получить доступ к меткам с помощью метода lstRegistrations.FindControl (), но этот метод не находит метки. Я также пробовал метод Page.FindControl (), но этот метод также не может найти метки. Затем я подумал, что создаю метод и вызываю его на своей странице aspx (см. Мой код). Я не получаю никаких ошибок, но я не вижу никакого текста!

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 02 октября 2009

Как вы хотите указать значение для метки? Когда он загружается? Когда пользователь выбирает какое-то действие?

Вы можете реализовать событие ItemDataBound и для каждой строки обращаться к метке, чтобы установить ее текст ...

    protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
      if (e.Item.ItemType == ListViewItemType.DataItem)
      {
        Label someLabel = (Label)e.Item.FindControl("MyLabel");
        someLabel.Text = "Hurray!";
      }
    }

Ваш FindControl () никогда не будет работать, потому что у вас есть набор меток на строку. Форма какой строки должен FindControl получить метку? Сначала вам нужно добраться до ряда, а затем получить необходимый ярлык.

0 голосов
/ 02 октября 2009

Вы можете:

  1. Попытка получить ссылку на сами элементы управления, а не полагаться на ListView: Доступ к элементам управления в шаблонах ListView .
  2. Свяжите фиктивный объект с ListView, затем используйте FindControl так, как вы изначально предполагали: Asp.net ListView - DataBinding , а также Как получить доступ к веб-элементам управления из функции ( ищите внизу обе ссылки).

Проблема в том, что элементы в LayoutTemplate недоступны до тех пор, пока DataBind () не будет вызван для ListView. Таким образом, FindControl возвращает ноль до этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...