これは可能ですか?WPFグリッドコントロールをCSVファイルにデータバインドする
現在、CSVファイルを直接WPF DataGridに読み込もうとしています。ファイルには既知の形式がありません。つまり、フィールドの内容や数がわかりません。私は、ファイル全体をグリッド形式で表示したいだけです(CSVファイルを開いたときのExcelと同様の方法で)。
これは可能ですか?WPFグリッドコントロールをCSVファイルにデータバインドする
現在、CSVファイルを直接WPF DataGridに読み込もうとしています。ファイルには既知の形式がありません。つまり、フィールドの内容や数がわかりません。私は、ファイル全体をグリッド形式で表示したいだけです(CSVファイルを開いたときのExcelと同様の方法で)。
私は、DataGridのWPFバリアントにすぐには慣れていませんが、一般的な.NET DataGridコントロールとDataGridViewコントロールには慣れていません。このコントロールが同様の方法で動作すると仮定すると、csvファイルを開いて行単位でループし、タブまたはカンマで分割してデータをDataTableにスローするだけでよい。そこからDataGridコントロールのDataSourceをDataTableに設定したり、カスタムの書式設定/表示が必要な場合はDataViewを作成したりしてRefresh()メソッドを呼び出すことができます。
DataGridはItemsControlコントロールに基づいており、アイテムはItemsControl.ItemsSourceで表され、whiochタイプはIEnumerable
です。したがって、単にCSVをDataGridに表示したいのであれば、IEnumerable
を実装している任意のデータ構造でCSVを読み込み、XAMLからバインドしてコードを使ってDataGrid.ItemsSource
プロパティに設定する必要があります。したがって、グリッドにはCSVファイルの行全体を表す単一の列があります。別の列に各値を表示する場合は、IEnumerable
データ構造の各項目(IList<>
を提案します)は、IEnumerable
と同様に、基本的にIList<IEnumerable<object>>
を表す必要があります。
ローカルのデータ構造でCSVを読むには、CSVの構文解析の後でこれを行うのではなく、ときには面倒なことをするよりも、いくつかの無料のCSV解析ライブラリを使うことをお勧めします。場合によってはKBCsv libraryを見てください。
私は、これは何をしようとするのはかなり近い例であると考えている: Binding a ListView to a Data Matrix (リストビューがItemsControlにだけでなくので、解決策は、同じことwoudlです)
あなたは常にヘッダ行を持っているのだろうか? – user7116
それが解決策を提供するかどうかを知ることができます –
これはcsv-read/writeの問題です。解析機能を持つとすぐに、ページングなどを実装する方がはるかに簡単です。 –