2010-12-28 13 views
0

は、現在、私のリポジトリが私のDBからのデータを示していますIQueryableオブジェクトを返したIQueryableオブジェクトであり、私はグリッドで使用するためにBindingSourceにこれをバインドしますアクセス内容ソースは

public void BindTo(IQueryable elements) 
{ 
    BindingSource source = new BindingSource(); 
    source.CurrentChanged += new EventHandler(source_CurrentChanged); 
    source.DataSource = elements; 

    elementNavigator.BindingSource = source; 
    elementGridView.DataSource = source; 
} 

これをよく働く。しかし、ユーザーがグリッド内の行をクリックしたときに何かしたいと思っています。私はユーザーが選択している要素を特定するのに苦労しています。私の見解では

private void source_CurrentChanged(object sender, EventArgs e) 
{ 
    _presenter.ElementChanged(sender, e); 
} 

私のプレゼンターに:私は以下の持っている

public void ElementChanged(object sender, EventArgs e) 
{ 
    BindingSource source = (BindingSource)sender; 
    // Here I need to get the ID of the selected element in the source.Current property. 
    // HOW? 
} 

これは、[OK]を動作しているようです - とそのsource.Currentをデバッグするときに、私が見ることができるが、データが含まれています

? source.Current 
{ BodyId = 1, IsInUse = true, IsValid = true, CreateDate = {04/07/2006 09:31:59}, LastUpdateDate = {04/07/2006 09:31:59}, StatusDescShort = "Exist" ... } 
BodyId: 1 
CreateDate: {04/07/2006 09:31:59} 
IsInUse: true 
IsValid: true 
LastUpdateDate: {04/07/2006 09:31:59} 
StatusDescShort: "Exist" 

しかし、私はの値にどのようにアクセスする可能性がありますか?。私はここで本当に明白な何かを見逃していると感じています(初めてではありません)。

+0

うーん読書いくつか私は「根本的に間違っているとshouldnだと思うし始めていますIQueryableをまったく使用しておらず、リストにバインドする必要があります。何かご意見は? – Martin

答えて

2

IQueryable<MyType>のようなものを使用していないことに驚いています。それは鋳造の単純な問題になりますので

source.Current as MYType

そしておそらく排除に-間DataRowView

+0

私はあなたが正しいと思いますが、私はバインディングソースに渡す前に要素についてのさらなるクエリを実行しています。結果として得られるオブジェクトは匿名型です。上記でコメントしたように、グリッド上での並べ替えをサポートしていないIQueryableも苦労しているので、代わりにListを使用するようリファクタリングします。ありがとうございます。 – Martin

+0

@Martin:匿名型を含むリストにも同じ問題があります。プロパティを取得するには、リフレクションが必要です。 –

+0

あなたはおそらく正しいでしょう。しかし、この特定の問題は、現在のところ解決されており、私はそれに来るときに私はその橋を渡るので、他のいくつかの問題も解決されました。 – Martin

関連する問題