前提・実現したいこと
"作品名","作者","出版社","巻数","記入日",
A,AA,AAA,AAAA,2018/05/02 (水) 15:10:24
B,BB,BBB,BBBB,2018/05/02 (水) 15:10:36
C,CC,CCC,CCCC,2018/05/02 (水) 15:10:46
上記の様なcsvファイルを読み込んで、DataGridコントロールに表示したいです。
下記のコードでList<T>に読み込めていると思うのですが、
そこからDataGridコントロールに表示する方法が分かりません。
List<T>のままなのか、一度配列に直すのか?
どうすればよいでしょうか?
発生している問題・エラーメッセージ
該当のソースコード
XAML
1<DataGrid Name="DataGrid_CSV" 2 HorizontalAlignment="Left" VerticalAlignment="Top" 3 Margin="70,267,0,0" 4 />
C#
1public partial class MainWindow : Window 2{ 3 public MainWindow() 4 { 5 InitializeComponent(); 6 } 7 8 // 保存ファイルのフルパス デフォルト値 9 static string PATH_FILE = ""; 10 11 // 読み込みボタン 押下イベント 12 private void Btn_Read_Click(object sender, RoutedEventArgs e) 13 { 14 // 対象ファイルを選択していないときはファイルダイアログを開く 15 if (PATH_FILE == "") { Fnc_Dialog_Save(); } 16 else { Fnc_Read(); } 17 } 18 19 // 開くダイアログ 20 public void Fnc_Dialog_Open() 21 { 22 //OpenFileDialogクラスのインスタンスを作成 23 var ofd = new OpenFileDialog 24 { 25 //はじめに「ファイル名」で表示される文字列を指定する 26 FileName = "BookList.csv", 27 //はじめに表示されるフォルダを指定する 28 InitialDirectory = @"C:\", 29 //[ファイルの種類]に表示される選択肢を指定する 30 Filter = "csvファイル(*.csv)|*.csv", 31 //タイトルを設定する 32 Title = "開くファイルを選択してください", 33 //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする 34 RestoreDirectory = true 35 }; 36 37 // ダイアログを表示 38 if (ofd.ShowDialog() == true) 39 { 40 // ファイルパス取得 41 PATH_FILE = ofd.FileName; 42 43 // 対象ファイルを選択していないときはファイルダイアログを開く 44 if (PATH_FILE == "") { return; } 45 else { Fnc_Read(); } 46 } 47 } 48 49 // ファイル読み込み処理 50 public void Fnc_Read() 51 { 52 try 53 { 54 // 読み込み用リスト作成 55 List<string[]> readCsvList = new List<string[]>(); 56 57 // csvファイルを開く 58 using (var sr = new StreamReader(PATH_FILE, Encoding.GetEncoding("Unicode"))) 59 { 60 // ストリームの末尾まで繰り返す 61 while (!sr.EndOfStream) 62 { 63 // ファイルから一行読み込む 64 var readCsvLine = sr.ReadLine(); 65 // カンマ区切りで分割して配列に格納する 66 readCsvList.Add(readCsvLine.Split(',')); 67 } 68 } 69 70 // DataGridに出力 71 72 } 73 catch (System.Exception e) 74 { 75 // ファイルを開くのに失敗したとき 76 MessageBox.Show(e.ToString()); 77 } 78 } 79}
試したこと
参考にしたコードでは「ItemsSource」プロパティを使用していましたが、実行結果は狙ったものにはなりませんでした。
C#
1DataGrid_CSV.ItemsSource = readCsvList;
実行結果
|Length|LongLength|Rank|SyncRoot|IsReadOnly|IsFixedSize|IsSynchronized|
|:--|:--:|--:||:--|:--:|--:|
|6|6|1|System.string[]|□|□|□|
|6|6|1|System.string[]|□|□|□|
の様に表示されてしまい、読み込んだCSVファイルの内容を表示できません。
また主題とは別に、List<T>の中身を確認するにはどうすればよいでしょうか?
C#
1foreach (string str in readCsvList) 2 { 3 4 }
のようにすると、型変換のエラーとなってしまいます。
補足情報(FW/ツールのバージョンなど)
VisualStuido2017
WPFアプリ(.NET Framework)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/03 02:54
2018/05/03 03:36