【发布时间】:2013-05-28 11:47:40
【问题描述】:
我有一种方法可以在 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 文件中有异常!请注意,刷新功能完全可以在表单加载时正常工作。
这是最后的例外:
索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引
我的错误在哪里?如何找到引发此异常并修复它的控件?
【问题讨论】:
-
您有连接到 DataGridView 的事件吗?如果是这样,在其中放置断点以观察在更改网格的 DataSource 时是否调用了一个或多个。这些事件可能包含无法正确处理数据源更改的代码
-
是的。事件连接到网格,我使用断点逐步检查这些方法。他们都成功完成了,但最后我得到了这个例外。不知道是什么方法或控件引发了这个错误?
-
我正在阅读有关在更改数据源之前调用
dgv_PeopleInBranch.EndEdit();或this.BindingContext[this.dgv_PeopleInBranch.DataSource].EndCurrentEdit();的信息。 -
谢谢史蒂夫。第一行没有改变任何东西,但第二个代码引发了这个错误:
Value cannot be null. Parameter name: dataSource -
在哪一行出现错误?
标签: c# winforms exception datagridview