My DataGridView - это однострочный выбор, а theres - событие rowEnter, где я получаю индекс строки каждый раз, когда выбранная строка изменяется.
private void rowEnter(object sender, DataGridViewCellEventArgs e)
{
currentRowIndex = e.RowIndex;
}
когда я нажимаю кнопку удаления, я использую тот же индекс для удаления строки
myDataSet.Avaliado.Rows[currentRowIndex].Delete();
avaliadoTableAdapter.Update(myDataSet.Avaliado);
он отлично работает, если ни один столбец в DataGridView не сортируется, иначе получите ошибку. Каким должен быть способ знать индекс строки в наборе данных, который соответствует индексу строк из DataGridView?
Вам не нужно захватывать текущий индекс строки каждый раз, когда выбирается новая строка. Попробуйте что-то вроде этого:
if (_Grid.SelectedRows.Count <= 0) { return; } // nothing selected
DataGridViewRow dgvRow = _Grid.SelectedRows[0];
// assuming you have a DataTable bound to the DataGridView:
DataRowView row = (DataRowView)dgvRow.DataBoundItem;
// now go about deleting the row however you would do that.
Если у вас есть какой-то другой тип данных, привязанный к каждой строке сетки, просто введите DataGridViewRow.DataBoundItem
в любой тип данных.
Вы можете найти текущую выбранную строку в то время, когда вы делаете удаление:
if(myDataGridView.SelectedRows.Count > 0)
currentRowIndex = myDataGridView.SelectedRows[0].Index;
Обычно я использую первичный ключ для этой строки как скрытый столбец (мое соглашение использует первый столбец использования).
Затем я могу попросить мой упорный слой сделать все остальное.