Не удается обновить источник для DataGridView - PullRequest
0 голосов
/ 08 апреля 2011

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

    private void Apply_Click(object sender, EventArgs e)
    {
        Form addIncForm = DataProcessing.newIncident(Incident.Text);
        addIncForm.FormClosed += (s, ex) =>
        {
            this.inciView.DataSource = null;
            this.inciView.DataSource = this.incidentBindingSource;
            this.inciView.Invalidate();
            this.inciView.Refresh();
            this.inciView.Parent.Refresh();
        };
        addIncForm.Show();
    }

Только когда я закрываю и открываю «эту» форму, я вижу изменения в inciView. Почему это жесткое обновление (ни один из методов) не работает? а как его так освежить?

Я думаю, что должен как-то принудительно обновить DataSet.

Ответы [ 2 ]

1 голос
/ 23 марта 2012

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

В конструкторе DataSet:

  1. щелкните правой кнопкой мыши TableAdapter и выберите «Настроить ... "
  2. нажмите Далее, убедитесь, что установлен флажок" Заполнить таблицу данных "
  3. Нажмите Далее / Готово.

в вашем коде добавьте:

myDataSet.AcceptChanges();
myBindingSource.EndEdit();
myTableAdapter.Fill(myDataSet.Table1);

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

Первые 2 оператора могут быть избыточными, но это работает для меня.:)

1 голос
/ 08 апреля 2011

Есть два подхода, которые будут работать:

  1. Создайте форму, которую вы используете для редактирования модальных данных, используя ShowDialog () , чтобы открыть ее. После вызова ShowDialog() добавьте код в запрос и перепривязайте ваш DataGridView к его источнику данных.

  2. Добавьте в форму ввода данных событие, информирующее слушателей о том, что ваша база данных была обновлена. Форма, которая открывает форму ввода данных, подписывается на это событие и в коде, который запускается, когда событие запускает запрос и перепривязывает ваш DGV.

Когда я говорю «запросить и повторно связать ваш DGV», я имею в виду делать все, что вы сейчас делаете, чтобы загрузить данные в ваш DGV (то есть запросить вашу базу данных и установить источник данных).

В первом подходе модальное отображение формы ввода данных будет эффективно останавливать выполнение вашей основной формы до тех пор, пока пользователь не закончит с формой ввода данных. Вы также можете сделать так, чтобы ваша форма ввода данных возвращала DialogResult , указывающий, сделал ли пользователь какие-либо изменения в отличие от отмены. Если это так (скажем, DialogResult.OK было возвращено формой ввода данных), вы можете запустить код обновления DGV.

При втором подходе ваша форма ввода данных сообщает пользователям, что данные были обновлены.

...