Предположим, у вас есть событие dataGridView1_CellBeginEdit в первой форме:
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if(e.ColumnIndex == 0)
{
Form2 f = new Form2();
var result = f.ShowDialog();
if(result == DialogResult.OK)
{
List<Person> selection = new List<Person>();
f.GetSelection(selection);
BindingSource bs = new BindingSource();
bs.DataSource = selection;
dataGridView1.DataSource = bs;
}
f.Dispose();
}
}
Теперь сначала я проверяю, является ли отредактированный столбец первым (ID) - вам не нужно этого делать, если вы этого не сделаетеcare.
Далее я создаю форму2 и показываю ее модально.Когда пользователь нажимает кнопку «ОК» на форме form2, он возвращает DialogResult.OK.
Далее я создаю список записей, которые будут снабжены выбором из form2 -> GetSelection.
Когда у меня есть выборЯ могу заполнить dataGridView этим.Здесь я использую BindingSource - вы можете сделать что-то еще.
А теперь form2:
Сначала я загружаю некоторые данные:
void LoadData()
{
List<Person> data = new List<Person>();
Person p = new Person { Id = 1, Age = 20, Job = "Consultant", Name = "John" };
Person p2 = new Person { Id = 2, Age = 22, Job = "Programmer", Name = "Steven" };
Person p3 = new Person { Id = 3, Age = 22, Job = "Manager", Name = "Alice" };
Person p4 = new Person { Id = 4, Age = 30, Job = "Analytic", Name = "Mark" };
Person p5 = new Person { Id = 5, Age = 32, Job = "Analytic", Name = "Gregory" };
Person p6 = new Person { Id = 6, Age = 32, Job = "Tester", Name = "Hugh" };
data.Add(p);
data.Add(p2);
data.Add(p3);
data.Add(p4);
data.Add(p5);
data.Add(p6);
bs = new BindingSource();
bs.DataSource = data;
dataGridView1.DataSource = bs;
}
И самый интересный методGetSelection, который действительно прост:
public void GetSelection(List<Person> result)
{
var rows = dataGridView1.SelectedRows;
for(int i = 0; i < rows.Count; i++)
{
Person p = rows[i].DataBoundItem as Person;
if (p != null)
result.Add(p);
}
}
Конечно, не забудьте добавить OKButton, который установит DialogResult в OK.