代码之家  ›  专栏  ›  技术社区  ›  Justin Drury

删除列表中最后一项时数据绑定出现InvalidOperationException

  •  6
  • Justin Drury  · 技术社区  · 17 年前

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

    我有我的绑定设置如下。

    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成功删除最后一个有问题的项之后,才会引发异常。它是在外部代码中抛出的,所以我不知道到底是什么在抛出它。

    所以,我来了,请求一些帮助:)。

    提前谢谢,

    2 回复  |  直到 17 年前
        1
  •  0
  •   nightcoder    17 年前

    下面是如何从网格中删除选定行:

    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);
      }
    }

    希望有帮助。

        2
  •  0
  •   AdvApp    12 年前

    [抱歉,我没有给出答案,但我觉得这很有价值,因为没有给出答案。]

    我使用.NETCompactFramework2.0得到了完全相同的情况。测试追踪到NumericUpDown.DataBindings.Add添加()用于将控件绑定到源。在此之后,如果该项是源中的最后一项,则使用RemoveCurrent()将产生错误。在绑定之前(或者如果它被跳过),错误永远不会出现。

    推荐文章