Удалить строку из DataGridView, учитывая его индекс

2

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?

Теги:
winforms
datagridview
sql-server-ce

3 ответа

2
Лучший ответ

Вам не нужно захватывать текущий индекс строки каждый раз, когда выбирается новая строка. Попробуйте что-то вроде этого:

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 в любой тип данных.

  • 0
    Отлично! Спасибо большое. Просто комментарий. В спешке вы сделали ошибку. Ничего серьезного. :) DataRowView row = (DataRowView) dgvRow.DataBoundItem; Странно только то, что при удалении последней строки в DGV DVG не выбирает предыдущую доступную строку.
  • 0
    К сожалению! Ты прав. Образец кода, который я искал для взятия этого примера кода, включал BindingList <T>, связанный с DataGridView, поэтому промежуточного DataRowView не было. Я обновлю пример ...
0

Вы можете найти текущую выбранную строку в то время, когда вы делаете удаление:

if(myDataGridView.SelectedRows.Count > 0)
     currentRowIndex = myDataGridView.SelectedRows[0].Index;
  • 0
    это то же самое значение, которое у меня уже есть в событии rowEnter, не так ли? У строки в DataGridView есть индекс, у строки данных в наборе данных есть другая позиция, которая не обязательно соответствует DataGridView. В этом-то и дело.
  • 0
    Сожалею. Я думал, что вы имели в виду, что вы теряли правильный индекс, когда столбец сортируется. myDataGridView.SelectedRows [0] .DataBoundItem действительно то, что вас интересует тогда.
0

Обычно я использую первичный ключ для этой строки как скрытый столбец (мое соглашение использует первый столбец использования).

Затем я могу попросить мой упорный слой сделать все остальное.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню