using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
namespace CrudSampleApp
{
public partial class MainForm : Form
{
/** クラスフィールド */
// クラスのインスタンス変数定義
private Product product; // Product.cs
private DbManager dbmanager; // DbManager.cs
private DataTable dataTbl;
private DataGridViewButtonColumn editColumn;
// 全レコード数
private int allRowCount;
// コンストラクタ
public MainForm()
{
// フォーム初期化
InitializeComponent();
// データロード
DataLoad();
// コントロールの初期設定
ControlInit();
}
// データロード
private void DataLoad()
{
// DataTableのインスタンス作成
dataTbl = new DataTable();
// DbManagerクラスメソットからデータテーブルを取得
dbmanager = new DbManager();
dataTbl = dbmanager.ConnectDatabase();
// コントロールにレコード数を表示
allRowCount = dataTbl.Rows.Count;
allRecCountBox.Text = allRowCount.ToString();
// dgvにデータを表示
dgv.DataSource = dataTbl;
}
// 登録のSQLを作成
private void entry_Click(object sender, EventArgs e)
{
if (guidBox.Text != "")
{
MessageBox.Show("表示しているデータをクリアして、\n新しいデータを入力して下さい。", "登録", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
// テキストボックスから登録データを変数に代入
string nameVal = nameBox.Text;
string addressVal = addressBox.Text;
// Nameの入力チェック
if (nameVal == "")
{
MessageBox.Show("Nameの入力が不正です。", "登録", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
else
{
DialogResult entMes = MessageBox.Show("表示のデータを登録しますか?。", "登録", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (entMes == DialogResult.Yes)
{
// グローバルな一意識別子を生成
Guid guid = Guid.NewGuid();
// 桁区切り無しの文字列に変換
string newUniqueId = guid.ToString("N");
// タイムスタンプ取得
string entryTime = DateTime.Now.ToString();
// テーブル対応のProductクラス - Productr.cs
// >インスタンスの作成
product = new Product();
// >プロパティに登録データを設定
product.Name = nameVal;
product.Address = addressVal;
// 登録SQLの作成 データ処理は「Linq」ライブラリに依存 - 処理に"$"を使用
string entrySqlTxt = "INSERT INTO sampletbl(Id, Name, Address, Created_at, Updated_at) VALUES('" + newUniqueId + "', $Name, $Address, '" + entryTime + "','" + entryTime + "')";
const string entryMes = "登録しました。";
// データ登録へ
dbmanager.InsertAccess(entrySqlTxt, product, entryMes);
// データロード
DataLoad();
// テキストクリア
TextBoxClear();
}
}
}//end entry_Click
// 更新のSQLを作成
private void update_Click(object sender, EventArgs e)
{
if (guidBox.Text == "")
{
MessageBox.Show("更新するデータをテーブルから選択して下さい!。", "更新", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
DialogResult upMes = MessageBox.Show("表示のデータを更新しますか?。", "更新", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (upMes == DialogResult.Yes)
{
string guidVal = guidBox.Text;
string upDateTime = DateTime.Now.ToString(); //現在時刻の取得
// テキストボックスから更新データを変数に代入
string addressVal = addressBox.Text;
// テーブル対応のProductクラス - Productr.cs
// >インスタンスの作成
product = new Product();
// >プロパティに更新データを設定
product.Address = addressVal;
// 更新SQLの作成
string updateSqlTxt = "UPDATE sampletbl SET Address = $Address, Updated_at = '" + upDateTime + "' WHERE Id = '" + guidVal +"'";
const string updateMes = "更新しました。";
// データ更新へ
dbmanager.UpdateAccess(updateSqlTxt, product, updateMes);
// データロード
DataLoad();
// テキストクリア
TextBoxClear();
}
}//end update_Click
// 削除のSQLを作成
private void delete_Click(object sender, EventArgs e)
{
string guidVal = guidBox.Text;
if (guidVal == "")
{
MessageBox.Show("削除するデータをテーブルから選択して下さい!。", "削除", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
DialogResult delMes = MessageBox.Show("表示のデータを削除しますか?。\nId : " + guidVal + "\nName : " + nameBox.Text + "\n" ,"削除", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (delMes == DialogResult.Yes)
{
// 削除SQLの作成
string deleteSqlTxt = "DELETE FROM sampletbl WHERE Id = '" + guidVal + "'";
const string deleteMes = "削除しました。";
// データ削除へ
dbmanager.deleteAccess(deleteSqlTxt, deleteMes);
// データロード
DataLoad();
// テキストクリア
TextBoxClear();
}
}//end delete_Click
// テキストボックスクリア
private void TextBoxClear()
{
guidBox.Clear();
nameBox.Clear();
addressBox.Clear();
cleated_atBox.Clear();
updated_atBox.Clear();
// nameBox編集可能に
nameBox.ReadOnly = false;
}
// Clearボタン - テキストボックスクリア
private void clear_Click(object sender, EventArgs e)
{
TextBoxClear();
}
// dgvのレコードをテキストボックスに設定
private void DgvCellContentClick(object sender, DataGridViewCellEventArgs e)
{
// カラムのボタンの確認
if (dgv.Columns[e.ColumnIndex].Name == "Edit")
{
// >>showボタンクリック
guidBox.Text = dgv.CurrentRow.Cells[1].Value.ToString();
nameBox.Text = dgv.CurrentRow.Cells[2].Value.ToString();
addressBox.Text = dgv.CurrentRow.Cells[3].Value.ToString();
cleated_atBox.Text = dgv.CurrentRow.Cells[4].Value.ToString();
updated_atBox.Text = dgv.CurrentRow.Cells[5].Value.ToString();
// 編集禁止
nameBox.ReadOnly = true;
}
}
// コントロール初期設定
private void ControlInit()
{
// >>テキストボックス読み取り専用
guidBox.ReadOnly = true;
cleated_atBox.ReadOnly = true;
updated_atBox.ReadOnly = true;
allRecCountBox.ReadOnly = true;
// dgv
// >>ちらつき防止で表示高速化
dgv.GetType().InvokeMember("DoubleBuffered",
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, dgv, new Object[] {true});
// >一番左の列を非表示
dgv.RowHeadersVisible = false;
// >>カラム幅
dgv.Columns["Id"].Width = 140;
dgv.Columns["Name"].Width = 180;
dgv.Columns["Address"].Width = 360;
dgv.Columns["Created_at"].Width = 140;
dgv.Columns["Updated_at"].Width = 140;
// >>カラムボタン"Edit"を追加
editColumn = new DataGridViewButtonColumn();
editColumn.Width = 80;
editColumn.Name = "Edit";
editColumn.Text = "show";
editColumn.UseColumnTextForButtonValue = true;
dgv.Columns.Add(editColumn);
// >>カラムヘッダーの背景色の変更
dgv.EnableHeadersVisualStyles = false;
dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.CadetBlue;
// >カラムヘッダーの文字色の変更
dgv.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
// >セルを編集不可に
dgv.ReadOnly = true;
}//end ControlInit
// アプリケーション終了
private void exit_Click(object sender, EventArgs e)
{
DialogResult confirm = MessageBox.Show("終了していいですか?。", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (confirm == DialogResult.No)
{
return;
}
this.Close();
}
}
}