(最終回)C# Windowsフォームアプリケーションで ユーザー登録画面を作成する

(最終回)C# Windowsフォームアプリケーションで ユーザー登録画面を作成する

目次

前回のおさらい
ブレークポイント
データバインディング
実行
まとめ
参照

前回のおさらい

前回はユーザー登録とユーザーリストボタンを作成し、クリックで各メニューに遷移する画面を作成しました。
今回はユーザーリストに登録した情報を表示させる処理を行います。

ブレークポイント

UserListFormのコンストラクタに下記のように記述し,save.csvファイルを読み込みます。
既述が出来たらブレークポイントを置いて動作検証をします。

<code>public UserListForm()
{
    InitializeComponent();
    var lines = System.IO.File.ReadAllLines(
        "save.csv",
        System.Text.Encoding.GetEncoding("shift_jis"));
}</code>

左端にマウスを合わせると●印が付けられます。
これがブレークポイントと呼ばれるもので印をつけた箇所でデバックが止まり、止まった箇所までの実行結果が得られます。
何かしらのエラーが発生した際にエラー箇所を範囲を絞って特定しやすくする時などによく使われます。
画像の箇所にブレークポイントを置き、実行後ユーザーリストを表示すると、ブレークポイントで処理が止まります。
この状態でlines変数にカーソルをかざすか,右クリックで「ウォッチ式に追加」を選ぶと変数の中身を見ることができます。

次に先ほどのコードに追加して下記のようにします。

<code>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(',');
    }
}</code>

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

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

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

データバインディング

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

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

<code>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; }
    }
}</code>

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

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

<code>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;
using Winform;
using System.IO;

namespace ユーザー登録画面
{
    public partial class UserListForm : Form
    {
        public UserListForm()
        {
            InitializeComponent();

            if (File.Exists("save.csv")) //ファイルがないときのエラー回避
            {
                //UserInfoDtoを複数格納するためのリスト
                List&lt;UserInfoDto&gt; dtos = new List&lt;UserInfoDto&gt;();
                var lines = System.IO.File.ReadAllLines("save.csv", System.Text.Encoding.GetEncoding("shift_jis"));

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

                    // CSVの行に十分な列があることを確認
                    if (row.Length &gt;= 4)
                    {
                        // CSVの内容を項目ごとにUserInfoDtoに格納する
                        UserInfoDto dto = new UserInfoDto();
                        dto.Id = row&#91;0];
                        dto.MailSend = row&#91;1];
                        dto.MailAdress = row&#91;2];
                        dto.Plan = row&#91;3];
                        dto.EnableText = row&#91;4];
                        dtos.Add(dto);
                    }
                }

                // UserInfoDtoのリストをDataGridViewにデータバインドする
                UserDataGrid.DataSource = dtos;

                //データグリッドのタイトルを日本語にする
                if (UserDataGrid.Columns.Count &gt;= 5)
                {
                    UserDataGrid.Columns&#91;0].HeaderText = "ID";
                    UserDataGrid.Columns&#91;1].HeaderText = "メール送信";
                    UserDataGrid.Columns&#91;2].HeaderText = "メールアドレス";
                    UserDataGrid.Columns&#91;3].HeaderText = "プラン";
                    UserDataGrid.Columns&#91;4].HeaderText = "有効/無効";
                }
            }
        }
    }
}</code>

この状態で実行するとユーザーリストに今まで登録したユーザーが入っていることがわかります。

実行

これでユーザーリストも完成したので最初から流れでデータの入りを確認していきます。
まずはユーザー登録をクリックして必要な情報を入力していきます。
左下に保存しましたと出ています。

次にユーザーリストを確認します。
先ほど登録した情報が保存されていることが確認出来ました。

まとめ

今回が最終回となり一通りユーザー登録画面とユーザーリストを分けて表示するところまで行いました。
私自身あまり知識がない状態から下記の方の記事を参考に作成してみました。
まだまだ分からない所だらけで時にはAIサービスに聞いたりして何とか完成させることが出来ました。
引続き学習を重ねていきプログラミングに関する知識を取り入れていきたいと思います。

参照