Привязка данных элемента управления сетки WPF к файлу CSV - PullRequest
3 голосов
/ 16 ноября 2011

Возможно ли что-то подобное?

В настоящее время я пытаюсь прочитать файл CSV непосредственно в WPF DataGrid. Файл не имеет известного формата, то есть я не знаю, что это за поле или сколько их. Я просто хочу отобразить весь файл в формате сетки (аналогично тому, что делает Excel при открытии файла CSV).

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

DataGrid основан на элементе управления ItemsControl , а элементы представлены ItemsControl.ItemsSource , тип которого IEnumerable. Поэтому, если вы просто хотите отобразить CSV в DataGrid, вы должны прочитать CSV в любой структуре данных, которая реализует IEnumerable, и установить для нее свойство DataGrid.ItemsSource с помощью кода, применяемого для более предпочтительного связывания пути из XAML. Таким образом, ваша сетка будет иметь один столбец, который представляет всю строку файла CSV. Если вы хотите отобразить каждое значение в отдельном столбце - каждый элемент IEnumerable структуры данных (я бы предложил IList<>) также должен представлять IEnumerable, в основном IList<IEnumerable<object>>.

Чтобы читать CSV в локальной структуре данных, я бы предложил использовать некоторую бесплатную библиотеку синтаксического анализа CSV, а не делать это самостоятельно, поскольку анализ CSV иногда бывает непростым делом. Взгляните на библиотеку KBCsv в качестве примера.

Я считаю, что это довольно близкий пример того, что вы пытаетесь сделать: Привязка ListView к матрице данных ( ListView - это также ItemsControl, поэтому решение будет таким же )

0 голосов
/ 16 ноября 2011

Я не сразу знаком с WPF-вариантом DataGrid, но с общими элементами управления .NET DataGrid и DataGridView. Предполагая, что этот элемент управления работает аналогичным образом, вам нужно только открыть файл CSV, циклически просмотреть его, построчно прочитать и разделить на вкладки или запятые и выбросить данные в DataTable. Оттуда вы можете установить для DataSource элемента управления DataGrid значение DataTable (или создать DataView, если вам нужно некоторое пользовательское форматирование / просмотр) и вызвать метод Refresh ().

...