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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

Q&A

解決済

3回答

2416閲覧

C#のデータグリッドビューの1列の中にCSVの複数行を表示するには

aikawajun

総合スコア14

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

0グッド

0クリップ

投稿2021/07/19 05:17

編集2021/07/19 06:56

現在C++のソースをC#に置き換える作業をしております。
その中で、CSVから読み取ったデータを一旦データテーブルに入れて、データバインディングにてデータグリッドビューに値を表示するようにしたいと思っています。

環境は下記です。
OS:Windows10
VisualStudioのバージョン:Community 2019 Ver 16.9.1
プロジェクトの種類:WindowsForms
フレームワークの種類:.NET Framework 4.8

その中で、参考としたC++Builder6を使ったC++のデータグリッドビューの中に1列にCSVの複数列のデータをカンマ区切りで表示されていました。

C++

1// データグリッドビューのDataSource 2TDataSource *ds_rireki; 3 4void __fastcall TFrireki::init(TDrireki *po) 5{ 6 rireki = po; 7 ds_rireki->DataSet = rireki->tb_rireki; 8}

下記C++の参考画像です。
イメージ説明

C#でも同様のことをしようと思ったのですが、C#の方では複数列入れることが出来ておらず、行き詰ってしまっております。

C#

1public void init(Rireki po) 2{ 3 dataGridView1.AutoGenerateColumns = false; 4 5 _rireki = po; 6 7 dataGridView1.DataSource = _rireki.dt_rireki; 8 dataGridView1.Columns[0].DataPropertyName = "first"; 9 dataGridView1.Columns[1].DataPropertyName = "secondtoseven";//←ここの列に複数列分のデータを反映させたいです。 10}

また、C#のCSVデータに関しては、CSV読み込み→データテーブル変数(仮にdt変数)→データグリッドビューにデータバインディングと言うような流れになっているため、強引にデータグリッドビューに書き込んだとしても、csvに書き込むのがdt変数にしないといけないので、結果CSVの中身が何も変わっていないと言う状況になっています。
一応、最初の1列目はCSVの最初の1列分だけでよいのですが、2列目を6行分のデータを結合して入れたいと思いましたが、データグリッドビューのDataPropertyNameに複数列入れられないかテストしてみましたが、1列分しかやはり入れられないようで、手詰まりになっています。

大きく躓いている点として2点
・C#のデータグリッドビューの1列の中に、CSVから読み取った複数列のデータを結合して表示することは出来ないか?
・仮に、上記が出来た場合に、データグリッドビュー内の値を変えた際に、dt変数の中身を変える必要があり、どのようにするのが良いでしょうか。

ちょっとしたことでもコメント頂けましたら、幸いです。
よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/07/19 06:07 編集

タグからはどちらの質問か判らないのですが、C#&Windows Formsなのか、C++&C++Builderなのかタグをはっきりしてください。 あと、開発環境を記入してください。(以前にも指摘しています)
aikawajun

2021/07/19 06:10

ベースがC++だったのでタグにもC++を追加したのですが、分かりにくいと言う事でC#のみにしました。 また、開発環境を追記しました。 失礼しました。
Hey_CH

2021/07/19 06:17

「データグリッドビューの中に1列にCSVの複数列のデータをカンマ区切りで表示」というのがどういう感じかわからないので、画像を貼ると良いかもしれません。
aikawajun

2021/07/19 06:56

C++で表示されている画像を追加しました。
guest

回答3

0

自己解決

すみません。
元々のC++のデータグリッドビュー内のデータが2列のみとなっており、多分C++からCSVで出力するタイミングでカンマ区切りになっているせいで、7列に切り替わっている様でした。
お騒がせしました。

投稿2021/07/20 04:12

aikawajun

総合スコア14

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

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

0

×: データグリッドビュー
〇: DataGridView

ですね?

C#のデータグリッドビューの1列の中にCSVの複数行を表示するには

何故「1列の中にCSVの複数行を表示」なのか分かりませんが、そこにはこだわってなっくて、普通に DataGridView の 1 行には CSV の 1 行を表示することでもよければ、以下の記事が参考になりませんか。

CSV ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2020/09/11/show-date-in-csv-file-on-datagridview.aspx

投稿2021/07/19 09:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

表示だけであれば、計算用の列を作成すれば可能です。

C#

1 private void button1_Click(object sender, EventArgs e) 2 { 3 var dt = new DataTable(); 4 dt.Columns.Add("Col1", typeof(string)); 5 dt.Columns.Add("Col2", typeof(string)); 6 dt.Columns.Add("Col3", typeof(string)); 7 dt.Columns.Add("Col123", typeof(string), "Col1 + ',' + Col2 + ',' + Col3"); 8 9 dt.Rows.Add(new string[] { "A", "B", "C" }); 10 11 dataGridView1.AutoGenerateColumns = false; 12 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { DataPropertyName = "Col1" }); 13 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { DataPropertyName = "Col123" }); 14 dataGridView1.DataSource = dt; 15 }

実行結果

更新もするなら、結合したデータを入れた列を追加するしかないんじゃないですかね?
CellValidating, RowValidatingイベント辺りで入力値を検証してDataTableに書き戻せば良さそうな気がします。

C#

1 private void button1_Click(object sender, EventArgs e) 2 { 3 var dt = new DataTable(); 4 dt.Columns.Add("Col1", typeof(string)); 5 dt.Columns.Add("Col2", typeof(string)); 6 dt.Columns.Add("Col3", typeof(string)); 7 dt.Columns.Add("Col123", typeof(string)); 8 9 dt.Rows.Add(new string[] { "A", "B", "C" }); 10 11 foreach(var row in dt.AsEnumerable()) 12 { 13 row["Col123"] = $"{row["Col1"]},{row["Col2"]},{row["Col3"]}"; 14 } 15 16 dataGridView1.AutoGenerateColumns = false; 17 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { DataPropertyName = "Col1" }); 18 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { DataPropertyName = "Col123" }); 19 dataGridView1.DataSource = dt; 20 }

投稿2021/07/19 06:19

編集2021/07/19 07:50
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問