【问题标题】:vb.net make databindings read onlyvb.net 使数据绑定只读
【发布时间】:2012-03-06 22:24:29
【问题描述】:

我在一个 winform 应用程序中有几个控件,我使用代码添加了数据绑定。

Dim tblWrapper As ObliqueQCAndSpliceTool.TableWrapper = New ObliqueQCAndSpliceTool.TableWrapper(tbl, idField.Name)
tblWrapper.UseCVDomains = True

bindSource = New BindingSource
bindSource.DataSource = tblWrapper
bindMgr = BindingContext(bindSource)

bindSource.SuspendBinding()

Dim idBinding As Binding = New Binding("Text", bindSource, idField.Name)
txtPointID.DataBindings.Add(idBinding)

然后我有其他代码可以在用户浏览列表中的记录时自动更改这些控件中的值。我已经请求添加一个简单的按钮,该按钮将禁用/重新启用这些控件的编辑。换句话说,启用后,用户或程序可以编辑控件,新值将保存在源数据集中。禁用后,控件仍应显示源数据集中的值,但用户和程序都应该能够更改这些值。

我查看了创建数据绑定的 BindingList(tablewrapper)和 BindingSource 对象的 AllowEdit 属性,但没有运气。

有没有办法在不更改每个控件或重置所有绑定的情况下将所有数据绑定更改为只读?

更新:

我尝试了@LarsTech 提供的解决方案,但由于围绕绑定设置方式的一些范围问题,我无法在不重新创建所有绑定的情况下修改更新模式。我决定简单地禁用所有以编程方式更改控件中值的代码并在按钮设置为禁用时禁用所有控件会更容易。

【问题讨论】:

  • 修改视图而不是数据源。您可以将视图设为只读,并可以在关联的 .cs 文件中的 on_click 侦听器中更改该属性。
  • 很遗憾,该数据集不在传统数据库中,因为它是地理信息系统中的空间数据集。我不确定在这种情况下我是否使用视图。

标签: vb.net winforms data-binding readonly


【解决方案1】:

尝试指定DataSourceUpdateMode

Dim idBinding As New Binding("Text", bindSource, idField.Name, _
                             False, DataSourceUpdateMode.Never)

来自DataSourceUpdateMode Enumeration

从不:
数据源永远不会更新,输入到控件中的值也不会被解析、验证或重新格式化。

你可以直接改这个:

idBinding.DataSourceUpdateMode = DataSourceUpdateMode.Never

idBinding.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged

【讨论】:

  • 我可以对一个将应用于表单上所有控件的绑定源执行此操作吗?还是我必须遍历所有绑定的控件?
  • @Brian 我认为您几乎必须这样做。我只是不知道如何从 DataSource 本身做到这一点。
  • 我无法按照您的建议进行操作。我已经用更多信息更新了我的帖子。感谢您的帮助。
猜你喜欢
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 2011-07-20
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多