我有一個文本框,並且一個對象綁定了文本。在代碼中,我需要找到綁定的對象。如何找到綁定到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
你是指對象的有界屬性? –