最近在重构以前的代码,有个对各种不同控件绑定数据的功能。
比如 textbox1.DataBindings.Add("Text", this.BindingSource, entity.PropertyName); 给TextBox绑定相应的值。
但是各种控件赋值的属性名是不同的,有些是Text、Value、或者SelectText等等。
为了统一赋值,所以定义了一个接口public interface IDataValue
{
object DataValue{get;set}
}所有控件,实现该接口,通过DataValue赋值。现在统一获取或设置值是OK了,但是绑定数据源出现了问题。
textbox1.DataBindings.Add("DataValue", this.BindingSource, entity.PropertyName);
这样绑定,TextBox能显示值,但是输入的值赋值无效,无法修改数据源。绑定到Text属性,可正常修改。
TextBox实现IDataValue如下public virtual object DataValue
{
get
{
if (string.IsNullOrEmpty(this.Text))
{
return null;
}
return this.Text.Trim();
}
set
{
if (this.Text != value.ToString())
{
this.Text = newValue;
}
}
是不是文本框内的值,只和Text属性有关,跟DataValue无关呢。这要如何实现?
比如 textbox1.DataBindings.Add("Text", this.BindingSource, entity.PropertyName); 给TextBox绑定相应的值。
但是各种控件赋值的属性名是不同的,有些是Text、Value、或者SelectText等等。
为了统一赋值,所以定义了一个接口public interface IDataValue
{
object DataValue{get;set}
}所有控件,实现该接口,通过DataValue赋值。现在统一获取或设置值是OK了,但是绑定数据源出现了问题。
textbox1.DataBindings.Add("DataValue", this.BindingSource, entity.PropertyName);
这样绑定,TextBox能显示值,但是输入的值赋值无效,无法修改数据源。绑定到Text属性,可正常修改。
TextBox实现IDataValue如下public virtual object DataValue
{
get
{
if (string.IsNullOrEmpty(this.Text))
{
return null;
}
return this.Text.Trim();
}
set
{
if (this.Text != value.ToString())
{
this.Text = newValue;
}
}
是不是文本框内的值,只和Text属性有关,跟DataValue无关呢。这要如何实现?
解决方案 »
- 调用CommonDialog.ShowSave 出错提示 ActiveX 不能创建对象?
- c++的main函数是不是与asp.net 的pageload函数一样?
- 新手求教winform load事件问题
- 我编程生成的xls文件里面的数字变成文本,怎么才能变成数字啊?这样在一打开Excel时,就可以对里面的数字求和等。
- 跪求!!!动态添加播放器的音乐地址!!!!!马上就要答辩了,可是我的这项功能还没有实现!!!!
- 是连接问题吗!快:在线等!!
- 求C# 调用ADB.EXE的方法
- 请教?如何想在每天八点执行同一个任务,该怎样写程序?类似与WINDOWS的计划任务
- 我装ftp服务器,可我的21端口总连接不到,怎么知道谁占用!
- 我写了一个精确定时的类库,有谁要吗?
- 如何改变CheckListBox 各项之间的距离。
- 不能像java那样,在一个构造函数中调用本类的另一个构造函数?
貌似不能。
绑定到Text,只要焦点离开数据源就被修改了。
但是DataValue不行,无法触发set。
比如 你 GridView用 void BindData<T>(DataBindControl control,T datasouce)
{}void BindData<T>(ListControl control,T datasouce)
{
control.DataFieldText
.
.
.
}以上的 方式。
只是在修改控件上的值后,无法触发set