簡體   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