2011-06-21 33 views
1

我有一个文本框,并且一个对象绑定了文本。在代码中,我需要找到绑定的对象。如何找到绑定到winform文本框的对象

我正在使用Windows.Forms.TextBox我将DataBinding-Text绑定到任何对象名称字段。这是在设计时完成的。在代码中,我需要弄清楚绑定到这个TextBox的对象是什么。

+0

provide sa用于您的问题的简单代码 –

+0

没有任何代码示例是我所要求的。编辑值将在设计时设置。 – user698625

+0

你是指对象的有界属性? –

回答

0

对象是否存储在文本框的标记中?

object o = textbox.Tag; 
1

在您的代码在运行时,假设你绑定的对象是一些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 
} 

希望这有助于。

+0

这不会返回数据绑定的对象。 – user698625

0

万一有人仍然需要知道这一点:textBox1.DataBindings("Text").BindingMemberInfo.BindingField

0

查询文本框的DataBindings。所述BindingDataSource可以包含不同的东西:

  • Type对象描述对象的属性可以结合的类型。当表单加载并且尚未附加任何对象时,可能会出现这种情况。
  • A 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; 
相关问题