2011-06-21 68 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; 
相關問題