Как изменить значения элементов ListView в Codebehind - PullRequest
0 голосов
/ 04 апреля 2010

Я пытаюсь создать таблицу с Listview, и одно из полей, которые я использую, должно показывать гиперссылку на более подробное представление показанных данных, как я хочу это сделать, используя FindControl на идентификаторе этого элемента и последующем изменении значения на гиперссылку страницы подробного просмотра с прикрепленной строкой запроса, проблема в том, что я понятия не имею, как повторно вставить эти данные обратно в поле списка, которое выглядит примерно так :

                    <ItemTemplate>
                    <td>
                    <asp:Label ID="ViewLinkLabel" runat="server" 
                        Text='[insert Link Here]' />
                    </td>
                    </ItemTemplate>

Пожалуйста, имейте в виду, что я все еще любитель ASP.net, и если что-то из этого кажется слишком запутанным, когда сделать это намного проще, о чем я не знаю.

Спасибо

Ответы [ 3 ]

1 голос
/ 04 апреля 2010

У меня недостаточно репутации, чтобы оставлять комментарии или редактировать посты, но у примера кода в посте Ричарда Харрисона есть некоторые проблемы:

  protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)                  
  {
        try
        {
            HyperLink ViewLinkLabel = (HyperLink)e.Item.FindControl("ViewLinkLabel");
            ViewLinkLabel.NavigateUrl = "http://www.example.com/";
        }
        catch
        {

        }
    }

В идеале вам также следует проверить, имеет ли ViewLinkLabel значение null, прежде чем использовать его.1004 *

Также предполагается, что элемент управления ViewLinkLabel является HyperLink, но в данном вопросе это фактически элемент управления Label.

0 голосов
/ 04 апреля 2010

Да, вы сделали несколько ошибок здесь. Прежде всего, если вы собираетесь сделать это, вы бы хотели использовать <asp:Hyperlink> вместо <asp:Label>.

Также вместо того, чтобы пытаться найти элемент управления в коде и установить его значение, вы, вероятно, будете использовать оператор разметки в разметке.

Это будет выглядеть так:

<ItemTemplate>
  <td>
    <asp:HyperLink ID="ViewLinkLabel" runat="server" Text="More details"
         NavigateUrl='<%# string.Format("~/DetailPage.aspx?ID={0}", Eval("RecordID")) %>' />
  </td> 
</ItemTemplate>

Шаблон, на который вы ссылаетесь, называется мастер / деталь. Это означает, что у вас есть основной список, который позволяет углубиться в детали. На официальном веб-сайте asp.net есть несколько учебных пособий, объясняющих различные способы настройки этого параметра:

Они были написаны до выхода asp.net 3.5, поэтому они не охватывают элемент управления listview, но объяснят вам, как настроить master / detail, а также как работает синтаксис привязки данных. Если вы пройдете первые 25 руководств в этой серии доступа к данным, у вас будет достаточно четкое представление о том, как работает множество функций asp.net. Используемая им технология доступа к данным немного устарела, но с ней легко начать.

0 голосов
/ 04 апреля 2010

Измените метку на гиперссылку и используйте событие OnItemDataBound в просмотре списка, чтобы изменить элемент: что-то вроде.

  protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)                  
  {
        try
        {
            HyperLink ViewLinkLabel = (HyperLink)e.Item.FindControl("ViewLinkLabel");
            lnkEvent.NavigateUrl += "http://required.url;
        }
        catch
        {

        }
    }

Событие ListView.ItemDataBound для более подробной информации

...