سلام
من درست #C بلد نیستم ولی کدی در VB8 نوشتم و کار کرد. شاید کمکتان کند.
البته یک چیز را مطمئن هستم! شما dt را دوبار new کرده اید، ایرادی ندارد ولی حروم کردن وقت است و کاملا بی معنی است.
Dim dt As New System.Data.DataTable
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("ID", GetType(Integer))
dt.PrimaryKey = New System.Data.DataColumn() {dt.Columns(0)}
dt.Rows.Add("Ali", 123)
dt.Rows.Add("Reza", 568)
'--------------------------------------------------
Dim dgvc As New System.Windows.Forms.DataGridViewComboBoxColumn
Me.DataGridView1.Columns.Add(dgvc)
dgvc.DataSource = dt
dgvc.DisplayMember = "name"
dgvc.ValueMember = "id"
البته در این کد ستون هم به صورت runtime به datagridview اضافه شده، که نیازی نبوده.