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
블록이 이미 종료되었습니다.
ToList
를 사용하여 시도 :
sqlResults.ItemsSource = cmd.ExecuteReader().Cast<DbDataRecord>().ToList();
을하지만 이것은 단지 분명히 DbDataRecord
가있는 유일한 속성입니다 각 행에 대한 'FieldCount'를 표시합니다.
일부 솔루션은 나는 생각했다 : DataTable을 대신하여 DataReader에
이- 바인딩? 하지만 편집 기능이 필요하지 않습니다.
- 각 행을 메모리 내 데이터 구조로 선택 하시겠습니까? 어떤 데이터 구조를 사용할 수 있습니까? 익명 형식을 사용할 수 없습니다. 열의 이름과 형식이 SQL 문을 기반으로 변경되기 때문입니다.
List<object>
을 사용하는 경우 DataGrid는 목록의 각 객체에 대한 열을 생성하는 방법을 알고 있습니까? - 사용자 정의 유형 설명자를 만드시겠습니까? 과잉이라고 생각됩니다.
하지만 솔루션이 매우 간단하고 쉬워야한다고 생각합니다. 여기에 뭔가 기본적인 것이 빠져 있니?
아마도 DataTable은 과도 함이지만 필요한 작업을 수행합니다. 편집 할 필요가 없다면 DataGrid 또한 과도합니다. – Paparazzi
@Blam ListView를 사용하거나 좀 더 간단하게 사용할 수 있습니까? –
여러 열의 경우 ListView GridView. AutoGenerateColumns가 없지만 훨씬 가볍습니다. 내 생각에 DataGrid는 DataTable보다 오버 헤드가 많습니다. 내가 할 일은 열 컬렉션이있는 구조체이며 코드를 직접 열에 빌드합니다. – Paparazzi