如何获取datagridview C#的多个已签入复选框列的行索引

时间:2012-01-23 07:06:47

标签: c#

我正在尝试删除未绑定的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]);
                        }
                    }

2 个答案:

答案 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);
    }
}