目前我的应用程序中有一个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
。
所以我想知道是否还有其他一些方法我应该对每个平滑刷新做这个?
答案 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
处理对象数据源的方式有关。
解决丢失的选定行的一种方法是对要绑定的集合进行排序,并在刷新后以编程方式选择先前选定的行。