セル単位ごとにdatagridviewにリストボックスをつけるには への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 hinaka  (社会人) 投稿日時 2013/4/23 14:45:57
早速のご返答ありがとうございます。
参考にさせていただきます。設定してうまく動きましたらご報告させていただきます。
投稿者 shu  (社会人) 投稿日時 2013/4/23 08:59:47
セルに対しDataSourceを設定するとよいです。
タイミングはセルへの移動時とかリスト内容が確定したタイミングなどが
よいのではないでしょうか。

Public Class Form1
    Private tbl As DataTable

    Public Sub New()
        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        tbl = New DataTable
        With tbl.Columns
            .Add("Col1", GetType(String))
            .Add("Col2", GetType(String))
            .Add("ColList", GetType(String()))
        End With
        Column1.DataPropertyName = "Col1"
        Column2.DataPropertyName = "Col2"
        DataGridView1.AutoGenerateColumns = False
        DataGridView1.DataSource = tbl

        tbl.Rows.Add({"aaa", "", New String() {"ccc1", "ccc2", "ccc3"}})
        tbl.Rows.Add({"vvv", "", New String() {"ccc4", "ccc5", "ccc6"}})
    End Sub


    Private Sub DataGridView1_CellEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
        If e.ColumnIndex = Column2.Index Then
            Dim row = DirectCast(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView).Row
            With DirectCast(DataGridView1.Item(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell)
                .DataSource = row("ColList")
            End With
        End If
    End Sub
End Class




投稿者 hinaka  (社会人) 投稿日時 2013/4/22 19:44:29
datagridの1列1行目に県名をリストボックスで選んで入力したら、
1列3行目には、その県ごとの市町村名のリストボックス選択が
できるようにしたいのですが、どのようなプログラムになるのでしょうか。

列ごとのリストボックスの設定は、サイトに例があるのですが
セル単位は無理なのでしょうか。

よろしくお願いします。