C# 数据表。选择(“完成”)。计数<&燃气轮机;没有给出正确的总数

C# 数据表。选择(“完成”)。计数<&燃气轮机;没有给出正确的总数,c#,datatable,C#,Datatable,在我的Winforms应用程序保存按钮中,我将要保存的记录的Complete列更改为true,稍后在同一按钮中,我将获得已完成的记录总数(将显示在屏幕上): dtFacilities.Rows[grdfaccilities.CurrentCell.RowIndex].SetField(“完成”,true); ... ... ... Completed=dtFacilities.Select(“Complete”).Count(); 当我查看DataTable时,我可以在我的示例中看到,现在有两

在我的Winforms应用程序保存按钮中,我将要保存的记录的Complete列更改为true,稍后在同一按钮中,我将获得已完成的记录总数(将显示在屏幕上):

dtFacilities.Rows[grdfaccilities.CurrentCell.RowIndex].SetField(“完成”,true);
...
...
...
Completed=dtFacilities.Select(“Complete”).Count();
当我查看DataTable时,我可以在我的示例中看到,现在有两条记录的标志设置为true。一条记录是以前保存的,另一条是他们单击保存按钮时我刚刚更新的新记录。然而,Completed(一个int)返回1。用户第一次单击按钮时,“完成”不会更新。在第一次不更新之后,它会正确更新

有人知道我可能做错了什么吗?如果有帮助的话,我可以提供更多的代码

这一行代码在我的加载事件中完美地工作:

Completed = dtFacilities.Select ("Complete").Count<DataRow>();
Completed=dtFacilities.Select(“Complete”).Count();

只是不在我的保存方法中。

看起来我正在失去对当前行的跟踪。这是我在“保存”按钮中的原始设置(在我实际获得总数之前):

我发现如果我颠倒这些行,我的总数会正确工作:

DataRow dr = dtFacilities.Rows.Find (grdFacilities.CurrentCell.Value);
dr ["Complete"] = true;
 
grdFacilities.Rows [grdFacilities.CurrentCell.RowIndex].Cells ["Complete"].Value = true; 
dtFacilities.Rows [grdFacilities.CurrentCell.RowIndex].SetField ("Complete", true);

奇怪的是,我不能执行这样的代码。筛选器表达式“Complete”的计算结果不是布尔项。你确定Complete是int类型的吗?不,Complete是bool类型的。但是这个表达式返回一个int(总数)。好吧,对于定义为bool的字段,我得到了正确的计数。然后这里又发生了另一件事。是的,我也这么认为。感谢您的关注,Steve。应该介于设置值和读数(the…)之间。理论上,如果Datatable是DataGrid的数据源,您不需要更新Datatable。只要在网格上调用EndEdit就足以将所有更改传输回DataTable。谢谢,Steve。我对装订有点陌生。我不知道!
grdFacilities.Rows [grdFacilities.CurrentCell.RowIndex].Cells ["Complete"].Value = true;
dtFacilities.Rows [grdFacilities.CurrentCell.RowIndex].SetField ("Complete", true);
    
DataRow dr = dtFacilities.Rows.Find (grdFacilities.CurrentCell.Value);
dr ["Complete"] = true;
DataRow dr = dtFacilities.Rows.Find (grdFacilities.CurrentCell.Value);
dr ["Complete"] = true;
 
grdFacilities.Rows [grdFacilities.CurrentCell.RowIndex].Cells ["Complete"].Value = true; 
dtFacilities.Rows [grdFacilities.CurrentCell.RowIndex].SetField ("Complete", true);