【发布时间】:2012-08-29 08:43:25
【问题描述】:
C#、VS-2010、winforms
一般来说,我想使用可绑定的 MyProperty 创建用户控件。但是我遇到了一些问题:当前行更改时数据行被修改。
您可以下载 C# 项目并自己尝试: test_bind.zip
为了简单起见,我确实遵循了:
- 使用
- 创建测试表单
- dataGridView(设置为只读),
- 文本框,
- 一些类型化的数据集和一些表
- 绑定源
- 将 bindingSource 绑定到表中
- 将 dgv 绑定到 bindingSource
- 将 TextBox.Text 绑定到 bindingSource 到某个文本列(“名称”)
- 在带有一些数据的表单加载填充表上。 (如果您手动添加行,请不要忘记 AcceptChanges())
- 为表 xxx_ColumnChanging(...) 添加事件处理程序并在此处设置断点
都是标准步骤,没什么特别的
运行
如预期 - dgv 中的行,文本框中的当前名称,单击网格中的不同行... 只有当我修改文本框中的文本时,我才会在断点处停止。
让我们修改程序,并将 textBox 绑定到不同的属性而不是 Text - 比如说 Tag。 将 DataSourceUpdateProperty 设置为“OnValidation”或“OnPropertyChanged”。
运行
现在当前行被修改。 !!!
当我使用带有虚拟属性的 UserControl 而不是 textBox 时,也会发生同样的情况
String MyProperty { 设置;得到; }
如何将用户控件中的自定义属性与与TextBox.Text的行为相同?
注意: 绑定属性本身不是问题。问题是:当我绑定到标准 TextBox.Text 属性时 - 一切都好文我绑定到任何其他属性(标签)或用户控件中的自定义属性 - 然后 DATASOURCE 总是为当前行修改
【问题讨论】:
-
您是否在询问如何在您的 UserControl 上绑定一个属性 - 在幕后绑定到该 UserControl 上的 TextBox?
-
绑定属性本身没有问题。问题是:当我绑定到标准 TextBox.Text 属性时 - 一切都好文我绑定到任何其他属性(标签)或用户控件中的自定义属性 - 然后 DATASOURCE 总是为当前行修改
标签: c# winforms data-binding binding user-controls