C# 刷新DataGridView.DataSource的更好方法

C# 刷新DataGridView.DataSource的更好方法,c#,winforms,linq-to-sql,datagridview,linqdatasource,C#,Winforms,Linq To Sql,Datagridview,Linqdatasource,目前,我的应用程序中有一个DataGridView,我从Linq到SQL类填充它,比如 /// <summary> /// Delegate to update datagrid, fixes threading issue /// </summary> private void updateInfo() { // Linq to datagridview; display all var query

目前,我的应用程序中有一个
DataGridView
,我从Linq到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();
    }
//
///委托更新datagrid,修复线程问题
/// 
私有void updateInfo()
{
//Linq到datagridview;显示全部
var query=从n开始,以dbh为单位。项目选择n;
itemDataGridView.DataSource=query.ToList();
}
所以问题是每次我添加新信息并运行刷新时,表的焦点都会改变,这意味着如果我在一行上,它会将我切换到另一行。 并且有一个事件与行的更改相关联,因此这会导致此事件在列表保持刷新的同时运行

我不知道,但我记得在切换到Linq to SQL bounded
DataGridView
之前,有一个
TableAdapter
形成,您只需使用该
TableAdapter
插入即可,它将以正确的方式自动刷新
DataGridView


所以我想知道是否有其他方法可以让每个人都能顺利刷新?

这听起来不像是L2S的问题。这听起来更像是您使用的任何网格的问题。L2S所做的一切就是为您的网格提供数据。对我来说,刷新后网格的当前行将发生更改是有道理的。是否可以禁用网格,将当前行设置为所需的行,然后启用网格?我以前也这样做过


Randy

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

我不知道如何自动轮询数据库,然后让DataGridView仅更新该行以显示更平滑的刷新。为了刷新,我总是将DataGridView重新绑定到包含TableAdapter Select、Update和DELETE命令(SQL但类似)的数据源。我不认为这是一个LINQ问题


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

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

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

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