C# - как обновить DataGridView после удаления строк

в моем коде мне нужно удалить строки из DataGridView после повторяющегося интервала, и поэтому я вызываю следующую функцию, когда истекает таймер:

private void removeRows(DataGridView dgv) {

    foreach (DataGridViewRow row in dgv.Rows)
    {
        // if some condition holds
        dgv.Remove(row);                
    }
    dgv.Refresh();

}

Я знаю, что строки успешно удалены из DataGridView, хотя они по-прежнему остаются на дисплее по какой-либо причине. Есть советы, что я могу сделать не так?

7 ответов


Если вы привязали свой datagrid к наблюдаемой коллекции (если нет, то вы должны), то вам нужно будет реализовать интерфейс INotifyCollectionChanged, чтобы слушатели уведомлялись о динамических изменениях, например, когда элементы добавляются и удаляются или весь список обновляется.

HTH


вам не нужно заново привязать сетку данных?

dgrv.Datasource = [whatever data source];
dgrv.DataBind();

?


иногда недостаточно обновить gridview данных, и его содержащий родитель также должен быть обновлен.

попробуйте это:

dgv.Refresh(); // Make sure this comes first
dgv.Parent.Refresh(); // Make sure this comes second

вы также можете изменить источник и прикрепить новый источник данных к элементу управления.


Если я правильно вас понимаю, вы хотите удалить строки, выбранные пользователем из вашего DGV.

  1. используйте DataGridViewRowCollection вашего DGV, а не DataRowCollection DataTable. DataGridViewRow имеет свойство Selected, указывающее, выбрана ли строка или нет.

  2. после того, как вы определили, что строка должна быть удалена, вы можете использовать метод Remove DataGridViewRowCollection для удаления элемент из сетки, например YerDataGridView.Строки.Удалить(строка)

  3. обратите внимание, что на данный момент, хотя элемент удален из DGV, он все еще не был удален из БД Access. Вам нужно вызвать метод обновления TableAdapter в DataSet / DataTable для фиксации удалений в БД, например YerTableAdapter.Update (YerDataSet)

Я обычно вызываю обновление один раз, чтобы зафиксировать изменения только после удаления всех элементов, которые должны быть исключено из DGV.


Если это сетка с привязкой к данным, Вы должны работать над самим источником привязки вместо сетки.


        dataGridView.DataSource = null;
        dataGridView.Update();
        dataGridView.Refresh();
        dataGridView.DataSource = SomeDataSource;

надеюсь, это hepls.


Попробуйте удалить фактические элементы из источника привязки.