2013-12-11 6 views
1

SQL을 텍스트 상자에 입력하고 결과를 WPF Datagrid에 표시하려고합니다. 나는 SqlDataReader 시작 생각하고, 설정 데이터 그리드의 ItemsSource 데이터 판독기 :DataReader에 데이터 바인드 바인딩

using (var cmd = conn.CreateCommand()) { 
    cmd.CommandText = sql.Text; 
    sqlResults.ItemsSource = cmd.ExecuteReader(); 
} 

그러나 이것은 다음과 같은 오류와 함께 실패합니다 Invalid attempt to call FieldCount when reader is closed, 내 말을 이해할 수 WPF가 읽기에 주변에 도착하는 시간에 의해 FieldCount 행 개체의 속성 인 경우 using 블록이 이미 종료되었습니다.

은 그래서 메모리에 계속 무언가 얻기 위해, LINQ 및 ToList를 사용하여 시도 :

sqlResults.ItemsSource = cmd.ExecuteReader().Cast<DbDataRecord>().ToList(); 

을하지만 이것은 단지 분명히 DbDataRecord가있는 유일한 속성입니다 각 행에 대한 'FieldCount'를 표시합니다.

일부 솔루션은 나는 생각했다 : DataTable을 대신하여 DataReader에

  • 바인딩? 하지만 편집 기능이 필요하지 않습니다.
  • 각 행을 메모리 내 데이터 구조로 선택 하시겠습니까? 어떤 데이터 구조를 사용할 수 있습니까? 익명 형식을 사용할 수 없습니다. 열의 이름과 형식이 SQL 문을 기반으로 변경되기 때문입니다. List<object>을 사용하는 경우 DataGrid는 목록의 각 객체에 대한 열을 생성하는 방법을 알고 있습니까?
  • 사용자 정의 유형 설명자를 만드시겠습니까? 과잉이라고 생각됩니다.

하지만 솔루션이 매우 간단하고 쉬워야한다고 생각합니다. 여기에 뭔가 기본적인 것이 빠져 있니?

+0

아마도 DataTable은 과도 함이지만 필요한 작업을 수행합니다. 편집 할 필요가 없다면 DataGrid 또한 과도합니다. – Paparazzi

+0

@Blam ListView를 사용하거나 좀 더 간단하게 사용할 수 있습니까? –

+0

여러 열의 경우 ListView GridView. AutoGenerateColumns가 없지만 훨씬 가볍습니다. 내 생각에 DataGrid는 DataTable보다 오버 헤드가 많습니다. 내가 할 일은 열 컬렉션이있는 구조체이며 코드를 직접 열에 빌드합니다. – Paparazzi

답변

1

어쩌면 더 많은 자바 스크립트와 협력하고 도움이 될 경우 BTW 창조자, :)으로 사용하지 않겠다고 제안 된 평가에 상응하는 (찾을 수 있습니다 궁금 DataTable은 과도 함이지만 필요한 작업을 수행합니다.

0

글쎄, 네가 말했던 것부터, 아마도 DB 컬럼과 일치하는 속성을 포함하는 구조체와 함께 가고, linq로 채우기 만하면 쉽게 바인딩 할 수있다.

...

+1

1) 질문에서 언급 한 것처럼 임의의 SQL 문을 사용하기 때문에 들어오는 데이터의 필드와 데이터 유형을 알 수 없습니다. 어떤 종류의 구조체를 매핑할까요? 2) 여기서 어떻게 'eval'을 사용할 수 있습니까? –

+0

2) Eval은 JavaScript입니다. 여기서는 유용하지 않습니다. 1) 그걸 놓쳐 버렸어 야 ... 너에게 반성과 더러운 일을 많이 남겨 줬을거야. 아마도 내 대답을 제거하고, 켓이 나타나기를 기다려야한다. (너는 침대에 있어야한다. 이스라엘에 늦었다.)) – Noctis

+0

Brendan Eich는'eval'을 피할 것을 권장합니다. 그 근원이 있습니까? –

관련 문제