博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 自定义类型的DataBindings
阅读量:6343 次
发布时间:2019-06-22

本文共 1772 字,大约阅读时间需要 5 分钟。

自定义类型TextBoxEx,扩展了TextBox,增加了一个属性KeyText来保存后台的值(Tag已另作它用)。

程序里面需要将KeyText和DataTable的某个列绑定起来。

如果是TextBox,只需要简单处理即可:

txt.DataBindings.Add("Text", dt, colName, false, DataSourceUpdateMode.OnPropertyChanged);

如此,即可实现textbox和Datatable列的绑定,无论哪一个有修改,都会自动作用到另一个。

现在绑定的对象变成扩展的自定义控件TextBoxEx下的自定义属性KeyText,如上的绑定方式试过了,没有效果。即改变TextBoxEx的KeyText值,相应的DataTable里面的列下的值不会改变。这是怎么回事呢,问题的关键在后面的那句DataSourceUpdateMode.OnPropertyChanged上,到底什么时候会触发这个事件,又到底修改KeyText值的时候有没有触发这个事件呢。

原因没找到,但是应该是没有触发上面的事件。

解决方案有两种,第一种是我觉得比较挫的招,曲线解决。

这里的DataSourceUpdateMode下还有两个选项,一个是Never,还有一个是OnValidation。Never没什么功夫可做,可以在OnValidation上下手。

代码:

public class TextBoxEx : TextBox{    string _keyText;    [Browsable(false)]    public string KeyText    {        get { return _keyText; }        set        {            if (_keyText != value)            {                _keyText = value;                               OnValidating(new CancelEventArgs(false));            }        }    }}

在KeyText的set里面加上OnValidating,手动触发验证事件。方案可行,只是感觉有点小挫。

 

第二招是武林正派,从OnPropertyChanged上面下功夫。

代码:

public class TextBoxEx : TextBox, INotifyPropertyChanged{    string _keyText;    [Browsable(false)]    public string KeyText    {        get { return _keyText; }        set        {            if (_keyText != value)            {                _keyText = value;                             OnPropertyChanged("KeyText");                          }        }    }    protected void OnPropertyChanged(string name)    {        PropertyChangedEventHandler handler = PropertyChanged;        if (handler != null)        {            handler(this, new PropertyChangedEventArgs(name));        }    }}

继承INotifyPropertyChanged,实现OnPropertyChanged,顿感高富帅了,有木有。

当然,上面两种,在绑定的时候要分别选择DataSourceUpdateMode.OnValidation和DataSourceUpdateMode.OnPropertyChanged。

转载地址:http://vdkla.baihongyu.com/

你可能感兴趣的文章
[Android UI] Shape详解 (GradientDrawable)
查看>>
边学边体验django--HttpRequest 对象
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
多态初步认识
查看>>
数组处理:118
查看>>
为什么要优先使用组合而不是继承 .
查看>>
【MySql】权限不足导致的无法连接到数据库以及权限的授予和撤销
查看>>
android实现gif图与文字混排
查看>>
安卓新标准出台_告别乱弹窗_你的手机真会省电么?
查看>>
hdu1384Intervals(差分约束)
查看>>
python 字符编码
查看>>
269D Maximum Waterfall
查看>>
C++11 多线程
查看>>
sed-加速你在Linux的文件编辑
查看>>
HttpServer发送数据到kafka
查看>>
phpcms站---去除域名绑定目录中的HTML
查看>>
2017-5-3 打印控件、MDI 窗体容器
查看>>
20155303 2016-2017-2 《Java程序设计》第九周学习总结
查看>>
一次很失败的抄底
查看>>