Step1で環境構築が完了しました。実際の画面製造を行います。
構成
名称 | 機能 | ファイル名 |
---|---|---|
ユーザ一覧 | ユーザ情報の一覧表示 | Form_User_List.cs |
ユーザ登録/更新 | ユーザ情報登録更新 | Form_User_Edit.cs |
共通・定数など | 共通の処理や定数を管理するクラス | Const.cs |
データベースの設計
- SQLiteデータベースとテーブルの作成
- SQLiteデータベースファイル(
workspace.db
)を作成する。 m_user
テーブルを以下のフィールドで定義する:user_no
(INTEGER, 主キー),name
(TEXT)。
- SQLiteデータベースファイル(
ユーザインターフェースの構築
Form_User_List:ユーザ一覧
デザイン
- ユーザ情報を表示するための
DataGridView
(dataGridView1
)を追加する。 - 登録/編集画面を表示するための
Button
(BtnAdd
)を追加する。
DataGridViewにデータを表示
- フォームのロード時にSQLiteから取得した社員データを
DataGridView
に表示する。 m_user
テーブルからデータを取得し、DataGridView
に表示するメソッドを実装する。
Form_User_Edit:ユーザ一の追加/編集
デザイン
- 社員名を入力するための
TextBox
(txtName
) を追加する。 - 新規追加または編集した社員情報を保存するための
Button
(BtnUpdate
)を追加する。
追加/編集機能の実装
- コンストラクタで、主キー(user_no)を取得、新規追加または更新の判断をする。
BtnUpdate_Click
イベントを処理して、SQLiteデータベースに新しい社員情報を挿入または既存の情報を更新する。
C#とSQLiteの統合
SQLite接続のセットアップ
- SQLite接続 (
SQLiteConnection
) を作成する。 - SQLiteデータベースでクエリを開始、終了、実行するメソッドを実装する (
SQLiteCommand
)。
ソースコード
それぞれの画面や共通クラスのソースコードです。
共通クラス
共通で使用する変数(定数)や関数(メソッド)を管理します。
今回は、データベース関連は共通して使用するのでこちらにまとめました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class Const { /// <summary> /// データベース名 /// </summary> private static string DB_NAME = "workspace.db"; /// <summary> /// データベース名の取得 /// </summary> /// <returns></returns> public static string getDbName() { return DB_NAME; } /// <summary> /// コネクションの取得 /// </summary> /// <returns></returns> public static SQLiteConnection getSQLConnection() { var connectionString = "Data Source="+ Const.getDbName(); return new SQLiteConnection(connectionString); } } |
ユーザ一覧(Form_User_List.cs)
ユーザ情報を一覧で確認する画面です。
新規追加ボタンをクリックすることで、ユーザ登録/編集画面をモーダルダイアログで開きます。
行ダブルクリックで対象のユーザ情報を表示したユーザ登録/編集画面をモーダルダイアログで開きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
public partial class Form_User_List : Form { /// <summary> /// コンストラクタ /// </summary> public Form_User_List() { InitializeComponent(); } /// <summary> /// ページロード /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form_User_List_Load(object sender, EventArgs e) { this.CreateDb(); this.InitDataGrid(this.SelectUser()); } /// <summary> /// ユーザマスタとdataTableの紐づけ /// </summary> /// <returns></returns> private DataTable SelectUser() { SQLiteConnection con = Const.getSQLConnection(); DataTable dataTable = new DataTable(); SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT user_no AS 'No', name AS '氏名' FROM m_user;", con); adapter.Fill(dataTable); return dataTable; } /// <summary> /// グリッドビューの初期化・設定 /// </summary> /// <param name="dataTable"></param> private void InitDataGrid(DataTable dataTable) { //行選択のみ this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //入力不可 this.dataGridView1.ReadOnly = true; //行追加不可 this.dataGridView1.AllowUserToAddRows = false; //データソースを設定 this.dataGridView1.DataSource = dataTable; } /// <summary> /// データベース作成 /// </summary> private void CreateDb() { var sqlConnectionSb = new SQLiteConnectionStringBuilder { DataSource = Const.getDbName() }; using (var cn = new SQLiteConnection(sqlConnectionSb.ToString())) { cn.Open(); using (var cmd = new SQLiteCommand(cn)) { cmd.CommandText = "CREATE TABLE IF NOT EXISTS m_user(" + "no INTEGER NOT NULL PRIMARY KEY," + "name TEXT NOT NULL," + "memo TEXT)"; cmd.ExecuteNonQuery(); } } } /// <summary> /// 新規追加ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnAdd_Click(object sender, EventArgs e) { Form_User_Edit form = new Form_User_Edit(null); form.ShowDialog(); this.InitDataGrid(this.SelectUser()); } /// <summary> /// グリッドビューの行ダブルクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { // No列のIndexを指定 int cellIndex = 0; // ダブルクリックした行のIndexからしユーザNowo取得 string user_no = dataGridView1[cellIndex, e.RowIndex].Value.ToString(); // 登録・更新フォームのインスタンスを生成 Form_User_Edit form = new Form_User_Edit(user_no); // フォームを表示 form.ShowDialog(); // 登録・更新フォームが閉じられたら、グリッドを初期化 this.InitDataGrid(this.SelectUser()); } } |
ユーザ登録/編集(Form_User_Edit.cs)
ユーザNoの指定がなければユーザ情報を新規追加、ユーザNoの指定があれば、更新を行います。
保存ボタンクリックで新規追加、更新を判断しデータベースへ保存・更新を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
public partial class Form_User_Edit : Form { /// <summary> /// ユーザNo /// </summary> private string _user_no; /// <summary> /// コンストラクタ /// </summary> /// <param name="user_no"></param> public Form_User_Edit(string user_no) { InitializeComponent(); this._user_no = user_no; } /// <summary> /// ページロード /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form_User_Edit_Load(object sender, EventArgs e) { InitForm(); } /// <summary> /// 保存ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnUpdate_Click(object sender, EventArgs e) { // 新規追加 if (string.Empty.Equals(this._user_no) || this._user_no == null) { this.save(this.txtName.Text); } //更新 else { this.update(this._user_no,this.txtName.Text); } } /// <summary> /// 初期化 /// </summary> private void InitForm() { // 新規追加 if (string.Empty.Equals(this._user_no)|| this._user_no == null) { // TODO } //更新 else { this.GetUser(); } } /// <summary> /// 保存 /// </summary> /// <param name="name"></param> private void save(string name) { SQLiteConnection conn = Const.getSQLConnection(); conn.Open(); using (var cmd = new SQLiteCommand(conn)) { cmd.CommandText = "INSERT INTO m_user(name) VALUES(@name)"; cmd.Parameters.Add(new SQLiteParameter("@name", name)); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } this.Close(); } /// <summary> /// 更新 /// </summary> /// <param name="user_no"></param> /// <param name="name"></param> private void update(string user_no,string name) { SQLiteConnection conn = Const.getSQLConnection(); conn.Open(); using (var cmd = new SQLiteCommand(conn)) { StringBuilder sb = new StringBuilder(); sb.Append("UPDATE m_user SET "); sb.Append("name = @name "); sb.Append("WHERE user_no = @user_no "); cmd.CommandText = sb.ToString(); cmd.Parameters.Add(new SQLiteParameter("@name", name)); cmd.Parameters.Add(new SQLiteParameter("@user_no", user_no)); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } this.Close(); } /// <summary> /// 主キーからユーザ情報の取得 /// </summary> private void GetUser() { SQLiteConnection conn = Const.getSQLConnection(); conn.Open(); using (var cmd = new SQLiteCommand(conn)) { cmd.CommandText = "SELECT * FROM m_user WHERE user_no = @user_no"; cmd.Parameters.Add(new SQLiteParameter("@user_no", this._user_no)); var reader = cmd.ExecuteReader(); while (reader.Read()) { this.txtName.Text = reader["name"].ToString(); } cmd.Parameters.Clear(); } } } |
まとめ
- 基本的な一覧表示、登録/更新の流れを解説しました。
- 名称のみの登録/更新機能のためここから拡張していくことが必要です。(例:性別 ラジオボタンの追加、部署プルダウンの追加、検索機能の追加 等)
コメント