Code Snippet
public partial class Form27 : Form
{
public Form27()
{
InitializeComponent();
}
BindingSource bs = new BindingSource();
private void Form27_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("aa");
dt.Columns.Add("bb");
for (int i = 0; i < 5; i++)
{
dt.Rows.Add("aa" + i, "bb" + i);
}
dt.AcceptChanges();
bs.DataSource = dt;
this.dataGridView1.DataSource = bs;
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.HeaderText = "aa";
col.DataPropertyName = "aa";
for (int i = 0; i < 5; i++)
{
col.Items.Add("aa" + i);
}
this.dataGridView1.Columns.RemoveAt(0);
this.dataGridView1.Columns.Insert(0, col);
this.dataGridView2.DataSource = bs;
this.dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(dataGridView1_CellEndEdit);
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (cob != null)
{
cob.SelectedIndexChanged -= new EventHandler(cob_SelectedIndexChanged);
}
}
ComboBox cob;
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox)
{
cob = (ComboBox)e.Control;
cob.SelectedIndexChanged += new EventHandler(cob_SelectedIndexChanged);
}
}
void cob_SelectedIndexChanged(object sender, EventArgs e)
{
this.dataGridView1.BeginInvoke(new MethodInvoker(EndEdit));
}
void EndEdit()
{
DataGridViewCell cell = this.dataGridView1.CurrentCell;
this.dataGridView1.CurrentCell = this.dataGridView1[0, 0];
this.dataGridView1.CurrentCell = cell;
}
}