で昨日の続きでDataGridImageColumnを作っているわけですが、ちょっと悩みます。
今作っているのはファイル名を与えられたらそのImageを表示するというもので、たとえばDBにファイルへのフルパスを指定されていた場合それを読みとって表示します。
ColumnStyleはあくまで描画エンジン?なので、データ自体は持ちません。
どうやってデータを取得するかというとDataGridColumnStyle.GetColumnValueAtRowというメソッドで現在描画すべきセルのデータを取得できます。今回の場合画像へのパスですね。
これをDataGridImageColumn.Paintで描画するのですが、Paintの中でファイルから画像を読み取ってもそれをおいておく場所が無いんです。
もしも、DataSetに書き戻しちゃうとパスが消えちゃうし。
そうすると、セルを再描画するたびにファイルからデータを読み取ることになってしまって「効率はどうなの?」って思ってしまいます。
ただこのPaintメソッドは描画するのに必要な分だけしか呼び出されないので、1万行ある場合には必ずファイルから読み取る方が効率はかなり良いんですよね。
全データメモリに格納するなんて難しくなるだろうし。
でも、毎回ファイルから読み取るのも抵抗があるし、ASP.Netで使うSystem.Web.Caching.Cacheのような物があれば良いんですが、、、