繁体   English   中英

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

[英]How to get the row index of multiple checked in checkbox column of datagridview 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]);
                        }
                    }

你为什么不尝试

RequestedEmpGrid.Rows.Remove(ForRequestRow)

它只会从gridview中删除行,而不是从Data source中删除行,因此不要重新绑定gridview,因为它将再次添加已删除的行。

而且,如果您也想从数据源中删除,只需从数据库中删除选定的行,然后重新绑定gridview。

您可以尝试以下代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM