2010-11-26 8 views
0

バインドされたグリッドビューのカスタム出力はどうすればできますか?私。私は<%#DataBinder.Eval(Container.DataItem、 "BoolField")%>から取得するとTrueを書き出すのではなく、データベースにブール値フィールドを持っています。グリッドビューで表示します。これは可能ですか?データグリッドの出力イメージ

答えて

1

すべての評価の第一は悪です。 evalとの解決策がありますが、私はそれを意図的にスキップします。

他にも2つの解決策があります。 ImageFieldを使用してデータをシェイプして、ImageFieldのDataImageUrlFieldプロパティで指定する必要がある特別なプロパティで、ピクチャの関連URLを渡すことができます。

Imageコントロールを使用してテンプレートフィールドを追加し、RowDataBoundイベントを処理するもう1つの方法は、イベント引数e.Row.DataItemから行のデータを取得することです。データソース内のアイテムの型にキャストし、ブール値を抽出します。次に、FindControlを使用してImageコントロールを取得し、そのプロパティを取得します。このような何か:

protected void Page_Load(object sender, EventArgs e) 
{ 
    gvTest.DataSource = new bool[] { true, false }; 
    gvTest.DataBind(); 
} 

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Image imgBool = (Image)e.Row.FindControl("imgBool"); 
     bool data = (bool)e.Row.DataItem; 
     if (data) 
     { 
      imgBool.ImageUrl = "/images/true.jpg"; 
      imgBool.AlternateText = "This is true"; 
     } 
     else 
     { 
      imgBool.ImageUrl = "/images/false.jpg"; 
      imgBool.AlternateText = "This is false"; 
     } 
    } 
}

これは多くの作業のように見えるが、あなたはタイプセーフな方法であなたのグリッド内のすべてのcolumsで動作するように、この同じハンドラを使用することができることを覚えているかもしれません。

+0

ありがとうございました。 – Sam

+0

私はEvalがなぜ悪いのですか? – Sam

+0

Evalは文字列ベースなので悪いです。グリッドをプロダクトのリストにバインドし、Evalを介してProductNameプロパティにいくつかの列をバインドしているとします。ただし、後でプロパティ名を「名前」に変更することにします。 evalを使用すると、コンパイル時のエラーは発生しません。データバインドイベントを介してバインドする場合は、 FindControlでも文字列が使用されていますが、FindControlは単一のファイル(マークアップとコードの背後にあるファイル)でスコープされており、コントロールの名前を変更すると関連するコードパスを確認する可能性が高くなります。 – Stilgar

0
+0

あなたは私が書いたものを読んだのか、それともグーグルグッドですか?私は画像のURLを出力しようとしていません。 – Sam

+0

img htmlタグにはsrc paramが必要です。それは画像のURLを指定します。 –

関連する問題