C# 以编程方式更新选定行会丢失dgv.DataSource.GetChanges()中的最后一行?

C# 以编程方式更新选定行会丢失dgv.DataSource.GetChanges()中的最后一行?,c#,winforms,C#,Winforms,我有一个带有列组合框列的数据网格视图。已实现以下功能 选择多行单击最左侧的行标题并拖动。 通过编程将该值设置为如下所示的值。所有选定行都将更改 foreach (DataGridViewRow item in dgv.SelectedRows) { item.Cells["cbxxxxx"].Value = p; } dgv.EndEdit(); 单击“保存”按钮保存更改。但是,dgv.DataSource中的最后一行作为DataTable.Ge

我有一个带有列组合框列的数据网格视图。已实现以下功能

选择多行单击最左侧的行标题并拖动。 通过编程将该值设置为如下所示的值。所有选定行都将更改

    foreach (DataGridViewRow item in dgv.SelectedRows)
    {
        item.Cells["cbxxxxx"].Value = p;
    }
    dgv.EndEdit();
单击“保存”按钮保存更改。但是,dgv.DataSource中的最后一行作为DataTable.GetChanges被排除。已更改数据表的计数始终比所选行少一行。缺少的行是最后一个带有黑色三角形的行


如何解决此问题?

最后一行可能仍然是活动行,因此需要通过BindingContext结束编辑:

foreach (DataGridViewRow item in dgv.SelectedRows) {
  item.Cells["cbxxxxx"].Value = p;
}
this.BindingContext[dgv.DataSource].EndCurrentEdit();

您是否尝试将EndEdit调用放在foreach循环之前?刚刚尝试并更改了数据表中仍少了一行。为什么dgv.EndEdit不起作用?方法名称也会提示它。@dc7a9163d9无法100%确定原因,但网格的最后一行标记为活动行,因此它不一定处于编辑模式,因此无需结束。BindingContext对它的处理有些不同。