Привязать сетку данных к читателю
Я хочу иметь возможность вводить SQL в текстовое поле и отображать результаты в таблице данных WPF. Я думал начать сSqlDataReader
и установите сетку данныхItemsSource
читателю данных:
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().ToList();
но это только отображаетFieldCount» для каждой строки, которая, по-видимому, является единственным свойством, котороеDbDataRecord
есть.
Некоторые решения, которые я рассмотрел:
Привязать к DataTable вместо DataReader? Но я нене нужны возможности редактирования.Выбрать каждую строку в структуре данных в памяти? Какую структуру данных я могу использовать? Я могу'• использовать анонимные типы, потому что имена и типы столбцов изменяются в зависимости от оператора SQL. Если я используюList
Как сетка данных узнает, как генерировать столбцы для каждого объекта в списке?Создать собственный дескриптор типа? Это похоже на излишество.Но я чувствую, что решение должно быть очень простым и легким. Я что-то упустил здесь?