2013-11-09 2 views
1

VB.NET을 사용하여 Gridview를로드하려고하는데 Linq 쿼리를 실행할 때 아래 메시지가 나타납니다. 저장 프로 시저를 실행하고 있습니다. SQL Server에서 SP를 확인하고 결과를 반환하지만 결과를 받아들이도록 VB.Net을 가져올 수 없습니다. 나는 Linq와 Entity Framework에 대해 매우 새로운 지식을 가지고있다. 어떤 도움을 주시면 감사하겠습니다. 'WhereSelectEnumerableIterator2[ WindowsApplication1.uspGetAll_Result가 ,WindowsApplication1.uspGetAll_Result]'System.Linq.IQueryable 1 WindowsApplication1.uspGetAll_Result`] '를 입력하는 타입의 객체를 전송할VB.NET - 'WhereSelectEnumerableIterator`2 유형의 객체를 캐스팅 할 수 없습니다.

메시지 = 없음.

다음은 코드입니다.

'Using Linq to Entities 
    Dim CatFNQuery As IQueryable(Of uspGetAll_Result) 

    CatFNQuery = From x In fanDbContext.uspGetAll(Nothing, Nothing, Nothing) _ 
       Select x 

    'MsgBox(CatFNQuery.Count) 
    If CatFNQuery Is Nothing Then 
     ' 
    Else 
     gvResults.DataSource = CatFNQuery 
    End If 

CATFNQUERY = ... 행에 오류가 발생했습니다.

+0

iQueryable을 iEnumerable로 변경하려고했습니다. 그것은 오류를 지나쳤습니다. 3000 개의 레코드가 반환되었습니다. 그러나 gridview는 gvResults.DataSource = CATFNQuery 행의 데이터를로드하지 않습니다. – user2011126

+0

나는 그것을 작동시켰다. 나는 그것을 iEnumerable로 변경하고 다음 줄을 변경했습니다 : CatFNQuery = (From x in fanDbContext.uspGetAll (Nothing, Nothing, Nothing) _ Select x) .ToList – user2011126

답변

0

MSDN에 따르면 데이터 소스는 데이터를 바인딩 할 수있는 다음 유형이어야합니다.

DataGridView 클래스는 표준 Windows Forms 데이터 바인딩 모델을 지원합니다. 즉, 데이터 소스는 다음 인터페이스 중 하나를 구현하는 모든 유형이 될 수 있습니다. 1 차원 배열을 비롯한 IList 인터페이스. DataTable 및 DataSet 클래스와 같은 IListSource 인터페이스입니다. BindingList (Of T) 클래스와 같은 IBindingList 인터페이스입니다. BindingSource 클래스와 같은 IBindingListView 인터페이스입니다.

은 당신이해야하는 것은 위에서 언급 한 인터페이스 중 하나를 구현하지 않습니다 따라서는 IEnumerable에서 상속과 IQueryable(Of T)

입니다.

.ToList를 사용하여 목록 (Of T)에 캐스팅하면 주석에 상태를 표시 할 때 문제가 해결됩니다.

gvResults.DataSource = CatFNQuery.ToList() 

아마도 Bindingsource를 사용해 볼 수도 있습니다.

Dim bindingSource as New BindingSource() 
bindingSource.DataSource = CatFNQuery 
gvResults.DataSource = bindingsource 

이후 datasource for a bindingsource은 더 많은 유형을 지원합니다.

관련 문제