C # - как мне обновить DataGridView после удаления строк - PullRequest
6 голосов
/ 13 октября 2009

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

private void removeRows(DataGridView dgv) {

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

}

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

Ответы [ 7 ]

3 голосов
/ 13 октября 2009

Иногда обновления сетки данных недостаточно, и ее родительский элемент также должен обновляться.

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

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

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

3 голосов
/ 13 октября 2009

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

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

2 голосов
/ 22 сентября 2011

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

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

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

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

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

2 голосов
/ 13 октября 2009

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

НТН

1 голос
/ 05 апреля 2015

этот код может быть полезен:

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

Надеюсь, это поможет.

1 голос
/ 13 октября 2009

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

0 голосов
/ 13 октября 2009

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

...