我有一种在Windows应用程序中刷新DataGridView
的方法。这种方法有效。但是当我从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
我的错误在哪里?如何找到哪个控件引发此异常并修复它?
答案 0 :(得分:0)
最后我发现问题所在。当我们使用UserDeletingRow
事件时,创建了包含当前删除行的事件参数。
当我调用另一个函数删除当前记录表单数据库和Grid数据源时,事件参数索引更改为-1。我还在RefreshGrid()
方法上更改了网格的数据源。因此,网格行完全更改,并且事件arg参数中的最后一行不可用。
要解决此问题并防止出现该异常,我们需要取消事件arg参数来重新启用它。我改变了UserDeletingRow
方法,如下所示,它有效!
if (ReadyForDelete)
{
Guid Id = new Guid(e.Row.Cells["Id"].Value.ToString());
DeleteBranchPerson(Id);
e.Cancel = true; // Set this to cancel event arg.
}
感谢所有帮助过我的专家。 : - )