dポイントプレゼントキャンペーン実施中!

言語: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

A 回答 (1件)

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

補足日時:2008/10/02 09:04
    • good
    • 0
この回答へのお礼

ありがとうございます。自己解決できました。

お礼日時:2008/10/07 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!