2012-04-20 7 views
0

基本的な質問です。これは1日完全に検索しました。ネストされたプロパティにコントロールをバインドする

My AccountオブジェクトにはKeyTypeオブジェクトがあり、NameプロパティはLinqからSQLに生成されます。

私のBindingSource:

var result = from account in Schema.Accounts select account as Account; 
Data = new ComplexBindingList<Account>(result.ToList<Account>()); 
DataSource = Data; 
ResetBindings(true); 

マイComplexBindingListはブラッドリー・スミスによってブログから借りたが、このインタフェースを持っている:

public class ComplexBindingList<T> : List<T>, ITypedList 

これは私のDataGridView上で動作します:

Columns.Add(CreateColumn("KeyType.Name", "Key Type"); 

データの罰金このコードは例外の直前で動作するため、

var v = account.KeyType.Name; 

これはTextBoxでは機能しません。私は例外を取得「『EPM.BODA.KeyType』オブジェクトのプロパティアクセサ 『名前』を以下の例外がスローされました: 『オブジェクトは、ターゲット・タイプと一致していません。』」

// Controller is my BindingSource 
Binding binding = EditField.DataBindings.Add("Text", Controller, "KeyType.Name"); 

が、私は一般的な印象その反射ISN」を持っています適切に働いていますが、ギャップを埋める方法の詳細を見つけることはできません。助けを歓迎します。

+0

ここでアカウントを初期化しましたか?あなたは結果を意味しません.KeyType.Name? –

答えて

0

これは単純な回避策としてこれまで私が行ってきたことです。

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)); 
関連する問題