我正在尝试删除未绑定的datagridview中的所有已标记/已检查的行。复选框列以编程方式添加。我知道我必须使用
RequestedEmpGrid.Rows.Remove(RequestedEmpGrid.Rows[ForRequestRow.Index]);
从网格中删除行。但是,我在获取datagridview中多个已检查行的行索引时遇到问题。我的循环不起作用。帮助
//REMOVE ALL CHECKED
foreach (DataGridViewRow ForRequestRow in RequestedEmpGrid.Rows)
{
if (Convert.ToBoolean(ForRequestRow.Cells[MarkColumn.Name].Value) == true)
{
RequestedEmpGrid.Rows[ForRequestRow.Index].Selected = true;
RequestedEmpGrid.Rows.Remove(RequestedEmpGrid.Rows[ForRequestRow.Index]);
}
}
答案 0 :(得分:0)
为什么不试试
RequestedEmpGrid.Rows.Remove(ForRequestRow)
它只会从gridview中删除行,但不会从Data source中删除,所以不要重新绑定gridview,因为它会再次添加已删除的行。
如果你想从数据源中删除,只需从DB中删除所选行,然后重新绑定gridview。
答案 1 :(得分:0)
您可以尝试以下代码:
foreach (DataGridViewRow requestRow in RequestedEmpGrid.Rows)
{
if (Convert.ToBoolean(requestRow.Cells[MarkColumn.Name].Value))
{
RequestedEmpGrid.Rows.Remove(requestRow);
}
}
或者这个:
foreach (DataGridViewRow requestRow in RequestedEmpGrid.Rows)
{
if (Convert.ToBoolean(requestRow.Cells[MarkColumn.Name].Value))
{
RequestedEmpGrid.Rows.RemoveAt(requestRow.Index);
}
}
<强>更新强>: 怎么样?
for (int i = RequestedEmpGrid.Rows.Count; i >= 0; i--)
{
var row = RequestedEmpGrid.Rows[i];
if (Convert.ToBoolean(row.Cells[MarkColumn.Name].Value))
{
RequestedEmpGrid.Rows.RemoveAt(i);
}
}