0

C# アプリケーションにデータ グリッド ビューがあります。行を強調表示して削除を押すと、行は削除されますが、更新および更新コマンドを実行すると、範囲外の例外が発生します

private void btnDeleteMember_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow item in this.dgvAllFaculty.SelectedRows)
    {
        int row = item.Index;
        FacultyMember member = memberList[row];

        if (row >= 0)
        {
            memberList.RemoveAt(row);

            Save();
            this.dgvAllFaculty.Update();
            this.dgvAllFaculty.Refresh();
            return;
        }

     }
}

デバッグ中に、更新呼び出しで失敗することに気付きました。エラーは次のとおりです。

System.IndexOutOfRangException: Index 1 does not have a value
  at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
  at
System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)

他に確認する必要がある場合は、お知らせください。更新が発生しているときに、2行目がまだあると思っているのではないかと思っていますか?

4

1 に答える 1

0

OK、コードを少し変更したところ、現在は機能しています。リフレッシュする前に、最初にjsonファイルからデータをリロードする必要がありました。

private void btnDeleteMember_Click(object sender, EventArgs e)
    {
        int count = this.dgvAllFaculty.SelectedRows.Count;

        foreach (DataGridViewRow item in this.dgvAllFaculty.SelectedRows)
        {
            int i = item.Index;
            FacultyMember member = memberList[i];
            memberList.RemoveAt(i);
            Save();
        }

        if (count > 1)
        {
            MessageBox.Show(String.Format("{0} faculty memebers deleted", count));
        }
        else
        {
            MessageBox.Show("Faculty Member Deleted");
        }

        // Load the newest data from file before refreshing the view
        ViewAll_Load(sender, e);
        this.Refresh();
    }
于 2014-12-15T19:10:47.800 に答える