Лучший способ обновления DataGridView.DataSource

В настоящее время у меня есть 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 ответа

Решение

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

похотливый

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

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

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

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

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

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

Другие вопросы по тегам