Listview / DetailsView: скрыть пустое поле

Я полагаю, что это довольно распространенная проблема, но пока я не нашел элегантного решения.

У меня есть несколько экземпляров, где у меня есть элемент управления ListView или DetailsView, привязанный к SQL Server SProc. У меня проблема в том, что во многих случаях, когда столбец имеет значение Null, я хочу отобразить что-то другое в пользовательском интерфейсе. Типичным примером может быть столбец URL-адреса, который отображается как LinkButton (в ListViews) или как HyperLinkField (в DetailsViews) - когда возвращается нулевой URL-адрес, я визуализирую ссылки без атрибута src. В идеале в таком сценарии я не хочу ничего отображать в этом поле.

В каждом из этих случаев, когда возвращается нулевое значение, как я могу пропустить / изменить визуализацию этого элемента?

Заранее спасибо.

Обновление: у меня не было возможности попробовать их, но есть все полезные предложения. Думаю, мне нравится, что Рикс отвечает лучше всех, но еще раз спасибо остальным ...


person CJM    schedule 29.09.2009    source источник


Ответы (3)


Разметка:

 <asp:HyperLink id="whatever" runat="server" 
  NavigateURL='<%# Eval("url") %>' Visible='<%# IsVisible(Eval("url")) %>' />

Код позади:

protected bool IsVisible(object obj)
{
     bool result = false;

     string url = (string)obj;
     if(!string.IsNullOrEmpty(url))
     {
          result = true;
     }

     return result;

}
person rick schott    schedule 29.09.2009

В шаблоне привяжите также к видимости

<asp:HyperLink ... NavigateURL=<%# Eval("url") %> Visible=<%# Eval("url") != null %> />

Предупреждение: не проверено, также может быть

<asp:HyperLink ... NavigateURL=<%# Eval("url") %> Visible=<%# Eval("url") != DBNull.Value %> />
person Arthur    schedule 29.09.2009

Я полагаю, вы могли бы создать в своем коде метод, который принимает значение в качестве параметра и возвращает ссылку, если она не равна нулю. Или вы можете подключиться к событию с привязкой к данным в Listview, изучить значение и скрыть элемент управления, если оно равно нулю. Не очень изящные решения, но, думаю, решать вам. :)

person Jakob Gade    schedule 29.09.2009