این هم یک نمونه کد سی شارپ که از تو اینترنت پیدا کردم تست کردم جواب داد ه
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
DataGridViewComboBoxColumn comboColumn;
DataTable dt;
DataTable dt2;
private void Form3_Load(object sender, EventArgs e)
{
dt = new DataTable();
dt.Columns.Add("comboColumn");
dt.Columns.Add("col");
dt.Rows.Add("id1", "abc");
dt.Rows.Add("id2", "def");
dt2 = new DataTable();
dt2.Columns.Add("comboCol");
dt2.Rows.Add("id1");
dt2.Rows.Add("id2");
dataGridView1.AutoGenerateColumns = false;
comboColumn = new DataGridViewComboBoxColumn();
comboColumn.DataPropertyName = "comboColumn";
comboColumn.DisplayMember = "comboCol";
comboColumn.ValueMember = "comboCol";
comboColumn.DataSource = dt2;
DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();
textColumn.DataPropertyName = "col";
dataGridView1.Columns.Add(comboColumn);
dataGridView1.Columns.Add(textColumn);
dataGridView1.DataSource = dt;
dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridVie w1_CellValidating);
dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(data GridView1_EditingControlShowing);
}
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (this.dataGridView1.CurrentCellAddress.X == comboColumn.DisplayIndex)
{
ComboBox cb = e.Control as ComboBox;
if (cb != null)
{
cb.DropDownStyle = ComboBoxStyle.DropDown;
}
}
}
void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.ColumnIndex == comboColumn.DisplayIndex)
{
if (!dataCheck(e.FormattedValue.ToString(), dt2, 0))
{
dt2.Rows.Add(e.FormattedValue);
comboColumn.DataSource = dt2;
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue;
}
}
}
private bool dataCheck(string value, DataTable datatable, int columnIndex)
{
bool result = false;
if (datatable != null)
{
for (int i = 0; i < datatable.Rows.Count; i++)
{
if (datatable.Rows[i].ItemArray.GetValue(columnIndex).ToString() == value)
{
result = true;
break;
}
}
}
return result;
}
}
}