none
關於 DataGridView 刪除 Row 時無法一次全部刪除! RRS feed

  • 問題

  • 請教各位先進,

    小弟要做一個功能,就是按下按鈕後,會刪除在 Checked = true 時的那一行 Row,

    不過卻發現只能一次刪掉一行,邏輯上應該一次全部刪掉才對ㄚ!

    是否哪一行少了?需要修正的地方!

    在第0個欄位是 CheckBox 屬性。

     

    Code Snippet

    for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
    {
        if (dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString() == "True")
        {
            this.dataGridView1.Rows.Remove(this.dataGridView1.Rows[i]);
        }
    }

     

    2008年3月27日 上午 08:14

解答

  •  

    應該是您用 i++ 的原故吧,因為當您進行Remove時您的Rows.Count數量及每一列的排列順序就不同了,所以必需從尾端往前刪才行。

     

     

    Code Snippet

    for (int i = this.dataGridView1.Rows.Count-1; i >=0 ; i--)
    {
        if (dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString() == "True")
        {
            this.dataGridView1.Rows.Remove(this.dataGridView1.Rows[i]);
        }
    }

     

     

    2008年3月28日 上午 02:32

所有回覆

  • 小弟用另一個方法解決了!

    Code Snippet

    int checkCountInt = 0;
    string checkAddressStr = "";

     

    for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
    {
        if (dataGridView1.Rows[i].Cells[24].EditedFormattedValue.ToString() == "True")
        {
            checkAddressStr += i.ToString() + ";";
            checkCountInt++;
        }
    }

     

    while (checkCountInt > 0)
    {
        this.dataGridView1.Rows.Remove(this.dataGridView1.Rows[Convert.ToInt32(checkAddressStr.Split(';')[checkCountInt - 1])]);
        checkCountInt--;
    }

     

    2008年3月27日 上午 10:04
  •  

    應該是您用 i++ 的原故吧,因為當您進行Remove時您的Rows.Count數量及每一列的排列順序就不同了,所以必需從尾端往前刪才行。

     

     

    Code Snippet

    for (int i = this.dataGridView1.Rows.Count-1; i >=0 ; i--)
    {
        if (dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString() == "True")
        {
            this.dataGridView1.Rows.Remove(this.dataGridView1.Rows[i]);
        }
    }

     

     

    2008年3月28日 上午 02:32
  • 感謝 曲峰前輩 的指導,

    果然是如此,謝謝提醒!

    2008年3月28日 上午 05:40