我有一个文本框,并且一个对象绑定了文本。在代码中,我需要找到绑定的对象。如何找到绑定到winform文本框的对象
我正在使用Windows.Forms.TextBox我将DataBinding-Text绑定到任何对象名称字段。这是在设计时完成的。在代码中,我需要弄清楚绑定到这个TextBox的对象是什么。
我有一个文本框,并且一个对象绑定了文本。在代码中,我需要找到绑定的对象。如何找到绑定到winform文本框的对象
我正在使用Windows.Forms.TextBox我将DataBinding-Text绑定到任何对象名称字段。这是在设计时完成的。在代码中,我需要弄清楚绑定到这个TextBox的对象是什么。
对象是否存储在文本框的标记中?
object o = textbox.Tag;
尝试在运行时查询文本框的DataBindings财产。
在您的代码在运行时,假设你绑定的对象是一些MyObject来:
if (textBox1.DataBindings.Count == 1)
{
var myObj = textBox1.DataBindings[0].DataSource as MyObject;
if (myObj != null)
// do something with the bound object
else
// well, found data bound object but it was not a MyObject... Handle as appropriate
}
希望这有助于。
这不会返回数据绑定的对象。 – user698625
万一有人仍然需要知道这一点:textBox1.DataBindings("Text").BindingMemberInfo.BindingField
添
查询文本框的DataBindings
。所述Binding
的DataSource
可以包含不同的东西:
Type
对象描述对象的属性可以结合的类型。当表单加载并且尚未附加任何对象时,可能会出现这种情况。BindingSource
。在这种情况下,我们必须查询此绑定源的DataSource
。null
。如果我们有BindingSource
,我们可以再次有一个Type
对象。为了获得绑定应该绑定的对象类型,我写了这个递归调用自己的帮助器方法。 (使用C#7.0语法)
private Type GetBoundType(object dataSource)
{
switch (dataSource) {
case Type type:
return type;
case BindingSource bindingSource:
return GetBoundType(bindingSource.DataSource);
default:
return dataSource?.GetType();
}
}
你可以这样调用(使用C#7.0语法):
Binding binding = textBox.DataBindings["Text"];
if (binding != null && GetBoundType(binding.DataSource) == expectedType) {
...
}
如果你知道实际的数据对象已绑定到您可以获得的数据源:
object entity = binding.DataSource is BindingSource bs ? bs.DataSource : binding.DataSource;
provide sa用于您的问题的简单代码 –
没有任何代码示例是我所要求的。编辑值将在设计时设置。 – user698625
你是指对象的有界属性? –