以编程方式修改已过滤的datagridview中的单元格

时间:2017-06-29 08:40:16

标签: c# datagridview bindingsource

如果我从数据源加载DataGridView,

this.exampleTableAdapter.Fill(this.refdataDataSet.Example);

通过绑定源应用过滤器

exampleBindingSource.Filter = "TrackingId = 'x'";

然后尝试迭代过滤的DataGridView并修改它们

foreach (DataGridViewRow row in datagridExampleList.Rows)
{
   //Tried to set rows directly
   row.Cells["TrackingId"].Value = "";
   //Also tried variations of setting the DataBoundItem directly
}

但是,由于某种原因,它不会遍历整个集合。

当我调试时,我返回了Rows集合(使用与过滤器匹配的x项进行过滤),但是当我更改集合中的值(特别是作为过滤器目标的值)时,集合会随时更改即使过滤器被挂起且列表更改事件已设置为false,迭代也会错过项目。

似乎没什么用。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

以下代码必须让您更改所有行。

            var filter = exampleBindingSource.Filter;
            exampleBindingSource.Filter = null;
            foreach (DataGridViewRow row in datagridExampleList.Rows)
            {
                //Tried to set rows directly
                row.Cells["TrackingId"].Value = "";
                //Also tried variations of setting the DataBoundItem directly
            }
            exampleBindingSource.Filter = filter;

答案 1 :(得分:0)

要避免使用行枚举器,可以尝试使用循环:

int c = datagridExampleList.Columns["TrackingId"].Index;

for (int r = datagridExampleList.RowCount - 1; r >= 0; r--)
    datagridExampleList[c, r].Value = "";