将控件绑定到嵌套属性
本文关键字:嵌套 属性 绑定 控件 | 更新日期: 2023-09-27 18:31:53
基本问题,我已经详尽地搜索了一整天。
我的帐户对象有一个 KeyType 对象,该对象具有一个 Name 属性,全部由 Linq to SQL 生成。
我的绑定源:
var result = from account in Schema.Accounts select account as Account;
Data = new ComplexBindingList<Account>(result.ToList<Account>());
DataSource = Data;
ResetBindings(true);
我的 ComplexBindingList 借用自 Bradley Smith 的博客,有这样的界面:
public class ComplexBindingList<T> : List<T>, ITypedList
这适用于我的 DataGridView:
Columns.Add(CreateColumn("KeyType.Name", "Key Type");
数据很好,因为此代码在异常之前工作:
var v = account.KeyType.Name;
这在我的文本框上不起作用。我在对象"EPM"上收到异常"属性访问器'名称'。博达。KeyType"抛出以下异常:"对象与目标类型不匹配。
// Controller is my BindingSource
Binding binding = EditField.DataBindings.Add("Text", Controller, "KeyType.Name");
我有一个普遍的印象,反思不能正常工作,但似乎找不到如何填补空白的细节。为任何帮助干杯。
这是我
到目前为止所拥有的,作为一个简单的解决方法。
public virtual Binding GetBinding(string fieldName)
{
string[] pieces = fieldName.Split('.');
if ( pieces.GetLength(0) == 1 )
{
return new Binding("Text", this, fieldName);
}
else
{
return new Binding("Text",
Current.GetType().GetProperty(pieces[0]).GetValue(Current, null), pieces[1]);
}
}
// Calling the helper function and adding the binding
EditField.DataBindings.Add(Controller.GetBinding(mapping.FieldName));