Не удается получить DataGridView для обновления через Linq to SQL (WinForm) - PullRequest
1 голос
/ 14 декабря 2009

Очень странная ситуация: я использую L2S для заполнения DataGridView.
Код следует:

    private void RefreshUserGrid()
    {
    var UserQuery = from userRecord in this.DataContext.tblUsers
                    orderby userRecord.DisplayName
                    select userRecord;

    UsersGridView.DataSource = UserQuery;

//I have also tried
//this.UserBindingSource.DataSource = UserQuery;
//UsersGridView.Datasource = UserBindingSource;

    UsersGridView.Columns[0].Visible = false;
    }

Всякий раз, когда я использую L2S для добавления / удаления записей из базы данных, GridView прекрасно обновляется.
Однако, если кто-то редактирует сетку и делает ошибку, я хочу, чтобы он мог нажать кнопку обновления и чтобы его ошибки были стерты при перезагрузке из источника данных.
На всю жизнь я не могу заставить его работать.

Код, который я сейчас использую на кнопке обновления, выглядит так:

private void button1_Click(object sender, EventArgs e)
{
    this.DataContext.Refresh(RefreshMode.OverwriteCurrentValues);
    RefreshUserGrid();
}

Но проклятый GridView остается неизменным. Все, что происходит - выбранная строка становится невыбранной.

Я пробовал .Refresh(), .Invalidate(), я пытался изменить источник данных на NULL и обратно (все предложения из похожих постов здесь) .... ни один из них не работает. Единственный раз, когда Grid обновляется, это если я перезапускаю приложение.

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

Спасибо!

Ответы [ 4 ]

1 голос
/ 10 июня 2010

Похоже, что это ошибка в LINQ to SQL. Я понимаю людей из Janus GridEx, что причина проблемы в том, что LINQ представляет статический список в сетке, который не обновляется после вызова Refresh для DataContext.

Решение состоит в том, чтобы просто восстановить экземпляр DataContext.

1 голос
/ 21 декабря 2010

Вы можете обновить сетку , просто заново инициализировав DataContext объект. Это восстановит текущий объект DataContext , который необходимо обновить. но новый экземпляр автоматически будет иметь обновленные значения.

1 голос
/ 14 декабря 2009

Проще всего было бы использовать BindingSource. Создайте экземпляр класса BindingSource для класса, инициализируйте его для запроса данных, затем назначьте BindingSource для UsersGridView.

BindingSource будет обрабатывать обновления и т. Д. Существует несколько событий, которые можно перехватить для настраиваемого управления.

Эта ссылка дает пример использования BindingSource

РЕДАКТИРОВАТЬ: мой первый пост предполагал Webforms вместо WinForms.

0 голосов
/ 14 февраля 2015

Предыдущие комментарии верны. Повторно создать экземпляр DataContext для решения проблемы

Dim db As New dbDatosDataContext()
DataGridView1.DataSource = From l In db.Bultos Select l
...