DataGridView在刷新数据时删除异常

本文关键字:删除异常 数据 刷新 DataGridView | 更新日期: 2023-09-27 18:15:46

我有一个方法来刷新我的DataGridView在windows应用程序。这个方法有效。但是当我从Grid中删除一些行时,发生了一个异常并关闭了应用程序。

这是刷新函数:

private void RefreshGrid()
{
    try
    {
        picbx_Next.Enabled = false;
        picbx_Previous.Enabled = false;
        this.Cursor = Cursors.WaitCursor;
        people = context.People
            .Where(c => c.BranchPersons.FirstOrDefault().BranchId == _BranchId)
            .Select(c => new OrderingData
            {
                CellPhone = c.CellPhone,
                Id = c.Id,
                Firstname = c.FirstName,
                PersonDutyId = c.PersonDutyId,
                Surname = c.SurName
            })
            .OrderByDescending(c => c.PersonDutyId)
            .ToList();
        lst = new BindingList<OrderingData>(people);
        dgv_PeopleInBranch.DataSource = lst;
        picbx_Next.Enabled = true;
        picbx_Previous.Enabled = true;
        this.Cursor = Cursors.Default;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

这是我的删除函数

private void dgv_PeopleInBranch_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    if (dgv_PeopleInBranch.Rows.Count > 0)
    {
        if (ReadyForDelete)
        {
            Guid Id = new Guid(e.Row.Cells["Id"].Value.ToString());
            DeleteBranchPerson(Id);
        }
        else
        {
            e.Cancel = true;
        }
    }
}

当Delete函数成功执行时,我调用RefreshGrid()方法从数据库中加载新数据。但我有例外在我的program.cs文件!请注意,刷新函数在表单加载时完全没有任何错误。

这是最后的异常:

索引超出范围。必须非负且小于集合的大小。参数名称:index

我的错误在哪里,我如何找到哪个控件引发了这个异常并修复它?

DataGridView在刷新数据时删除异常

终于找到了问题所在。当我们使用UserDeletingRow事件时,创建了包含当前删除行的事件参数。

当我调用另一个函数来删除数据库和网格数据源的当前记录时,事件参数索引更改为-1。我还更改了RefreshGrid()方法上网格的数据源。因此,网格行完全改变,最后一行在事件参数中不可用。

要解决这个问题并防止该异常的发生,我们需要取消事件参数来释放该异常。我改变UserDeletingRow方法如下,它的工作!

if (ReadyForDelete)
{
    Guid Id = new Guid(e.Row.Cells["Id"].Value.ToString());
    DeleteBranchPerson(Id);
    e.Cancel = true; // Set this to cancel event arg.
} 
谢谢所有帮助过我的专家。: -)