这个问题的答案可能是“不使用绑定导航器时不使用键入的数据集”。 然而,我很好奇我所看到的行为。
因此,我创建了一个表单,其中每个控件都是从数据源资源管理器中拖出的。 我删除了Binding Navigator,因为它很丑陋并且不适合这种特殊形式。 我添加了一个ListBox并将DataSource设置为BindingSource 请注意,ListBox没有绑定,它只是从BindingSource填充自己。 通过我没有指望的一些魔力,在ListBox中移动导航BindingSource,所有其他控件都相应地更新。
我可以对绑定控件进行更改,并在BindingSource上显式调用EndEdit,然后通过表适配器更新DataSource。效果很好。
当我在绑定控件中进行更改并单击ListBox中的新选项时,我希望能够检查更改并提示保存或重置(如果有)。
这是我无法弄清楚的奇怪部分。
无论我附加什么事件,DataSet.HasChanges在第二个ListBox更改之前都不会返回true。 我搜索并尝试了几十条建议,其中大多数都是荒谬的,但有些建议似乎很有希望。 没有运气。
编辑:这不是重要的第二次点击,而是当您点击原始(已修改)项目时。
答案 0 :(得分:0)
自从提出问题以来,我对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();
}
}
}