2011-11-16 5 views
3

Возможно ли это?Сопоставление управления сеткой WPF с CSV-файлом

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

+0

Вы всегда есть строка заголовка? – user7116

+0

Я могу иметь, если это обеспечивает решение –

+0

Это больше проблема с чтением/записью csv. Как только у вас будет функция синтаксического анализа, было бы намного проще реализовать подкачку и так далее. –

ответ

0

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

0

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

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

Я считаю, что это довольно близко пример того, что вы пытаетесь сделать: Binding a ListView to a Data Matrix (ListView является ItemsControl, а поэтому решение woudl быть такой же)