6

当我尝试删除 datagridview 中的最后一项时,我收到以下消息。

DataBinding 在列表中找不到适合所有绑定的行。

我的绑定设置如下。

ExtendedBindingList<MyClass> bl = new ExtendedBindingList<MyClass>(GetDataFromDB());
BindingSource bs = new BindingSource();
bs.DataSource = bl;
dgv.DataSource = bs;

ExtendedBindingList 只是我拼凑起来的一个简单的东西,用于实现排序和过滤以及一些基本的状态持久性。dgv 是 DataGridView。GetDataFromDB 返回 MyClass 的列表。

仅当我尝试使用以下方法从 datagridview 中删除最后一项时才会出现此问题:

bs.RemoveCurrent();

在所有其他时间都有效。我对解决方案的唯一提示是删除所有绑定并重新应用它们,但这似乎不是一个理想的解决方案。

编辑 只有在 BindingList 成功删除最后一个有问题的项目后才会引发异常。它被抛出在外部代码中,所以我无法确切地知道是什么抛出了它。

所以,我在这里,向SO寻求帮助:)。

在此先感谢,贾斯汀

4

2 回答 2

0

这是我从网格中删除选定行的方法:

private void btnDelete_Click(object sender, EventArgs e)
{
  if (grid.CurrentRow == null) return;
  var selectedItem = grid.CurrentRow.DataBoundItem as PartGroup;
  if (selectedItem != null && 
    UIHelper.ShowQuestion("Are you sure you want to delete selected row?") == System.Windows.Forms.DialogResult.Yes)
  {
    groups.Remove(selectedItem);
  }
}

组是我的 BindingListEx(Of T)。

希望能帮助到你。

于 2009-04-29T21:53:49.287 回答
0

[对不起,不是真正的答案,但我觉得这很有价值,因为没有给出答案。]

我在使用 .NET Compact Framework 2.0 时遇到了完全相同的情况。测试将其跟踪到使用 NumericUpDown.DataBindings.Add() 将控件绑定到源的点。此后,如果该项是源中的最后一项,则使用 RemoveCurrent() 将产生错误。在该绑定之前(或者如果它被跳过),错误将永远不会出现。

其他控件绑定到同一个源——TextBox 和 ComboBox——但它们不会导致这种行为。只有 NumericUpDown 控件。

于 2013-10-15T22:56:39.097 回答