刷新DataGridView.DataSource的更好方法

时间:2009-12-01 19:30:38

标签: c# winforms linq-to-sql datagridview linqdatasource

目前我的应用程序中有一个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,而不是改变数据库中的数据,你只需要使用这个{{} 1}}会以适当的方式自动刷新TableAdapter

所以我想知道是否还有其他一些方法我应该对每个平滑刷新做这个?

4 个答案:

答案 0 :(得分:2)

这对我来说听起来不像是一个L2S问题。对于您使用的任何网格,这听起来更像是一个问题。所有L2S都是为您的网格提供数据。对我来说,刷新后网格的当前行会发生变化。是否可以禁用网格,将当前行设置为您想要的,然后启用网格?我过去做过这个。

兰迪

答案 1 :(得分:1)

您似乎正在尝试修改应用程序外部的数据,然后让DataGridView显示这些更改。

我不知道一种自动轮询数据库的方法,然后让DataGridView只更新该行以显示更顺畅的刷新。为了刷新,我总是将DataGridView重新绑定到包含TableAdapter Select,Update和DeleteCommand(SQL但类似)的DataSource。我不认为这是一个LINQ问题。

无论您如何更新基础表,都会进行某种刷新,除非您只编辑一个字段,然后稍后发布更新。

答案 2 :(得分:1)

我假设你使用的是WinForms,然后别无选择。 如果您正在使用WPF,则可以使用WPF中存在的绑定技术。 但我不知道细节。

答案 3 :(得分:1)

正如其他人已经指出的那样,你的问题与Linq2Sql本身无关,它与DataGridView处理对象数据源的方式有关。

解决丢失的选定行的一种方法是对要绑定的集合进行排序,并在刷新后以编程方式选择先前选定的行。