2

これは非常に一般的な問題だと思いますが、まだエレガントな解決策は見つかりませんでした。

SQLServerSProcにバインドされたListViewまたはDetailsViewコントロールのいずれかを使用しているインスタンスがいくつかあります。私が抱えている問題は、列がNullのときに、UIに別の何かを表示したいというインスタンスが多数あることです。典型的な例は、LinkBut​​ton(ListViews内)またはHyperLinkField(DetailsViews内)としてレンダリングされるURL列がある場合です。NullURLが返された場合、src属性のないリンクをレンダリングしています。理想的には、このようなシナリオでは、このフィールドには何も表示したくありません。

これらの各ケースで、null値が返された場合、そのアイテムのレンダリングをスキップ/変更するにはどうすればよいですか?

前もって感謝します。

更新:実際にこれらを試す機会はありませんでしたが、すべての役立つ提案があります。私はリックスが一番答えるのが好きだと思いますが、他の人たちにもう一度感謝します...

4

3 に答える 3

2

マークアップ:

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

}
于 2009-09-29T19:02:06.050 に答える
1

テンプレート内で可視性にもバインド

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

警告:テストされていません。

<asp:HyperLink ... NavigateURL=<%# Eval("url") %> Visible=<%# Eval("url") != DBNull.Value %> />
于 2009-09-29T15:03:36.590 に答える
1

コードビハインドで、値をパラメーターとして受け取り、nullでない場合はリンクを返すメソッドを作成できると思います。または、リストビューのデータバインドイベントを利用して値を調べ、nullの場合はコントロールを非表示にすることもできます。どちらも非常に洗練された解決策ではありませんが、それはあなた次第だと思います。:)

于 2009-09-29T15:05:50.250 に答える