2009-12-01 13 views
4

的更好的办法目前,我有我的应用程序一个DataGridView这是我从我的LINQ到SQL类,像这样填...刷新DataGridView.DataSource

/// <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到SQL之前,我记得有界DataGridView有一个TableAdapter形成的,而不是在DB改变数据你只需插入使用此TableAdapter这将自动刷新的DataGridView合适的方式。

所以我想知道如果有一些其他的方式,我应该这样做到每个平滑刷新?

回答

2

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

兰迪

1

您似乎在试图修改数据的应用程序之外,然后让DataGridView中显示这些变化。

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

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

1

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

1

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

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