try this
using System;
using System.Data;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
LoadData();
dataGridView1.EditingControlShowing +=dataGridView1_EditingControlShowing;
}
private void LoadData()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dataGridView1.DataSource = dt;
DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
combo.HeaderText = "Item Name";
combo.Name = "combo";
var dat = new String[] { "Item 1", "Item 2", "Item 3", "Item 4" };
combo.Items.AddRange(dat);
dataGridView1.Columns.Add(combo);
dt.Columns.Add("Price");
}
ComboBox combo;
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
combo = e.Control as ComboBox;
if (combo != null)
{
combo.SelectedIndexChanged -= new EventHandler(combo_SelectedIndexChanged);
combo.SelectedIndexChanged += combo_SelectedIndexChanged;
}
}
private void combo_SelectedIndexChanged(object sender, EventArgs e)
{
string value = (sender as ComboBox).SelectedItem.ToString();
double price =50;
var target = sender as DataGridViewComboBoxEditingControl;
int rowIndex = target.EditingControlRowIndex;
if (value == "Item 1")
{ price = 100; }
if (value == "Item 2")
{ price = 200; }
dataGridView1.Rows[rowIndex].Cells["Price"].Value = price;
}
}
}
modified from
C# DataGridView ComboBoxColumn Selection Event - Camposha[
^]