C# 控件DataBinding问题
来源:互联网 发布:零售业数据公式 编辑:程序博客网 时间:2024/06/05 00:08
//此为第三次重改结果
//第一次,常规绑定,即直接绑定_binSource数据源,即:Pic.DataBindings.Add(new Binding("Image", bdSource, _Field);
//问题:数据无法同步刷新,前台控件的数据值无法同步写入绑定值内
//第二次,添加第四/第五参数,即true, DataSourceUpdateMode.OnPropertyChanged;
//问题:前台控件数据更新正常,但手动修改值时,不能写入绑定值内,原因为前台控件操作会激活焦点失去事件,而此事件将激活绑定事件,但手动修改则不会激活
//以上内容在Dev15的控件中不存在此类情况.我是纯找虐型....
//第一次,常规绑定,即直接绑定_binSource数据源,即:Pic.DataBindings.Add(new Binding("Image", bdSource, _Field);
//问题:数据无法同步刷新,前台控件的数据值无法同步写入绑定值内
//第二次,添加第四/第五参数,即true, DataSourceUpdateMode.OnPropertyChanged;
//问题:前台控件数据更新正常,但手动修改值时,不能写入绑定值内,原因为前台控件操作会激活焦点失去事件,而此事件将激活绑定事件,但手动修改则不会激活
//以上内容在Dev15的控件中不存在此类情况.我是纯找虐型....
绑定方法:
private BindingSource bdSource = new BindingSource();//此设计将解决外部赋值无法刷新绑定值的问题
//先用BindingSource 承接外部数据源
bdSource.DataSource = _binSource;
//2.清除原控件绑定内容
Pic.DataBindings.Clear();
//3.添加控件的绑定,而非直接的数据源绑定
//3.添加控件的绑定,而非直接的数据源绑定
Pic.DataBindings.Add(new Binding("Image", bdSource, _Field, true, DataSourceUpdateMode.OnPropertyChanged));
//手动赋值时:
//手动赋值时:
public void SetValue(object value)
{
Pic.Image = (Image)value;
bdSource.EndEdit();//此行不可少,赋值后必须加endedit才会更新对应的绑定值
}
bdSource.EndEdit();//此行不可少,赋值后必须加endedit才会更新对应的绑定值
}
//第三次BUG,多控件绑定时,会判断DBNULL的情况
//此为引用自http://blog.csdn.net/jjhua/article/details/24326171 解决方法
using System.ComponentModel;
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
double a;
double b;
public double A {
get { return this.a; }
set
{
if (value != this.a)
{
this.a = value;
this.RaisePropertyChanged("A");
}
}
}
public double B { get; set; }
private void RaisePropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
//此BUG最终解决方案及架构中的特殊解决办法:
//一,主控件中绑定方法
bdSource.DataSource = _binSource;
dEdit.DataBindings.Clear();
//第四个参数为强制格式转换开启
dEdit.DataBindings.Add("ValueX", bdSource, _Field, true, DataSourceUpdateMode.OnPropertyChanged);
//二.子控件中引用接口INotifyPropertyChanged
public DateTime? ValueX
{
get { return valueX; }
set
{
if (value == null)
{
valueX = value;
SetNullText();
}
else
{
this.CustomFormat = FormatString;
this.Value = value.Value;
valueX = value;
}
//this.OnValueChanged(null); //调用此事件无效 待查验
//return;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("valueX"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
第N次解决方案结果示例:[PropertyChanged方法需绑定的值为当前控件属性,子控件无法处理,只适用于继承控件]
Pic.DataBindings["Image"].WriteValue();
来源:http://www.cnblogs.com/jdmei520/archive/2009/02/23/1396658.html
//此为引用自http://blog.csdn.net/jjhua/article/details/24326171 解决方法
using System.ComponentModel;
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
double a;
double b;
public double A {
get { return this.a; }
set
{
if (value != this.a)
{
this.a = value;
this.RaisePropertyChanged("A");
}
}
}
public double B { get; set; }
private void RaisePropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
//此BUG最终解决方案及架构中的特殊解决办法:
//一,主控件中绑定方法
bdSource.DataSource = _binSource;
dEdit.DataBindings.Clear();
//第四个参数为强制格式转换开启
dEdit.DataBindings.Add("ValueX", bdSource, _Field, true, DataSourceUpdateMode.OnPropertyChanged);
//二.子控件中引用接口INotifyPropertyChanged
public DateTime? ValueX
{
get { return valueX; }
set
{
if (value == null)
{
valueX = value;
SetNullText();
}
else
{
this.CustomFormat = FormatString;
this.Value = value.Value;
valueX = value;
}
//this.OnValueChanged(null); //调用此事件无效 待查验
//return;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("valueX"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
第N次解决方案结果示例:[PropertyChanged方法需绑定的值为当前控件属性,子控件无法处理,只适用于继承控件]
Pic.DataBindings["Image"].WriteValue();
来源:http://www.cnblogs.com/jdmei520/archive/2009/02/23/1396658.html
阅读全文
0 0
- C# 控件DataBinding问题
- Android DataBinding 配置问题
- c# 控件,自定义控件问题
- C#控件闪烁问题
- C# 遍历控件问题
- 使用databinding遇到的问题
- DataBinding 坑爹问题集
- 更新Gradle后Databinding问题
- android 使用DataBinding问题总结
- databinding的一个奇葩问题
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- 连续数组和的最大值
- qt中获取窗口位置和大小
- 树的存储结构之双亲孩子表示法
- 归并排序的点点滴滴
- 智慧城市:PC车牌识别sdk
- C# 控件DataBinding问题
- VS简易示波器(一):窗口布局及背景绘制
- java中静态块和静态变量的加载顺序
- C++ builder Debugger kernel BORDBK51.DLL is missing or not registered
- PHP加密解密函数之Xxtea
- ThinkPHP5之app第三方支付宝支付
- zookeeper搭建问题
- C语言:递归的简单介绍
- ajax表单提交使用serialize()方法解决中文乱码