数据网格视图行索引在刷新时超出范围异常

本文关键字:范围 异常 刷新 网格 数据网 视图 索引 数据 | 更新日期: 2023-09-27 18:34:20

我的 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)

如果您还有其他需要查看的内容,请告诉我。我想知道当刷新发生时是否疯狂,因为它仍然认为第二行在那里?

数据网格视图行索引在刷新时超出范围异常

好的,我稍微更改了一下代码,它现在可以工作了。在刷新之前,我必须先从 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();
    }