DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのComboBoxについて

環境/言語:[WindowsXP SP2,VB2005]
分類:[.NET]

はじめまして、VB6.0から最近VB2005へ開発環境を移行しまして
躓いてることがあります。

良くあるプログラムの例ですが
ComboBoxA(以下A) ComboBoxB(以下B) とフォームにあり
Aの値が1ならばBは内容がa〜f
Aの値が2ならばBは内容がg〜k
Aが変更された場合Bの内容が変更されるというシンプルな物です。

上記の動きをDataGridViewで実現させたいのですが、うまくいきません。
こちらの
http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
を参考にさせて頂きまして、ComboBoxカラムに表示はできるようになったのですが、
上記の例をそのまま使用しますと、列全てに変更が加わりますので思ったようにできません。

どなたか、このような動きを実現できる方法をお教えください。
ヒントになるようなサイトでも十分ですので宜しくお願いいたします。
DataGridViewでセルの編集に使われているテキストボックスを取得する
http://dobon.net/vb/dotnet/datagridview/editingcontrol.html

と同じようにして、ComboBoxBにコンボボックスが表示された時にコンボボックスの内容を変更するという方法でできたような気がするのですが、いかがでしょうか?
2007/12/08(Sat) 13:20:18 編集(投稿者)
2007/12/08(Sat) 13:19:14 編集(投稿者)

管理人様
早速のご回答ありがとうございます。

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
'表示されているコントロールがDataGridViewComboBoxEditingControlか調べる
If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
Dim dgv As DataGridView = CType(sender, DataGridView)

'編集のために表示されているコントロールを取得
Dim tb As DataGridViewComboBoxEditingControl = _
CType(e.Control, DataGridViewComboBoxEditingControl)
'データテーブルの作成
Dim weekTable As New DataTable("WeekTable")
weekTable.Columns.Add("Display", GetType(String))
weekTable.Columns.Add("Value", GetType(Integer))
weekTable.Rows.Add("日曜", 0)
weekTable.Rows.Add("月曜", 1)

If dgv.CurrentCell.OwningColumn.Index = 0 Then
tb.DataSource = weekTable
End If
End If
End Sub

これで、表示はできるようになりました。
しかし、このままではComboBoxColumn定番?のエラーが出ますので、
これから調べて使えるようになりましたら、またご報告させて頂きます。

取り急ぎご報告させて頂きました。
上記の問題が解決しましたので、解決済みをチェックさせて頂きます。
そして、解決したソースをカキコさせて頂きます。

以下ソース----------------------------------------------------------------------
    Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
        Try
            '表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
            If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
                Dim DGV As DataGridView = CType(sender, DataGridView)
                If DGV.CurrentCell.OwningColumn.Index = 5 Then
                    Dim iCnt As Integer
                    '編集のために表示されているコントロールを取得
                    Dim TB As DataGridViewComboBoxEditingControl = _
                        CType(e.Control, DataGridViewComboBoxEditingControl)
                    '新規テーブルを作成
                    Dim DT As New DataTable("DBTable")
                    '現在のデータグリッドのコンボボックスセルを取得
                    Dim DGVCS As DataGridViewComboBoxCell = _
                        CType(DGV(DGV.CurrentCell.OwningColumn.Index, DGV.CurrentCell.OwningRow.Index), _
                        DataGridViewComboBoxCell)
                    '置き換えるデータテーブルの設定
                    DT.Columns.Add("Kubun", GetType(String))
                    DT.Columns.Add("Value", GetType(Integer))
                    'データテーブルにセットする。
                    DT.Rows.Add("月曜日", 1)
                    DT.Rows.Add("火曜日", 2)
                    DT.Rows.Add("水曜日", 3)
                    'データソースを変更
                    DGVCS.DataSource = DT
                    'DataGridViewの表示をリフレッシュ
                    DGV.RefreshEdit()
                End If
            End If
        Catch oExcept As Exception
            '例外が発生した時の処理
            MessageBox.Show(oExcept.ToString, "例外発生")
        End Try
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板