DataGrid:表示データによってフォントを変更するには?

解決


hana  2008-09-22 15:31:32  No: 145197  IP: 192.*.*.*

はじめまして、hanaと申します。

以前は別の掲示板でお世話になっていたのですが、
その掲示板が(会社の)フィルターのせいで見れなくなってしまったので
こちらの掲示板に書き込ませて頂きました。

どうぞよろしくお願いします。

<開発環境>
言語:VB
DB:oracle 10g
Webフォーム

DataGridに表示するデータを、select文にてDBから取得しています。取得したデータによってDataGridのフォントを(セル単位で)太字にしたいのですが、方法が分かりません。

例)「select 弁当名, 価格 from 弁当表」で、
1.から揚げ弁当, 550
2.野菜炒め弁当, 400
3.ハンバーグ弁当, 700
4.コロッケ弁当, 450
とデータを取得した場合、
価格が500円以上の弁当名を太字でDataGridに表示したいです。
この場合ですと、から揚げ弁当とハンバーグ弁当を太字で表示したいです。

現在の、「DBからデータを取得→DataGridで表示」の流れは以下になっています。
1)Dim list As New BentoCollectionを定義
2)select文でデータ取得
3)取得データをそれぞれ定義の変数に代入
  Dim bento As New Bento
  bento.name = rdr.GetString(0)
  bento.price = rdr.GetDecimal(1)
4)1)のlistに追加
  list.Add(bento)
5)データがなくなるまで3)、4)を繰り返す
6)DGrid_Bento.Datasourse = listを指定

少々長くなってしまいましたが、
解決方法をご存知の方がいらっしゃいましたら、ご教授お願い致します。

編集 削除
aetos  2008-09-22 16:09:25  No: 145198  IP: 192.*.*.*

DataGridColumnStyle の派生クラス(編集が必要なら DataGridTextBoxColumn クラス)の派生クラスを作って、OnPaint で自前で描画します。
DataGridColumnStyle から、同じ行の他の列の値を取得するには、OnPaint の引数を使って、

source.GetItemProperties()[ 対象の列名 ].GetValue( source.List[ rowNum ] )

とやればいいはずです。

編集 削除
aetos  2008-09-22 16:10:17  No: 145199  IP: 192.*.*.*

日本語変ですね。

> DataGridColumnStyle の派生クラス(編集が必要なら DataGridTextBoxColumn クラス)の派生クラスを作って、OnPaint で自前で描画します。

正しくは

DataGridColumnStyle の派生クラス(編集が必要なら DataGridTextBoxColumn の派生クラス)を作って、OnPaint で自前で描画します。

です。

編集 削除
aetos  2008-09-22 16:11:07  No: 145200  IP: 192.*.*.*

って Web でしたかーorz
俺のは Windows Forms の DataGrid の方法ですね。
たぶん Web では方法が違うと思うんですが、俺は Web の方を使ったことがないのでわかりません。ごめんなさい。

編集 削除
hana  2008-09-24 09:39:40  No: 145201  IP: 192.*.*.*

最初の質問内容の条件(500円以上を太字)とは異なりますが、
以下のコードで解決しました。

※700円の弁当名を太字にする場合
DataGridのItemDataBoundイベントで
If e.Item.Cell(1).Text.IndexOf("700") <> -1 Then
   e.Item.Cell(0).Font.Bold = True
End If
を実行させました。

まさか、自己解決できると思っていなかったので
自分でもビックリです。
ちょっとは成長しているのかな?

「この解決策ではここに問題があるよ」
と言う方がいらっしゃいましたら、ご連絡お願いします。

なんとな〜くできてしまったもので…。

編集 削除