Лучший способ обновления DataGridView.DataSource - PullRequest
4 голосов
/ 01 декабря 2009

В настоящее время у меня есть DataGridView в моем приложении, которое я заполняю из своих классов Linq-to-SQL примерно так ...

    /// <summary>
    /// Delegate to update datagrid, fixes threading issue
    /// </summary>
    private void updateInfo()
    {
        // Linq to datagridview; display all
        var query = from n in dbh.Items select n;
        itemDataGridView.DataSource = query.ToList();
    }

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

Не знаю, но помню, что до перехода на Linq-to-SQL с ограничением DataGridView был сформирован TableAdapter, и вместо изменения данных в БД вы просто вставляли бы с помощью этого TableAdapter, который автоматически обновите DataGridView надлежащим образом.

Так что мне интересно, есть ли какой-то другой способ, которым я должен делать это для каждого, что сглаживает обновляет?

Ответы [ 4 ]

2 голосов
/ 01 декабря 2009

Для меня это не похоже на проблему с L2S. Это больше похоже на проблему с любой сеткой, которую вы используете. Все, что делает L2S - это снабжает вашу сетку данными. Для меня имеет смысл, что текущий ряд сетки будет меняться после обновления. Можно ли отключить сетку, установить текущую строку на то, что вы хотите, а затем включить сетку? Я делал это в прошлом.

Randy

1 голос
/ 10 января 2010

Как уже отмечали другие, ваша проблема не связана с Linq2Sql как таковой, она заключается в способе DataGridView обработки источников данных объекта.

Один из способов обойти потерянную выбранную строку - отсортировать коллекцию, с которой вы связываетесь, и программно выбрать ранее выбранную строку после обновления.

1 голос
/ 08 января 2010

Я предполагаю, что вы используете WinForms, и тогда нет альтернативы. Однако если вы используете WPF, это возможно, используя методы привязки, существующие в WPF. Однако я не знаю деталей.

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

Похоже, вы пытаетесь изменить данные вне вашего приложения, а затем DataGridView отображает эти изменения.

Мне неизвестен способ автоматического опроса базы данных, а затем DataGridView обновляет только эту строку, чтобы показать более плавное обновление. Для обновления я всегда привязывал DataGridView к DataSource, который содержит TableAdapter Select, Update и DeleteCommand (SQL, но похожий). Я не думаю, что это проблема LINQ.

Независимо от того, как вы обновляете основную таблицу, будет какое-то обновление, если вы не отредактируете только одно поле, а затем опубликуете обновления позже.

...