用户控件Data Binding属性设置无法保存的技术求助
用户控件中数据绑定属性无法保存的问题
问题描述
- 用户控件包含一个查找对象
- 当前属性实现代码:
[Bindable(true)] public CalcEdit ToplamMiktari { get { return this.TxtToplamMiktari; } set { this.TxtToplamMiktari = value; } }
- 在窗体中使用该用户控件时,将数据库返回的数据字段绑定到控件的
Databindings属性 - 保存并关闭窗体后重新打开,之前设置的绑定完全丢失
解决方案
1. 暴露控件值而非控件实例
当前属性直接返回CalcEdit控件对象,设计器无法序列化控件引用的绑定设置。应改为暴露控件的值属性(比如数值类型的Value或文本类型的Text):
// 若为数值类型 [Bindable(true)] public decimal ToplamMiktari { get { return this.TxtToplamMiktari.Value; } set { this.TxtToplamMiktari.Value = value; } } // 若为文本类型 [Bindable(true)] public string ToplamMiktari { get { return this.TxtToplamMiktari.Text; } set { this.TxtToplamMiktari.Text = value; } }
2. 添加设计器序列化特性
通过DesignerSerializationVisibility特性明确告诉设计器序列化属性值,需引用System.ComponentModel命名空间:
[Bindable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public decimal ToplamMiktari { get { return this.TxtToplamMiktari.Value; } set { this.TxtToplamMiktari.Value = value; } }
3. 检查绑定设置的目标属性
在窗体设计器中绑定数据时,确保选择的是你定义的ToplamMiktari属性,而非用户控件内部的TxtToplamMiktari控件属性。
4. 验证设计器生成代码
关闭设计器后查看窗体的.Designer.cs文件,确认是否生成了针对ToplamMiktari属性的绑定代码,示例如下:
this.yourUserControl1.DataBindings.Add(new System.Windows.Forms.Binding("ToplamMiktari", this.yourBindingSource, "DatabaseFieldName", true));
若未生成此类代码,需回到前两步调整属性设计。
内容的提问来源于stack exchange,提问作者Tunc Gulec
相关产品推荐
相关产品推荐

