C#でWindowsFormsプログラミング

C# DataGridView データグリッドビューでの一覧表示方法をマスターしよう!

C#入門フォーム編の第9回は引き続きDataGridViewを使います。実際にDataGridViewに値を設定して一覧表示させます。それではやっていきましょう。

解説

UserListFormのコンストラクタに下記のように記述し,save.csvファイルを読み込みます。

public UserListForm()
{
    InitializeComponent();

    var lines = System.IO.File.ReadAllLines(
        "save.csv",
        System.Text.Encoding.GetEncoding("shift_jis"));
}

ブレークポイントを置いて動作を検証する

実行してユーザーリストを表示すると,ブレークポイントで処理が止まります。
この状態でlines変数にカーソルをかざすか,
右クリックで「ウォッチ式に追加」を選ぶと変数の中身を見ることができます。

さらに下記のように書き加えます。

public UserListForm()
{
    InitializeComponent();

    var lines = System.IO.File.ReadAllLines(
        "save.csv",
        System.Text.Encoding.GetEncoding("shift_jis"));

    foreach (var line in lines)
    {
        var row = line.Split(',');
    }
}

foreach文は繰り返し処理を行います。
この場合linesに複数行のデータがあるためそれを1行ずつ繰り返し処理を行ってくれます。
line.Split(‘,’)は1行分のデータをカンマ区切りで分解しています。
row変数にはカンマ区切りで分解された文字データの配列が格納されます。

ちなみにvarとは,右辺から型が推定できる場合に型の宣言を省略するためにあります。
今場合はSplitの戻り値がstring[]のため,rowもstring[]になります。

このrowの値を画面のDataGridViewに表示したいのですが,
そのためにはデータバインディングという技術が必要になります。

プロジェクト右クリックの「追加」から「クラス」を選びます。

「UserInfoDto」という名前にして追加します。

追加されたクラスに下記のように記述します。

namespace Winform
{
    public sealed class UserInfoDto
    {
        public string Id { get; set; }
        public string MailSend { get; set; }
        public string MailAdress { get; set; }
        public string Plan { get; set; }
        public string EnableText { get; set; }
    }
}

これはCSVを読んだデータを入れる入れ物クラスになるので,CSV項目と合うように項目を作ります。

ユーザーリスト画面のコードに戻り下記のように記述します。

public partial class UserListForm : BaseForm
{
    public UserListForm()
    {
        InitializeComponent();

        if(File.Exists("save.csv")) //ファイルがないときのエラー回避
        {
      //UserInfoDtoを複数格納するためのリスト
            List<UserInforDto> dtos = new List<UserInforDto>();
            var lines = System.IO.File.ReadAllLines("save.csv", System.Text.Encoding.GetEncoding("shift_jis"));
            foreach (var line in lines)
            {
                var row = line.Split(',');
               // CSVの内容を項目ごとにUserInfoDtoに格納する
                UserInfoDto dto = new UserInfoDto();
                dto.Id = row[0];
                dto.MailSend = row;
                dto.MailAdress = row;
                dto.Plan = row;
                dto.EnableText = row;
                dtos.Add(dto);
            }
            // UserInfoDtoのリストをDataGridViewにデータバインドする
            UserDataGrid.DataSource = dtos; 
            //データグリッドのタイトルを日本語にする
            UserDataGrid.Columns[0].HeaderText = "ID";
            UserDataGrid.Columns.HeaderText = "メール送信";
            UserDataGrid.Columns.HeaderText = "メールアドレス";
            UserDataGrid.Columns.HeaderText = "プラン";
            UserDataGrid.Columns.HeaderText = "有効/無効";
        }
    }
}

これでユーザーリストを表示すると,save.csvのデータ表示されるようになります。

再びユーザー登録画面でデータを追加すると,
ユーザーリストにデータが増えることが確認できると思います。

WindowsFormsプログラミング