DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データテーブルに画像を格納するには

環境/言語:[Windows XP SP2、VB2005]
分類:[.NET]

お世話になります、まったくの初心者なので間違った表現があるかもしれませんが、アドバイス頂けると助かります。VB2005です。

あるDataTableをバインドしているDataGridViewの列に画像を表示させたいと考えています。

「DataGridViewの列に画像を表示する」
http://dobon.net/vb/dotnet/datagridview/datagridviewimagecolumn.html

こちらの説明によると、「バイト配列、Image、Iconオブジェクトのデータをバインドすれば自動的にDataGridViewImageColumnが使用されます。」とありますが、DataTableに画像オブジェクトを入れる方法が見つかりません。

例えば、このようにやってみましたが、
いずれも画像がDataGridViewに表示されることはありませんでした。

’新規レコード追加時に、FileStreamで読み込んだ画像を入れようとした場合
Using fs As FileStream = File.OpenRead(imgfile)
Dim original As Image = Image.FromStream(fs, False, False)
newRow("IMAGE") = original
original.Dispose()
thumbnail.Dispose()
End Using

’読み込んだ画像を一旦ImageListに追加し、それを格納しようとした場合
DT.Rows(i)("Image") = New Bitmap(ImageList1.Images(i))


ほかにもいくつか試しましたが、System.Argument.Exceptionがでたり、
DataGridViewに表示する段階で、文字列型のデータをImage列にキャストすることはできない、という旨のメッセージがでてエラーになります。いろいろ検索してみましたが、VBでわかるような解決策は見つからずに今に至ります。アドバイス宜しくお願いいたします。


ちなみに今作っているプログラムの概要は下記のようなものです。
エクスプローラからフォームにJPGをドラッグ&ドロップすると、その画像のファイル名やパスの一覧がメモリ上のDataTableに追加されます。DataTableはDataGridViewにもバインドしているので、DataGridViewにも表示が反映されます。また、その画像ファイルをFileStreamで読み込んでImageListに格納し、ListViewのLargeIconとしてサムネイル表示するようになっています。このDataGridViewの列にも画像を表示したいというのが希望です。画像はどんどん増えていきます。

何卒宜しくお願いいたします。
> Dim original As Image = Image.FromStream(fs, False, False)
> newRow("IMAGE") = original
> original.Dispose()
> thumbnail.Dispose()

Image 型の列を使うなら、表示させたい Image を Dispose しちゃいけません。
また DataTable の列の型を Image 型に指定しておく必要があります。
> Image 型の列を使うなら、表示させたい Image を Dispose しちゃいけません。
> また DataTable の列の型を Image 型に指定しておく必要があります。

ありがとうございます!
お早い回答を頂きましてびっくりしました。

おっしゃるとおり型を指定したところ、希望通りに表示できるようになりました。

DT.Rows(i)("Image") = ImageList1.Images(i)

本当にどうもありがとうございました。
解決済みチェックを忘れておりました<(_ _)>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板