Microsoft Visual Studio 2008とSQL Server 2005を使用して、DataGridViewに画像を表示する方法について教えてください。
画像がない場合には特定の画像を表示することもできます。
データベースとの接続や画像の取得など、必要なコードの一部も示しているので、参考にしてください。
DataGridViewに画像を表示する方法
言語:Microsoft Visual Studio 2008
データベース:SQL Server 2005 非接続型のデータアクセスです。
現在,上記環境で.netを勉強し始めたところです。
そこでDataGridViewに画像を表示するプログラムを作成したいのですが、うまくいきません。
色々調べたのですが思うようにいかないので,アドバイスをいただければと思います。
<テーブル>
ID 画像
1 C\aaa.jpg
2 C\bbb.jpg
3 C\ccc.jpg
<画像がない時に表示する画像>
C\null.gif
自作したコードは下記の通りです。でもこれだと"null.gif"がセルに表示されるだけで、データ毎に
持っている画像を表示できません。コーディングがそうなので仕方がないのですが…
レコード毎に画像を表示する方法を教えて下さい。
Private Sub frmDataGridViewTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim strsql As String
Call DBConnect() '---DB接続
strsql = "SELECT ID, 画像 FROM テーブル ORDER BY ID"
Dim comm As SqlCommand = New SqlCommand(strsql, Con)
Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm)
dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
Dim ds As DataSet = New DataSet()
dataadapter.Fill(ds, "テーブル")
dgrview.DataSource = ds
dgrview.DataMember = "テーブル"
'******************************
'DataGridViewの列に画像を表示する
'******************************
Dim ImageColumn As New DataGridViewImageColumn()
ImageColumn.Name = "Image"
ImageColumn.ValuesAreIcons = False
ImageColumn.Image = New Bitmap("C\null.gif")
ImageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom
ImageColumn.Description = "イメージ"
dgrview.Columns.Add(ImageColumn)
Call Disconnect() '---DB切断
End Sub
DataGridViewのCellFormattingイベントにて
if e.ColumnIndex = 1 then
' 画像カラム
' データセットのテーブルを取得
dim tbl as DataTable = CType(CType(dgrview.DataSource,BindingSource) _
.DataSource, DataSet).Tables("テーブル")
' 表示する行を取得
dim row as DataRow = tbl.rows( e.RowIndex )
try
' イメージの取得 or 設置
dim bmp as Bitmap = Bitmap.FromFile( row("Image") )
e.Value = bmp
catch ex as Exception
end try
end if
といった具合にコードで画像を張ってやる必要があるでしょう
質問者
お礼
ありがとうございます。自己解決できました。
質問者
補足
お返事ありがとうございます。下記のようにプログラムを修正したのですが、エラーが発生してしまいます。
これはどう対処すればよろしいでしょうか?
<エラー内容>
型 'System.Data.DataSet' のオブジェクトを型 'System.Windows.Forms.BindingSource' にキャストできません。
'//CellFormattingイベントハンドラ
Private Sub dgrview_CellFormatting(ByVal sender As Object, _
ByVal e As DataGridViewCellFormattingEventArgs) _
Handles dgrview.CellFormatting
If e.ColumnIndex = 1 Then
' 画像カラム
' データセットのテーブルを取得
Dim tbl As DataTable = CType(CType(dgrview.DataSource, BindingSource).DataSource, DataSet).Tables("テーブル") ←ここでエラー発生
' 表示する行を取得
Dim row As DataRow = tbl.Rows(e.RowIndex)
Try
' イメージの取得 or 設置
Dim bmp As Bitmap = Bitmap.FromFile(row("Image"))
e.Value = bmp
Catch ex As Exception
End Try
End If
End Sub
お礼
ありがとうございます。自己解決できました。
補足
お返事ありがとうございます。下記のようにプログラムを修正したのですが、エラーが発生してしまいます。 これはどう対処すればよろしいでしょうか? <エラー内容> 型 'System.Data.DataSet' のオブジェクトを型 'System.Windows.Forms.BindingSource' にキャストできません。 '//CellFormattingイベントハンドラ Private Sub dgrview_CellFormatting(ByVal sender As Object, _ ByVal e As DataGridViewCellFormattingEventArgs) _ Handles dgrview.CellFormatting If e.ColumnIndex = 1 Then ' 画像カラム ' データセットのテーブルを取得 Dim tbl As DataTable = CType(CType(dgrview.DataSource, BindingSource).DataSource, DataSet).Tables("テーブル") ←ここでエラー発生 ' 表示する行を取得 Dim row As DataRow = tbl.Rows(e.RowIndex) Try ' イメージの取得 or 設置 Dim bmp As Bitmap = Bitmap.FromFile(row("Image")) e.Value = bmp Catch ex As Exception End Try End If End Sub