C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

カンマ区切りの文字列をdataGridViewの1行に入れる /としぞー (19/03/12(Tue) 12:17) #90445
Re[1]: カンマ区切りの文字列をdataGridViewの1行に入れる /WebSurfer (19/03/12(Tue) 12:44) #90447
│└ Re[2]: カンマ区切りの文字列をdataGridViewの1行に入れる /としぞー (19/03/12(Tue) 13:07) #90451
│  └ Re[3]: カンマ区切りの文字列をdataGridViewの1行に入れる /WebSurfer (19/03/12(Tue) 17:44) #90459
│    └ Re[4]: カンマ区切りの文字列をdataGridViewの1行に入れる /としぞー (19/03/18(Mon) 10:34) #90524
│      └ Re[5]: カンマ区切りの文字列をdataGridViewの1行に入れる /WebSurfer (19/03/19(Tue) 10:47) #90536
Re[1]: カンマ区切りの文字列をdataGridViewの1行に入れる /WebSurfer (19/03/19(Tue) 12:35) #90538
  └ Re[2]: カンマ区切りの文字列をdataGridViewの1行に入れる /としぞー (19/03/20(Wed) 16:37) #90551 解決済み


親記事 / ▼[ 90447 ] ▼[ 90538 ]
■90445 / 親階層)  カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ としぞー (4回)-(2019/03/12(Tue) 12:17:16)

分類:[C#] 

またまたDelphiからの移行で悩んでますので宜しくお願い致します。

カンマ区切りの文字列をdataGridViewの1行に入れたいので、
初めは以下のような感じで1セルごと処理しました(コードはどこかのサイトから一部拝借)
  for (int n = 1; n < lines.Count; n++) {
    int gyosu = grid.Rows.Add();
    for (int i = 0; i < head.Length; i++) {
      grid[i, gyosu].Value = d_[i];
    }
  }
 
ですが、セルの数や行数が多くなるとあまりにも遅く、他の書き方が無いか調べて試行錯誤したところ、
以下の方法で速い処理を行えました。
  dataGridView1.ColumnCount = 10;
  string s = "1,2,3,4,5,6,7,8,9,0";
  string[] sr = s.Split(',');
  var list = new List<string>();
  list.AddRange(sr);
  dataGridView1.Rows.Add(list.ToArray());

しかし、これは、
  string を string[] に変換,
  string[] を List<string> に変換
  List<string> を string[] に変換
という手順を経なければならず、面倒というか、分かりにくいというか・・・


一方、今までやっていたDelphiでは以下のようにCommaTextというもので簡単に上記が実現できます。
  s: string;
  StringGrid1.ColCount := 10;
  s := '1,2,3,4,5,6,7,8,9,0';
  StringGrid1.Rows[0].CommaText := s;

これと同じような感じで簡単に書く方法はないでしょうか?

[ □ Tree ] 返信 編集キー/

▲[ 90445 ] / ▼[ 90451 ]
■90447 / 1階層)  Re[1]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ WebSurfer (1783回)-(2019/03/12(Tue) 12:44:52)
No90445 (としぞー さん) に返信

> カンマ区切りの文字列をdataGridViewの1行に入れたいので、

その「1行に入れたい」というのが分からないのですが、要するに csv ファイルの内容を
すべて DataGridView に表示できれば良いのでしょうか?

であれば、csv ファイル ⇒ DataTable ⇒ BindingSource ⇒ DataGridView というようにし
てはいかがでしょう?

csv ファイル ⇒ DataTable を作るのは、TextFieldParser または JET(または ACE)プロ
バイダで可能です。具体例は以下の記事を見てください。

CSV パーサー
http://surferonwww.info/BlogEngine/post/2010/10/28/CSV-parser.aspx

DataTable ⇒ BindingSource ⇒ DataGridView の方は以下のような感じ(あくまで感じです)
でできると思います。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form4 : Form
    {
        private DataGridView dataGridView1;
        private BindingSource bindingSource1;
        private DataTable table;

        public Form4()
        {
            InitializeComponent();

            this.dataGridView1 = new DataGridView();
            this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.bindingSource1 = new BindingSource();
            this.dataGridView1.DataSource = this.bindingSource1;
            this.Controls.Add(this.dataGridView1);

            this.table = CreateDataTable();

            this.bindingSource1.DataSource = this.table;
        }
    }
}

#前のスレッドは解決済みのようですので「解決済み」マークを付けてください。

[ 親 90445 / □ Tree ] 返信 編集キー/

▲[ 90447 ] / ▼[ 90459 ]
■90451 / 2階層)  Re[2]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ としぞー (6回)-(2019/03/12(Tue) 13:07:17)
No90447 (WebSurfer さん) に返信

WebSurferさんありがとうございます。

実際には、csvファイルの内容をそのまま表示させるのではなく、
csvファイルを読んでその中のデータを色々編集して新たなデータを作成し、、
その後、そのデータを DataGridView に表示したいのです。


> #前のスレッドは解決済みのようですので「解決済み」マークを付けてください。
すみません、付けさせていただきました。
[ 親 90445 / □ Tree ] 返信 編集キー/

▲[ 90451 ] / ▼[ 90524 ]
■90459 / 3階層)  Re[3]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ WebSurfer (1785回)-(2019/03/12(Tue) 17:44:53)
No90451 (としぞー さん) に返信

> 実際には、csvファイルの内容をそのまま表示させるのではなく、
> csvファイルを読んでその中のデータを色々編集して新たなデータを作成し、、
> その後、そのデータを DataGridView に表示したいのです。

それによって、上の私の提案のどういうところに不都合があるか詳しく書いていただけませんか?
ひょっとしたら改善案が出せるかもしれませんし。(出せなかったらスミマセンが)

[ 親 90445 / □ Tree ] 返信 編集キー/

▲[ 90459 ] / ▼[ 90536 ]
■90524 / 4階層)  Re[4]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ としぞー (7回)-(2019/03/18(Mon) 10:34:07)
No90459 (WebSurfer さん) に返信

CSVファイルの内容を表示するのであればご提示頂いたコードでできるかもしれません。
DataTableというものにトライしてみようと思います。

CSVファイルとは無関係に、カンマ区切りの文字列をグリッドに表示するには、
やはり最初の投稿の方法しかないでしょうか?
[ 親 90445 / □ Tree ] 返信 編集キー/

▲[ 90524 ] / 返信無し
■90536 / 5階層)  Re[5]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ WebSurfer (1789回)-(2019/03/19(Tue) 10:47:28)
No90524 (としぞー さん) に返信

> CSVファイルとは無関係に、カンマ区切りの文字列をグリッドに表示するには、
> やはり最初の投稿の方法しかないでしょうか?

上の「最初の投稿の方法」とは具体的にどのコードのことを言ってますか?
[ 親 90445 / □ Tree ] 返信 編集キー/

▲[ 90445 ] / ▼[ 90551 ]
■90538 / 1階層)  Re[1]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ WebSurfer (1790回)-(2019/03/19(Tue) 12:35:15)
No90524 (としぞー さん) に返信

> CSVファイルとは無関係に、カンマ区切りの文字列をグリッドに表示するには、
> やはり最初の投稿の方法しかないでしょうか?

その「最初の投稿の方法」というのは以下のコードのことであれば、

> dataGridView1.ColumnCount = 10;
> string s = "1,2,3,4,5,6,7,8,9,0";
> string[] sr = s.Split(',');
> var list = new List<string>();
> list.AddRange(sr);
> dataGridView1.Rows.Add(list.ToArray());

以下は思い違いで、

> しかし、これは、
> string を string[] に変換,
> string[] を List<string> に変換
> List<string> を string[] に変換
> という手順を経なければならず、面倒というか、分かりにくいというか・・・

string の配列を Add メソッドの引数に渡す、すなわち以下のようにすれば良いはずです。

dataGridView1.ColumnCount = 10;
string s = "1,2,3,4,5,6,7,8,9,0";
string[] sr = s.Split(',');
dataGridView1.Rows.Add(sr);

ただ、元は CSV ファイルということですので、私の No90447 のとおり DataTable を使うのが
お勧めですが。

編集操作があるそうですが、DataGridView 上で編集してその結果を CSV ファイルに反映する
ということも比較的容易にできますし。

[ 親 90445 / □ Tree ] 返信 編集キー/

▲[ 90538 ] / 返信無し
■90551 / 2階層)  Re[2]: カンマ区切りの文字列をdataGridViewの1行に入れる
□投稿者/ としぞー (8回)-(2019/03/20(Wed) 16:37:03)
No90538 (WebSurfer さん) に返信

> dataGridView1.ColumnCount = 10;
> string s = "1,2,3,4,5,6,7,8,9,0";
> string[] sr = s.Split(',');
> dataGridView1.Rows.Add(sr);

でいけました。まだまだ理解不足でした・・・。

> ただ、元は CSV ファイルということですので、私の No90447 のとおり DataTable を使うのが
> お勧めですが。

これから DataTable をやってみる予定です。ありがとうございました。
解決済み
[ 親 90445 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -