为什么在数据库更改后Bindinglist没有更新?
我正在Winforms项目中工作。其中每当我添加或编辑数据库中的记录,并关闭我想我的列表更新。为什么在数据库更改后Bindinglist没有更新?
但在搜索表单中我的列表没有得到更新。为此,我必须从数据库中重新绑定数据。当我搜索并了解绑定列表时,我使用了绑定列表而不是列表,但它仍然不起作用。
这里是我的代码
///
/// Represent FirstName Fields
///
public String FirstName { get; set; }
_MemberMaster.FirstName = Convert.ToString(txtFirstName.Text);
string result _IMemberMasterController.UpdateMemberMaster(_MemberMaster);
更新后我闭上我的形式,但在搜索表单列表不更新。当列表得到更新时,我希望datagridview也得到更新。
我解决我的问题IUNotifyProertyChangedEvent ....
我正要在评论中回复,但我想给出示例代码。
代码后创建一个表单,例如
Form newForm = new Form();
newForm.Show()
或任何你使用,使这种形式,增加formClosed事件处理程序:
Form newForm = new Form();
newForm.FormClosed += new FormClosedEventHandler(f_FormClosed);
newForm.Show();
然后你就可以控制哪些当表单关闭时发生,所以你可以很容易地更新绑定列表。
void f_FormClosed(object sender, FormClosedEventArgs e)
{
myBindingList.ResetBindings(false);
}
编辑
而在你的BindingList构造函数:(假设它包含字符串)
private BindingList<string> _mybindinglist;
public BindingList<string> myBindingList
{
get { return _mybindinglist; }
set
{
_mybindinglist= value;
OnPropertyChanged("myBindingList"); // or RaisePropertyChanged or whatever you used
}
}
正如你所说** myBindingList.ResetBindings(false); **但这不是像** myBindingList.ResetBindings(); **的绑定列表,但它的为Bindingsource并尝试两者,但仍然不woking –
只是为了确认,你正在实施INotifyPropertyChanged,对吧?否则,绑定列表在其更改时不会刷新。参考:[DataGridView绑定到BindingList不会刷新值更改时](http://stackoverflow.com/a/29266719/6741868) –
是的,我在MemberMaster实现INotifyPropertyChanged,但我知道PropertyChangedEvent总是空的可以哟告诉我如何以搜索的形式致电该事件 –
查找到[BindingSource的.ResetBindings方法](https://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.resetbindings%28VS.80%29.aspx)。基本上在关闭表单之前调用'myBindingList.ResetBindings(false);'。 true或false为:*如果数据模式已更改,则为true;如果只有值已更改,则为false。* –
@KeyurPATEL但mybindinglist在searchfrom中,而我以另一种形式更新数据。当我关闭编辑成员表格,然后我可以去搜索表格 –