2010-12-28 7 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? 
} 

이 확인을 작동하는 것 같다 - 그 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로 어려움을 겪고 있기 때문에 목록을 대신 사용하도록 리팩토링합니다. 감사합니다. – Martin

+0

@Martin : 익명 형식을 포함하는 목록에서도 동일한 문제가 발생합니다. 속성에 도달하려면 리플렉션이 필요합니다. –

+0

아마도 맞을 것입니다. 그러나이 특별한 문제는 잠시 동안 해결되었으며 몇 가지 다른 문제도 있습니다. 그래서 내가 그 다리에 올 때 나는 그 다리를 건너겠습니다. – Martin