質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1147閲覧

DataGridで文字列が分割表示される

kkg_No_05

総合スコア13

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2020/02/15 11:52

編集2020/02/15 13:19

前提・実現したいこと

csvファイルをDataGridに下記の様に表示したいです。
第一段階として、1列目のみを表示しようとしています。

test.csv
AAA,1
BBB,2
CCC,11
DDD,12

||||
|:--|:--:|
|AAA|||
|BBB|||
|CCC|||
|DDD|||

発生している問題・エラーメッセージ

DataGridに文字列(string)ではなく、文字(char)で表示されてしまいます。

||||
|:--|:--:|
|A|A|A|
|B|B|B|
|C|C|C|
|D|D|D|

該当のソースコード

C#

1// ファイル読み込みメソッド 2 public void FileRead() 3 { 4 try 5 { 6 // エンコードを指定して、csvファイルを開く 7 using (var sr = new StreamReader(@"test.csv", System.Text.Encoding.GetEncoding("shift_jis"))) 8 { 9 // リスト型の変数を作成する 10 List<string> list_param = new List<string>(); 11 List<string> list_value = new List<string>(); 12 13 // ストリームの末尾まで繰り返す 14 while (!sr.EndOfStream) 15 { 16 // CSVファイルの一行を読み込む 17 string line = sr.ReadLine(); 18 // 読み込んだ一行をカンマ毎に分けて配列に格納する 19 string[] csv_array = line.Split(','); 20 21 // 配列からリストに格納する 22 list_param.Add(csv_array[0]); 23 list_value.Add(csv_array[1]); 24 } 25 26 DataGrid_CSV.ItemsSource = list_param; 27 } 28 } 29 catch (System.Exception e) 30 { 31 // ファイルを開くのに失敗したとき 32 MessageBox.Show(e.Message); 33 } 34 }

補足情報(FW/ツールのバージョンなど)

VisualStudio2019

参考にしたコード
https://blog.okazuki.jp/entry/2016/02/09/103236

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リンク記事は配列の配列(ジャグ配列)をDataGridに表示する例ですね(あまり使うことはなさそうですが)
xamlが記事通りだとするとList<string>(list_param)がList<char[]>のように扱われてしまいます。

  • xamlを変える(回答コードのDataGrid_CSV1・FileRead1)
  • 段階を踏まず全部出す(回答コードのDataGrid_CSV2・FileRead2)

かでしょうか。

xml

1<Window 2 x:Class="Questions241547.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="450"> 7 <Grid> 8 <Grid.RowDefinitions> 9 <RowDefinition /> 10 <RowDefinition /> 11 </Grid.RowDefinitions> 12 13 <DataGrid x:Name="DataGrid_CSV1" AutoGenerateColumns="False"> 14 <DataGrid.Columns> 15 <DataGridTextColumn Binding="{Binding}" Header="Col1" /> 16 <!--<DataGridTextColumn Binding="{Binding [0]}" Header="Col1" /> 17 <DataGridTextColumn Binding="{Binding [1]}" Header="Col2" /> 18 <DataGridTextColumn Binding="{Binding [2]}" Header="Col3" /> 19 <DataGridTextColumn Binding="{Binding [3]}" Header="Col4" />--> 20 </DataGrid.Columns> 21 </DataGrid> 22 23 <DataGrid 24 x:Name="DataGrid_CSV2" 25 Grid.Row="1" 26 AutoGenerateColumns="False"> 27 <DataGrid.Columns> 28 <DataGridTextColumn Binding="{Binding [0]}" Header="Col1" /> 29 <DataGridTextColumn Binding="{Binding [1]}" Header="Col2" /> 30 <DataGridTextColumn Binding="{Binding [2]}" Header="Col3" /> 31 <DataGridTextColumn Binding="{Binding [3]}" Header="Col4" /> 32 </DataGrid.Columns> 33 </DataGrid> 34 </Grid> 35</Window>

cs

1using System; 2using System.Collections.Generic; 3using System.IO; 4using System.Text; 5using System.Windows; 6 7namespace Questions241547 8{ 9 public partial class MainWindow : Window 10 { 11 public MainWindow() 12 { 13 InitializeComponent(); 14 FileRead1(@"test.csv"); 15 FileRead2(@"test.csv"); 16 } 17 private void FileRead1(string path_read) 18 { 19 try 20 { 21 using(var sr = new StreamReader(path_read, Encoding.GetEncoding("shift_jis"))) 22 { 23 List<string> list_param = new List<string>(); 24 while(!sr.EndOfStream) 25 { 26 string line = sr.ReadLine(); 27 string[] csv_array = line.Split(','); 28 list_param.Add(csv_array[0]); 29 } 30 31 DataGrid_CSV1.ItemsSource = list_param; 32 } 33 } 34 catch(Exception e) 35 { 36 MessageBox.Show(e.Message); 37 } 38 } 39 40 private void FileRead2(string path_read) 41 { 42 try 43 { 44 using(var sr = new StreamReader(path_read, Encoding.GetEncoding("shift_jis"))) 45 { 46 //List<string> list_param = new List<string>(); 47 List<string[]> list_param = new List<string[]>(); 48 while(!sr.EndOfStream) 49 { 50 string line = sr.ReadLine(); 51 string[] csv_array = line.Split(','); 52 //list_param.Add(csv_array[0]); 53 list_param.Add(csv_array); 54 } 55 56 DataGrid_CSV2.ItemsSource = list_param; 57 } 58 } 59 catch(Exception e) 60 { 61 MessageBox.Show(e.Message); 62 } 63 } 64 } 65}

投稿2020/02/15 12:38

編集2023/07/20 14:25
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkg_No_05

2020/02/15 16:20 編集

ご回答ありがとうございます。 問題を解決することができました。 ・xamlを変える 複数列の表示を前提に考えていたため、 DataGridTextColumn を1つにするのは盲点でした。 ・段階を踏まず全部出す 回答のコードを確認中に List<string[]> list_param = new List<string[]>(); の[]がなかったため、 list_param.Add(csv_array); で「string[]からstringへ変換することができません」とエラーが出ました。
TN8001

2020/02/15 13:26

変更点が分かりにくかったですね^^;直しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問