c# - 验证每一行后如何从 UltraGrid 和数据库中删除选定的行?
问题描述
如果满足 UltraGrid 和数据库中的条件,则实现以下功能以删除所有选定的行:
private void RemoveRows()
{
foreach (var row in dgvReceords.Selected.Rows)
{
var order = row.Cells["Order"].Value;
if (order== null || string.IsNullOrEmpty(order.ToString().Trim()))
{
// Update database via business object and then update grid
OrderBO.DeleteByPrimaryKey(row.Cells["Id"].Text);
if (OrderBO.Save() == SaveResult.Success)
row.Delete();
}
}
}
它无法遍历所有行并始终留下一行的问题。知道这里有什么问题吗?
解决方案
这是因为正在修改的foreach()
uses 集合。.Delete()
尝试以for()
相反的顺序使用和删除:
private void RemoveRows()
{
for (var i=dgvReceords.Selected.Rows.Count-1; i >= 0; i--)
{
var row = dgvReceords.Selected.Rows[i];
var order = row.Cells["Order"].Value;
if (order== null || string.IsNullOrEmpty(order.ToString().Trim()))
{
// Update database via business object and then update grid
OrderBO.DeleteByPrimaryKey(row.Cells["Id"].Text);
if (OrderBO.Save() == SaveResult.Success)
dgvReceords.Selected.Rows[i].Delete();
}
}
}