这个问题的答案可能是“不使用绑定导航器时不使用键入的数据集”。 然而,我很好奇我所看到的行为。

因此,我创建了一个表单,其中每个控件都是从数据源资源管理器中拖出的。 我删除了Binding Navigator,因为它很丑陋并且不适合这种特殊形式。 我添加了一个ListBox并将DataSource设置为BindingSource 请注意,ListBox没有绑定,它只是从BindingSource填充自己。 通过我没有指望的一些魔力,在ListBox中移动导航BindingSource,所有其他控件都相应地更新。

我可以对绑定控件进行更改,并在BindingSource上显式调用EndEdit,然后通过表适配器更新DataSource。效果很好。

当我在绑定控件中进行更改并单击ListBox中的新选项时,我希望能够检查更改并提示保存或重置(如果有)。

这是我无法弄清楚的奇怪部分。

无论我附加什么事件,DataSet.HasChanges在第二个ListBox更改之前都不会返回true。 我搜索并尝试了几十条建议,其中大多数都是荒谬的,但有些建议似乎很有希望。 没有运气。

编辑:这不是重要的第二次点击,而是当您点击原始(已修改)项目时。

有帮助吗?

解决方案

自从提出问题以来,我对BindingSources,DataSet和TableAdapters有了更多的了解。

这是有效的:

    private void MyListBox_Click(object sender, EventArgs e)
    {
        this.myBindingSource.EndEdit();
        if (myDataSet.HasChanges())
        {
            if (MessageBox.Show("Save changes?", "Before moving on", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                myTableAdapter.Update(myDataSet.myDataTable);
            }
            else
            {
                myDataSet.RejectChanges();
            }
        }
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top