“BindingSource绑定单个实体对象后在代码中赋值无效和无法显示”的解决方法
今天同事在开发过程中,使用bindingsource绑定一个对象,出现了一点问题。一般情况下,我们都会在界面控件上输入和修改数据,那么bindingsource所绑定的对象也会随着界面控件值的改变而改变。但是我的同事却出现了一个问题,如果是在代码中修改界面控件的值,再获取bindingsource所指向对象的值却没有改变;或者直接修改bindingsource所指向对象的值界面上的控件的值却没有随着改变。
仔细想想,应该是不论在对谁进行复制的时候,需要一个方法或者一个事件更新对象和界面,使对象和界面的值都保持一致。吃完饭后,做了一个例子,试了一些方法。其他的方法也能解决这种问题,并不是唯一的方法。
定义了一个简单的类:
public class Entity1
{
private string m_Name = string.Empty;
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
public int m_Age = 0;
public int Age
{
get
{
return m_Age;
}
set
{
m_Age = value;
}
}
}
窗体类定了一个成员变量 private Entity1 bind1 = new Entity1();
窗体初始化的代码:this.bindingSource1.DataSource = bind1;
第一种情况:在事件处理代码中对控件赋值,比如:
textEdit1.Text = "Control1";
textEdit2.Text = "11";
//对控件赋值的处理
this.bindingSource1.EndEdit();
通过调用“this.bindingSource1.EndEdit();”,bindingSource1所指向的对象bind1的值会进行更新,在后续的程序访问bind1就会是最新的值。如果不调用“this.bindingSource1.EndEdit();”,那么bind1的值将不会随着控件值的修改而进行修改。
第二中情况:在事件处理代码中对所绑定对象进行赋值,比如
bind1.Name = "program1";
bind1.Age = 22;
//对程序赋值的处理
this.bindingSource1.ResetBindings(false);
通过调用“this.bindingSource1.ResetBindings(false);”,界面控件上的值会进行更新,保持binding和界面控件的一致。如果不调用“this.bindingSource1.ResetBindings(false);”,界面上控件的值不会随着bind1的值的修改而更新。