2015年9月6日日曜日

DataGridViewにデータを入れる①

まずは非バインドモードで入れてみます。

入れるデータは、郵便局のCSVデータでも入れてみますか。
http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

北海道あたりのデータでも使ってみましょう。
では、先頭の9列でもデータを取り込んでみましょう。

まずは、取り込む先を確保します。
DataGridViewを配置し、9列作成します。
名称も変更せず適当に・・・。



CSVは、DEBUGフォルダ配下にでもおいておきますか。





using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace DataGridView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.DataLoad();
        }

        private void DataLoad()
        {
            foreach (string line in File.ReadLines("01HOKKAI.CSV", Encoding.Default))
            {
                string[] csv = line.Split(',');
                string[] data = new string[9];
                Array.Copy(csv, 0, data, 0, 9);
                this.dataGridView1.Rows.Add(data);
            }
        }
    }
}

csvをスプリットして先頭の9データを1行ずつDataGridViewに追加しています。

一方で、効率の面から、Rowデータをまとめていれるというやり方もります


using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace DataGridView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.DataLoad();
        }

        private void DataLoad()
        {
            string[] csvDataAll = File.ReadAllLines("01HOKKAI.CSV", Encoding.Default);
            
            //データの分配列を用意
            DataGridViewRow[] rows = new DataGridViewRow[csvDataAll.Length];

            for(int i = 0; i < csvDataAll.Length; i++)
            {
                string[] csv = csvDataAll[i].Split(',');
                string[] data = new string[9];
                Array.Copy(csv, 0, data, 0, 9);

                DataGridViewRow row = new DataGridViewRow();
                row.CreateCells(this.dataGridView1);
                row.SetValues(data);
                rows[i] = row;
            }

            this.dataGridView1.Rows.AddRange(rows);

        }
    }
}
DataGridViewに直接何度も放り込むと時間がかかるので、 Rowデータを配列に保持して1度に放り込むと速いという話ですね。 参考までに速度を比較しておきます。 8245レコード9列分のデータを追加する場合だと 1レコードずつDataGridViewへ追加
2.4792633
2.5976070
2.4511964
2.9920726
2.8634533
2.3278521
2.7264484
2.5300329
2.3477178
2.4274311
Ave. 2.57秒 1度にDataGridViewへ追加
0.9712624
1.1560973
1.1795451
1.0009344
1.1347776
1.0131825
1.0595981
1.0133348
1.0227687
1.1925171
Ave. 1.07秒



0 件のコメント:

コメントを投稿