- PR -

ASP.NET でHyperLinkColumnで値がない場合TEXTを表示しないようにするには

1
投稿者投稿内容
tkinu
会議室デビュー日: 2004/07/16
投稿数: 16
投稿日時: 2005-12-01 09:41
いつもお世話になっています。
全く初心者なので初歩的な話かもしれませんが・・・。

今以下のコードでフィールド『ファイル名2』の値を『str.jpg』にリンクさせよう
としています。この時『ファイル名2』がない場合(Nothing)があり、そのときは
『str.jpg』を表示しないようにしたいのですが、何か方法はありますでしょうか?

<asp:HyperLinkColumn HeaderText="ファイル2"
Text="<img src='img/str.jpg' border='0'>"
 DataNavigateUrlField="ファイル名2"
DataNavigateUrlFormatString="A/{0}" Target="_blank">
<HeaderStyle horizontalalign="Center" width="2em"></HeaderStyle>
<ItemStyle horizontalalign="Right"></ItemStyle>
</asp:HyperLinkColumn>

[ メッセージ編集済み 編集者: tkinu 編集日時 2005-12-01 10:44 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2005-12-01 17:23
こんばんは。
ItemDataBoundイベントを使ってみてはいかがでしょうか?
例えば以下のように・・・

コード:
    Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
        Dim hl As HyperLink
        hl = CType(e.Item.Cells.Item(0).Controls(0), HyperLink)
        If Server.HtmlDecode(hl.NavigateUrl).Trim = String.Empty Then
            hl.Text = String.Empty
        End If
    End Sub

tkinu
会議室デビュー日: 2004/07/16
投稿数: 16
投稿日時: 2005-12-01 19:20
かめたろさん、ありがとうございます。
もう少し教えてください。

いただいたコードのままで行くと
 hl = CType(e.Item.Cells.Item(0).Controls(0), HyperLink)
がエラーになります。
hiがHyperLinkオブジェクトだからなのだと思うのですが、これを
HyperLinkColumnに変えることはできるのでしょうか?
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2005-12-02 09:49
おはようございます。

まず、このイベントはグリッドのヘッダやフッタのバインド後にも発生しますので。
デバッグでe.Item.ItemIndexの値をみてみてください。
-1とか入ってきてませんか?-1の場合、スルーするようにするといいでしょう。

もう1点、こっちは大丈夫だと思いますが一応・・・
HyperLinkColumnはDataGrid上で何列目でしょうか?

 e.Item.Cells.Item(IDX).Controls(0)

IDXに列のインデックスを入れてください。1列目だったらゼロでいいんですが。

HyperLinkColumnはあくまで列の定義のはずです。
データバインドするとセルの中にHyperLinkコントロールができています。
だから、HyperLinkColumnにキャストするというのはちと違うかと・・・。
デバッグでCellの中身を見てみるとより理解ができると思います。
tkinu
会議室デビュー日: 2004/07/16
投稿数: 16
投稿日時: 2005-12-08 10:51
かめたろさん
遅くなってすいません。

ばっちり動きました!!すばらしいです。
ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)