У меня есть DataGridView с DataSource, установленным в DataTable. Поэтому используйте этот код в качестве примера:
DataTable table;
table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Last_Name", typeof(string));
table.Columns.Add("Male", typeof(Boolean));
DataRow row;
for (int i = 1; i < 10; i++)
{
row = table.NewRow();
row["Name"] = String.Format("Person {0}", i + 1);
row["Last_Name"] = String.Format("Person Last Name {0}", i + 1);
if (i % 2 == 0)
{
row["Male"] = true;
}
else
{
row["Male"] = false;
}
table.Rows.Add(row);
}
dataGridView1.DataSource = table;
Я также подписался на событие SelectionChanged, которое просто показывает содержимое первой ячейки в текстовом поле. Увидеть ниже:
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow != null)
{
DataRowView row = dataGridView1.CurrentRow.DataBoundItem as DataRowView;
if (row != null)
{
textBox1.Text = row.Row[0].ToString();
}
}
}
Когда я меняю строки, срабатывает событие SelectionChanged, и содержимое правильно отображается в текстовом поле.
Теперь у меня есть кнопка, которая добавляет новую строку в сетку:
private void buttonAdd_Click(object sender, EventArgs e)
{
DataRow row= table.NewRow();
row["Name"] = "Bob";
row["Last_Name"] = "Smith";
row["Male"] = true;
table.Rows.Add(row);
}
Новая строка теперь добавлена в сетку, но не выбрана.
Поэтому я пытаюсь выбрать его, подписавшись на событие RowsAdded:
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
dataGridView1.Rows[e.RowIndex].Selected = true;
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[0];
}
Итак, теперь это правильно выбирает строку, но событие SelectionChanged не срабатывает, и текстовое поле все еще показывает результат ранее выбранной строки.
Что я могу сделать, чтобы обойти это или что я делаю неправильно?
Странно, если я снова нажму кнопку «Добавить», будет выбрана строка, которую я добавил при первом нажатии!?
Я использую С# 4.0 и Visual Studio 2012.
Спасибо