175977 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

風来の森いろいろ日記

風来の森いろいろ日記

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X
Nov 15, 2017
XML
カテゴリ:C# VB
​​​​​​​​今回の目的
1.CSVファイルをDataGridViewに読み込む
2.その際DataGridViewを動的に追加する
3.その際DataGridViewはタブコントロールの新しいタブに設置する
4.そのためにタブコントロールに新しいタブを動的に追加する
5.選択中のタブをDataGridViewごと削除する

以上です。

下のようにタブにDataGridViewコントロールが作られて、CSVファイルが読み込まれます。



準備するもの。
適当なCSVファイル(今回は1行目にヘッダー、データは2行目以降)
フォームにタブコントコールを1個(名前はtabMainとします)
そしてボタンを2個(こっちはbutton1とbutton2)
ボタン1で読み込み、2で削除します。



//--------------ここから-----------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string fileName = "";
            //OpenFileDialogクラスのインスタンスを作成
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "CSVファイル(*.csv)|*.csv";
            ofd.Title = "CSVファイルを選択してください";
            ofd.RestoreDirectory = true;
            //ダイアログを表示する
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                fileName = ofd.FileName;
            }
            else
            {
                Console.WriteLine("キャンセルされた。");
                return;
            }
            //ページ名に連番をつける設定
            string title = "TabPage " + (this.tabMain.TabCount + 1).ToString();
            TabPage myTabPage = new TabPage(title);//myTabPageという名前でページを作ります
            this.tabMain.TabPages.Add(myTabPage);//新しいページをTabMainに追加
            //次にデータグリッドをMyDataGridViewという名前で作ります
            DataGridView myDataGridView = new System.Windows.Forms.DataGridView();
            myTabPage.Controls.Add(myDataGridView);//作ったグリッドを新タブページに加えます
            myDataGridView.Location = new Point(0, 0);//場所と大きさを設定
            myDataGridView.Dock = DockStyle.Fill;
                    
            try
            {
                // csvファイルを開く
                using (var sr = new System.IO.StreamReader(@fileName, Encoding.GetEncoding("Shift_JIS")))
                {
                    //ヘッダー部分の処理(一番上の行のデータを分割し、必要な列を追加)
                    var line = sr.ReadLine();// ファイルから一行読み込む
                    string[] values = line.Split(',');//カンマで分割
                    foreach(var n in values)
                    {
                        myDataGridView.Columns.Add(n,n);
                    }
                    
                    //データ部分の処理
                    while (!sr.EndOfStream)
                    {
                        line = sr.ReadLine();
                        values = line.Split(',');
                        myDataGridView.Rows.Add(values);
                    }
                }
            }
            catch (System.Exception m)
            {
                // エラー表示
                Console.WriteLine(m.Message);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //タブを閉じる (データグリッドのメモリが解放されるのかは不明)
            if (this.tabMain.SelectedIndex > -1)
            {
                //心配だったら、下でタブ内のコントロールを全て削除してみるとか?
                // foreach (Control item in this.tabMain.SelectedTab.Controls)
                // {
                //     item.Dispose(); 
                // }
                this.tabMain.SelectedTab.Controls.Clear();
                this.tabMain.SelectedTab.Dispose(); //←追加
            }
        }
    }
}
//--------------ここまで-----------------------------------------

今回はタブを追加してそこにデータグリッドビューを追加しました。
メモリのことがよくわからないので、タブを閉じたときにデータグリッドも一緒に消えてくれるのかはわかりません。大きなデータを扱う場合は注意したいです。



[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

独習C# 新版 [ 山田 祥寛 ]
価格:3960円(税込、送料無料) (2020/4/2時点)

楽天で購入


​​​​






お気に入りの記事を「いいね!」で応援しよう

Last updated  Apr 2, 2020 06:12:57 AM
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X