- PR -

DataGridViewImageColumnの新しい行に、指定したイメージを表示する方法

1
投稿者投稿内容
goo〜glen
会議室デビュー日: 2007/02/04
投稿数: 14
投稿日時: 2007-02-05 14:59
皆さん、こんにちは。
標記についての質問です。よろしくお願いいたします。

現在、VB2005(WindowsForm)にて、メイン・サブ形式の受注管理システムのような物
を作成しています。
(個人的な趣味・勉強のためのシステムです。)
データベースは、Access(.mdb)で、メインは、.mdbの「注文テーブル」からの
DataTableをTextBox等に連結し、サブは、「注文明細テーブル」からのDataTable
をDataGridViewに連結し、データの入力を行いたいと思います。

このDataGridViewにて、「商品ID」を入力する際、DataGridViewに配した非連結
(非バインド列)のImageColumnをクリックすると、商品一覧の別ウィンドウが開き、
その中から商品を選択するシステムとしたいのですが、このImageColumnのImageとして
指定した虫眼鏡アイコン「search.ico」が、新しい行では表示されなく困っています。
(既定のエラー グラフィックと言うのでしょうか? 赤色の「×」印アイコンが表示
されてしまいます。)

自分なりに調べた結果、
「既定では、空のセルには既定のエラー グラフィックが表示される。」
「DefaultNewRowValue プロパティをオーバーライドすれば、別の既定イメージを表示
できる。」・・・・
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridviewimagecolumn(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridviewimagecell.defaultnewrowvalue(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/7tas5c80(VS.80).aspx
・・・・とのことで、
コード:
Public Class DGVImageColumn
    Inherits DataGridViewColumn

    Public Sub New()
        MyBase.New(New Image_Cell())
    End Sub
    Public Overrides Property CellTemplate() As DataGridViewCell
        Get
            Return MyBase.CellTemplate
        End Get
        Set(ByVal value As DataGridViewCell)
            MyBase.CellTemplate = value
        End Set
    End Property
End Class

Public Class Image_Cell
    Inherits DataGridViewImageCell

    Public Overrides ReadOnly Property DefaultNewRowValue() As Object
        Get
            Return Bitmap.FromFile("C:\search.ico")
        End Get
    End Property
End Class



(上記の場合、エラーは起こるが、新しい行には「search.ico」が表示されました。
でも、そもそも、列のプロパティウィンドウにImageプロパティが無いので、明らかに
間違いだと思います。)

また、
コード:
Private Sub dgvEx注文明細_RowsAdded(ByVal sender As System.Object, ByVal e _
  As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles _
  dgvEx注文明細.RowsAdded
    Me.dgvEx注文明細.Rows(Me.dgvEx注文明細Data.Rows.Count - 1).Cells(1).Value _ 
      = Bitmap.FromFile("C:\search.ico")
End Sub


(たぶん、邪道?とは思うのですが、この場合、エラーもなく表示させることはできた
のですが、一度別の行のImageColumnをクリックすると、新しい行の「search.ico」が
「×」印アイコンに戻ってしまいます。)

・・・・など、
いろいろ試してはいるのですが、なにぶんVB歴数ヶ月の初心者のため、未だ解決できな
いでいる状況です。

そこで、「DataGridViewImageColumnの新しい行に、指定した(できれば、Image
プロパティで指定した)イメージを表示する方法」ついてご教授よろしくお願い
いたします。
goo〜glen
会議室デビュー日: 2007/02/04
投稿数: 14
投稿日時: 2007-02-05 21:36
お騒がせしましたが、自己解決できました。

別アングルから検索したところ、
「Windows フォーム DataGridView コントロールのセルと列を、それぞれの動作と外観を拡張してカスタマイズする」
http://msdn2.microsoft.com/ja-jp/library/7fb61s43(VS.80).aspx
を見つけました。

最終的には、
コード:
Public Class DGVImageColumn
    Inherits DataGridViewImageColumn

    Public Sub New()
        Me.CellTemplate = New Image_Cell
    End Sub
End Class

Public Class Image_Cell
    Inherits DataGridViewImageCell

    Public Overrides ReadOnly Property DefaultNewRowValue() As Object
        Get
            Return Bitmap.FromFile("C:\search.ico")
        End Get
    End Property
End Class


で思い通りの表示となりました。

また、分からないことがあれば質問させていただくと思います。その時はよろしくお願いします。
ありがとうございました。


・・・・でも、この1週間、悩んでいたのは何だったのだろう・・・・


1

スキルアップ/キャリアアップ(JOB@IT)