2012/12/05(Wed) 17:06:12 編集(投稿者)
■No64516 (take6 さん) に返信
VB2010ですが一応それらしい動きをします。
DataGridView1には2列をデザイン時に作成し2列目をコンボボックス項目にしてあります。
AllowUserToAddRowsは処理が大変になってしまうのでとりあえずFalseにしてあります。
コンボのリストがない状態でセルに値を設定するとDataErrorイベントが発生するのを
利用して該当Cellにコンボボックス用のDataSourceを設定しています。
動的に行が増える場合はそれに合わせて処理を変更してみて下さい。
Public Class Form1
Private m_tblList As DataTable
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
'DataGridViewにバインドするデータを作成
m_tblList = New DataTable
m_tblList.Columns.Add("ID", GetType(String))
m_tblList.Columns.Add("Name", GetType(String))
m_tblList.Columns.Add("NameList", GetType(List(Of String)))
m_tblList.Rows.Add("1", "aaa", New List(Of String) From {"aaa", "bbb", "ccc"})
m_tblList.Rows.Add("2", "ddd", New List(Of String) From {"ddd", "eee", "fff"})
m_tblList.Rows.Add("3", "ggg", New List(Of String) From {"ggg", "hhh", "iii"})
'自動列追加をオフにしてDataSourceを設定
DataGridView1.AutoGenerateColumns = False
DataGridView1.DataSource = m_tblList
Column1.DataPropertyName = "ID"
Column2.DataPropertyName = "Name"
End Sub
Private Sub DataGridView1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
Select Case e.ColumnIndex
Case 1
Dim row = DirectCast(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView).Row
Dim cell = DirectCast(DataGridView1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell)
cell.DataSource = DirectCast(row("NameList"), List(Of String))
End Select
End Sub
End Class