【问题标题】:Can LINQ based DataGridView's be "disconnected" from the LINQ expression?基于 LINQ 的 DataGridView 可以与 LINQ 表达式“断开连接”吗?
【发布时间】:2014-06-20 15:38:57
【问题描述】:

我有一个用LINQ 创建的DataView,连接到DataGridView。当我更改DataGridView 中的值时,LINQ 表达式会立即执行并更改我的DataView 中的结果。

有没有办法"disconnect" the DataGridView from the LINQ script 来抑制 DataView 中的更改?

void MyFunc()
{
    DataGridView myGrid;
    DataTable myTable;

    // filling the table

    // assigning the table to the grid
    myGrid.DataSource = myTable;

    // filtering DataTable with LINQ
    var filteredRows = (from DataRow in myTable.AsEnumerable() 
                        where (...) 
                        select (row));

    // assigning the result to the DataGrid
    myGrid.DataSource = filteredRows.AsDataView();

    ...
}

【问题讨论】:

  • 你的意思是:推迟更新?您实际上想更新它们,但不是现在,不是吗?
  • 试试CopyToDataTable而不是AsDataView
  • 是的,我想推迟更新@Daniel:我必须删除行。当我使用表的副本时,我必须手动删除原始表中的行。

标签: c# linq datagridview datatable


【解决方案1】:

执行/迭代您的查询并使用CopyToDataTable 获取一个新的DataTable,然后将其分配为DataSource

var filteredRows = (from DataRow in myTable.AsEnumerable() 
                        where (...) 
                        select (row)).CopyToDataTable();
DateGridView.DataSource = filteredRows;

这将导致临时 DataTable 成为您的 Grid 的来源,并将与您的 LINQ 表达式断开连接。 稍后您可以从您的DataSource 获取DataTable 并更新。

【讨论】:

  • 我必须删除行。当我使用表的副本时,我必须手动删除原始表中的行。
  • @boboes,是的,这就是您为断开连接模式支付的费用。
  • 好的,所以我将复制在 LINQ 过滤器中使用的字段。第一个被显示,其他被隐藏。用户更改显示的字段并使用“更新”按钮将可见字段转移到隐藏一次,然后执行 LINQ。对我来说似乎比手动同步表更好。谢谢大家:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多