SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

DataGridViewコントロールを操作する101の方法

DataGridViewコントロールの取り扱い方法まとめ

ダウンロード ソースコード (126.6 KB)

セルにコンボボックスを表示する

 セルにテキストを表示するだけでなく、ドロップダウンリストボックスを表示して、あらかじめ決められた値をリストから選択できるようにしたいことがあります。その場合は、目的の列のセルにコンボボックスを追加する必要があります。次の例では、DataGridViewコントロールの5番目の列にComboBoxコントロールを追加しています。

'---add columns to the DataGridView control---
DataGridView1.Columns.Add("ID", "Product ID")
DataGridView1.Columns.Add("Name", "Product Name")
DataGridView1.Columns.Add("Description", "Description")
DataGridView1.Columns.Add("Price", "Price")

'---create a new bindingsource control---
Dim bindingsource As New BindingSource

'---add the items into the control---
bindingsource.Add("Type A")
bindingsource.Add("Type B")
bindingsource.Add("Type C")

'---create a combobox column---
Dim comboBoxCol As New DataGridViewComboBoxColumn

'---set the header---
comboBoxCol.HeaderText = "Types"

'---data bind it---
comboBoxCol.DataSource = bindingsource

'---add a combobox column to the DataGridView control---
DataGridView1.Columns.Add(comboBoxCol)

 この出力結果を図11に示します。

図11 DataGridViewのセルにComboBoxを追加する
図11 DataGridViewのセルにComboBoxを追加する

 上の例では、項目リストを含んだBindingSourceコントロールを、DataGridViewコントロール内のDataGridViewComboBoxColumnコントロールにバインドする方法を示しましたが、DataGridViewComboBoxColumnコントロールに項目を直接追加する方法もあります。

'---adding columns---
DataGridView1.Columns.Add("ID", "Product ID")
DataGridView1.Columns.Add("Name", "Product Name")
DataGridView1.Columns.Add("Description", "Description")
DataGridView1.Columns.Add("Price", "Price")

'---add a combobox column---
Dim comboBoxCol As New DataGridViewComboBoxColumn

'---set the header text---
comboBoxCol.HeaderText = "Types"

'---add items to it---
comboBoxCol.Items.Add("Type A")
comboBoxCol.Items.Add("Type B")
comboBoxCol.Items.Add("Type C")

DataGridView1.Columns.Add(comboBoxCol)

 後者の方がより柔軟であり、この方法で実装していると、実行時にユーザーがドロップダウンリストに新しい項目を追加できます(詳細については次のセクションを参照)。ComboBoxコントロールにデータソースをバインドすると、新しい項目を実行時に追加できなくなります。

DataGridViewComboBoxColumnコントロールに項目を追加する

 前のセクションでは、DataGridViewコントロール内のセルにComboBoxコントロールを表示する方法を示しました。ComboBoxコントロールにユーザーが新しい項目を挿入できるようにしたいことがあります。そのためには、少し準備が必要です。

 まず、DataGridViewコントロールのEditingControlShowingイベントを処理します。このイベントは、ユーザーがComboBoxコントロールを編集しようとしたときに発生します。

Private Sub DataGridView1_EditingControlShowing( _
   ByVal sender As Object, _
   ByVal e As System.Windows.Forms. _
      DataGridViewEditingControlShowingEventArgs) _
   Handles DataGridView1.EditingControlShowing

    Dim comboBoxColumn As DataGridViewComboBoxColumn = _
       DataGridView1.Columns(4)
    If (DataGridView1.CurrentCellAddress.X = _
       comboBoxColumn.DisplayIndex) Then
        Dim cb As ComboBox = e.Control
        If (cb IsNot Nothing) Then
            cb.DropDownStyle = ComboBoxStyle.DropDown
        End If
    End If
End Sub

 ここでのポイントは、編集対象のセルがComboBoxを含むセルかどうかを確認することです。ComboBoxを含んでいる場合は、ComboBoxコントロールのドロップダウンスタイルを「DropDown」に設定して、ユーザーによる追加入力ができるようにします。

 次に、DataGridViewコントロールのCellValidatingイベントを処理します。このイベントはユーザーが入力を終了してセルを離れたときに発生します。

Private Sub DataGridView1_CellValidating( _
   ByVal sender As Object, _
   ByVal e As System.Windows.Forms. _
   DataGridViewCellValidatingEventArgs) _
   Handles DataGridView1.CellValidating

    Dim comboBoxColumn As DataGridViewComboBoxColumn = _
       DataGridView1.Columns(4)
    If (e.ColumnIndex = comboBoxColumn.DisplayIndex) Then
        If (Not comboBoxColumn.Items.Contains( _
           e.FormattedValue)) Then
            comboBoxColumn.Items.Add(e.FormattedValue)
        End If
    End If
End Sub

 ここでは、通常のチェックを行った後に、新しく入力された項目をComboBoxに追加します。図12を見ると、ComboBoxには最初3個の項目があります。ここにユーザーが新しい項目(例えば、「Type D」)を入力でき、それがリストに追加されます。実際に操作した行より前または後ろの行でも、ComboBoxコントロールの項目数が4になることに注意してください。

図12 ユーザーが新しい項目をComboBoxコントロールに追加できる
図12 ユーザーが新しい項目をComboBoxコントロールに追加できる

行/列をロックする

 行のReadOnlyプロパティをTrueに設定すると、特定の行が変更されないようにロックできます。

'---first row is readonly---
DataGridView1.Rows(0).ReadOnly = True

 同様に、特定の列に属するセルをロックすることもできます。

'---first column is readonly---
DataGridView1.Columns(0).ReadOnly = True

 ReadOnlyプロパティをTrueに設定するとセルの値は変更されなくなりますが、行の削除ができなくなるわけではありません。

 必要ならDataGridViewコントロール全体をロックすることもできます。

'---entire grid is readonly---
DataGridView1.ReadOnly = True

列を非表示にする

 実行時に列のVisibleプロパティをFalseに設定することで、特定の列を非表示にできます。

'---hides the second column---
DataGridView1.Columns(1).Visible = False

 図13に、列を非表示にしたDataGridViewの例を示します。奥はすべての列を表示した状態で、手前は2番目の列(CompanyName列)を非表示にした状態です。

図13 列を非表示にする前と後のDataGridView
図13 列を非表示にする前と後のDataGridView

次のページ
ユーザーの編集を検証する

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1120 2007/03/28 07:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー