0

なぜこれが機能しないのですか?

    //::::::::::::::::::::::::::::::::::::
    private void uxClearButton_Click(object sender, EventArgs e)
    {
        clearDGV();
    }
    void clearDGV()
    {
        // remove selected rows 
        foreach (DataGridViewRow row in uxDGV.Rows)
        {
            uxDGV.Rows.Remove(row);
        } 
    }
    //:::::::::::::::::::::::::::::::::::

DGVはバインドされておらず、ユーザーがDGVに情報を入力しています。

私が得るエラーはInvalidOperationException was unhandled Uncommitted new row cannot be deleted.

編集

わかりました-自分で答えを見つけるように勧めてくれたSteveなどに感謝します!!

uxChargeBackDataGridView.Rows.Clear();
4

1 に答える 1

8

幸いなことに、これを行うためのメソッドが用意されています。次のようDataGridViewに呼び出すだけです。Clear

uxDGV.Rows.Clear();

エラーが発生した理由は、コミットされていない新しい行を削除しようとしたためです。(問題がわかれば、エラーは実際には素晴らしく有益です!)

新しい行は、行のブールIsNewRowプロパティによって識別されDataGridViewます。

あなたのコードでは、コレクションを変更するときにコレクションを反復処理するという問題もありました。したがって、次のようなことを行う必要がありました。ここでは、転送を繰り返しますが、毎回ゼロで削除します。

int rowCount = dataGridView1.Rows.Count;
for (int n = 0; n < rowCount; n++)
{
    if (dataGridView1.Rows[0].IsNewRow == false)
        dataGridView1.Rows.RemoveAt(0);
}
于 2012-07-19T14:33:11.823 に答える