- - PR -
DataGridViewに画像を表示
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-10-02 11:36
言語:Microsoft Visual Studio 2008
データベース:SQL Server 2005 非接続型のデータアクセスです。 現在,上記環境で.netを勉強し始めたところです。 そこでDataGridViewに画像を表示するプログラムを作成したいのですが、うまくいきません。 色々調べたのですが思うようにいかないので,アドバイスをいただければと思います。 <テーブル> ID 画像 1 C\\aaa.jpg 2 C\\bbb.jpg 3 C\\ccc.jpg 自作したコードは下記の通りです。 ですが、ここでエラーのところで下記のエラーが出てしまいます。 エラー:縮小変換しないで呼び出される、アクセス可能な 'New' がないため、オーバーロードの解決に失敗しました Dim image As New Bitmap(dgv("画像", e.RowIndex).Value)のdgv("画像", e.RowIndex).Valueを 一度変数に入れるとこのエラーは消えるのですが、何故だかわかりません。 Private Sub frmDataGridViewTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim strsql As String Call DBConnect() '---DB接続 '*** DataSet *** 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 '//CellFormattingイベントハンドラ Private Sub dgrview_CellFormatting(ByVal sender As Object, _ ByVal e As DataGridViewCellFormattingEventArgs) _ Handles dgrview.CellFormatting Dim dgv As DataGridView = CType(sender, DataGridView) If dgv.Columns(e.ColumnIndex).Name = "Image" AndAlso e.RowIndex >= 0 Then Dim image As New Bitmap(dgv("画像", e.RowIndex).Value) ←ここでエラー e.Value = image e.FormattingApplied = True End If End Sub | ||||
|
投稿日時: 2008-10-02 12:03
dgv("画像", e.RowIndex).Value が Object 型だからです。 dgv("画像", e.RowIndex) で得られるのは DataGridViewCell 型で、その Value プロパティは Object 型を返します。 DataGridViewCell.Value プロパティ (microsoft.com) Bitmap クラスのコンストラクタには Object 型を得るものがないので、そのままですとエラーになります。 一度変数に入れるとエラーが消えるのは、暗黙のキャスト(たぶん string 型の変数に入れているのでしょう)によって型が変換されるからです。 Bitmap コンストラクタ (microsoft.com) dgv("画像", e.RowIndex).Value.ToString とでもすれば動くかもしれません。 でもファイル名を与えると、GC が回収するまでファイルがずっと使用中になったままになると思いますが、それは大丈夫ですか? _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2008-10-02 13:12
なるほど。dgv("画像", e.RowIndex) で得られるのは DataGridViewCell 型というのにたどりついていませんでした。
結果として、 dgv("画像", e.RowIndex).Value.ToString と変更するとことでうまくいきました。 ですが、 >でもファイル名を与えると、GC が回収するまでファイルがずっと使用中になったまま>になると思いますが、それは大丈夫ですか? についてはどうすれば解決できるでしょうか? | ||||
|
投稿日時: 2008-10-02 14:29
こちらが参考になると思います。 http://jeanne.wankuma.com/tips/vb.net/image/picturebox.html サンプルはPictureBox.Imageプロパティへ設定していますが、かわりに e.Value へ設定してあげればよいでしょう。 | ||||
|
投稿日時: 2008-10-02 14:44
ありがとうございました。
解決できました。 |
1