4

目前我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

4 回答 4

2

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

兰迪

于 2009-12-01T20:09:07.030 回答
1

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

于 2010-01-08T10:04:51.867 回答
1

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

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

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

于 2009-12-02T00:47:49.673 回答
1

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

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

于 2010-01-10T14:57:11.033 回答