using HotelPms.Share.Windows.Component;
|
using HotelPms.Share.Windows.Tool;
|
using HotelPms.Share.Windows.Util;
|
using HotelPms.WinForm.Common.Interface;
|
using System.Data;
|
|
namespace HotelPms.WinForm.Common
|
{
|
public partial class MasterBase : FormBase
|
{
|
#region ★★★★★ Declartions ★★★★★
|
|
protected DataTable? m_Data;
|
protected bool m_DisableSelectionChanged = false;
|
protected CTextBoxArray? tbArray;
|
protected ValueChangeListener? m_ValueChangeListener = null;
|
protected static string DelMsg = "選択されたデータを削除しますか?";
|
protected static string ExistsMsg = "該当データが既に存在します。";
|
protected static string NotExistsMsg = "指定したコードがマスタに存在しません。";
|
protected static string LockMsg = $"現在の情報は他の端末か他の機能で更新済です。{Environment.NewLine}最新情報を取得しますか?";
|
protected Dictionary<string, string> m_GridColNameDict = new Dictionary<string, string>();
|
|
#endregion
|
|
#region ★★★★★ Property ★★★★★
|
|
public IMasterCtrl? MasterCtrl { get; set; }
|
|
#endregion
|
|
#region ★★★★★ Class Event ★★★★★
|
|
public MasterBase() => InitializeComponent();
|
|
private void MasterBase_Load(object sender, EventArgs e)
|
{
|
if (DesignMode) { return; }
|
System.Diagnostics.Debug.WriteLine("MasterBase_Load");
|
InitGrid();
|
|
tbArray = new CTextBoxArray(true, this);
|
tbArray.ValueChanged += CTextBoxArray_ValueChanged;
|
tbArray.IsCorrectEtc += CTextBoxArray_IsCorrectEtc;
|
tbArray.KeyEnd += CTextBoxArray_KeyEnd;
|
tbArray.TextChanged += CTextBoxArray_TextChanged;
|
tbArray.BeforeAutoNextFocus += CTextBoxArray_BeforeAutoNextFocus;
|
|
m_ValueChangeListener = new ValueChangeListener(lblStatus);
|
m_ValueChangeListener.SetUpdateFormMode(UpdateFormMode.Normal);
|
}
|
|
private void MasterBase_FormClosing(object sender, FormClosingEventArgs e)
|
{
|
if (DesignMode) { return; }
|
//編集中の時に警告メッセージを出す
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit)
|
{
|
switch (ExitDialog.ExecuteDialog())
|
{
|
case DialogResult.Cancel:
|
e.Cancel = true;
|
return;
|
case DialogResult.OK:
|
tbArray.DisbleValidating = true;
|
if (!MasterCtrl.Save())
|
{
|
e.Cancel = true;
|
return;
|
}
|
tbArray.DisbleValidating = false;
|
break;
|
case DialogResult.Abort:
|
break;
|
}
|
}
|
}
|
|
private void MasterBase_KeyDown(object sender, KeyEventArgs e)
|
{
|
switch (e.KeyCode)
|
{
|
case Keys.Escape:
|
ActiveControl = btnExit;
|
btnExit_Click(btnExit, e);
|
e.Handled = true;
|
break;
|
case Keys.F1:
|
ActiveControl = btnNew;
|
btnNew_Click(btnExit, e);
|
e.Handled = true;
|
break;
|
case Keys.F2:
|
ActiveControl = btnEdit;
|
btnEdit_Click(btnExit, e);
|
e.Handled = true;
|
break;
|
case Keys.F12:
|
ActiveControl = btnSave;
|
btnSave_Click(btnExit, e);
|
e.Handled = true;
|
break;
|
}
|
}
|
|
private void MasterBase_FormClosed(object sender, FormClosedEventArgs e)
|
{
|
if (DesignMode) { return; }
|
if (m_Data != null) { m_Data.Dispose(); m_Data = null; }
|
if (m_ValueChangeListener != null) { m_ValueChangeListener.Dispose(); m_ValueChangeListener = null; }
|
System.Diagnostics.Debug.WriteLine("MasterBase_FormClosed");
|
}
|
|
#endregion
|
|
#region ★★★★★ Control Event ★★★★★
|
|
private void txtSearchKey_KeyDown(object sender, KeyEventArgs e)
|
{
|
if (e.KeyCode == Keys.Return)
|
{
|
MasterCtrl.ShowData();
|
}
|
}
|
|
private void btnSave_Click(object sender, EventArgs e)
|
{
|
MasterCtrl.Save();
|
}
|
|
private void btnExit_Click(object sender, EventArgs e)
|
{
|
Close();
|
}
|
|
private void btnNew_Click(object sender, EventArgs e)
|
{
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.New) { return; }
|
|
//編集中の時に警告メッセージを出す
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit)
|
{
|
switch (ExitDialog.ExecuteDialog())
|
{
|
case DialogResult.Cancel:
|
return;
|
case DialogResult.OK:
|
tbArray.DisbleValidating = true;
|
if (!MasterCtrl.Save()) { return; }
|
tbArray.DisbleValidating = false;
|
break;
|
case DialogResult.Abort:
|
break;
|
}
|
}
|
|
SetNewMode();
|
}
|
|
private void btnEdit_Click(object sender, EventArgs e)
|
{
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Normal || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit) { return; }
|
if (dgvData.Rows.Count == 0) { return; }
|
|
//編集中の時に警告メッセージを出す
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting)
|
{
|
switch (ExitDialog.ExecuteDialog())
|
{
|
case DialogResult.Cancel:
|
return;
|
case DialogResult.OK:
|
tbArray.DisbleValidating = true;
|
if (!MasterCtrl.Save()) { return; }
|
tbArray.DisbleValidating = false;
|
break;
|
case DialogResult.Abort:
|
break;
|
}
|
}
|
|
//閲覧へ
|
MasterCtrl.ShowDetail();
|
}
|
|
private void dgvData_SelectionChanged(object sender, EventArgs e)
|
{
|
if (m_DisableSelectionChanged) { return; }
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.New || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting) { return; }
|
|
if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit)
|
{
|
tbArray.DisbleValidating = true;
|
MasterCtrl.Save();
|
tbArray.DisbleValidating = false;
|
}
|
MasterCtrl.ShowDetail();
|
}
|
|
private void dgvData_CellClick(object sender, DataGridViewCellEventArgs e)
|
{
|
if (e.RowIndex < 0 || e.ColumnIndex < 0) { return; }
|
if (e.ColumnIndex == dgvData.Columns["colDel"].Index) { MasterCtrl.Delete(); }
|
}
|
|
|
protected virtual void CTextBoxArray_BeforeAutoNextFocus(object sender, int index, KeyEventArgs e)
|
{
|
switch (e.KeyCode)
|
{
|
case Keys.Return:
|
if (tbArray.Items[index].Equals(tbArray.Items[tbArray.Items.Count - 1])) { btnSave.Focus(); }
|
break;
|
}
|
}
|
|
protected virtual void CTextBoxArray_TextChanged(object sender, int index, EventArgs e)
|
{
|
tbArray.DisbleTextChanged = true;
|
//名称をクリア
|
if (tbArray.Items[index].MstNameCtrl != null) { tbArray.Items[index].MstNameCtrl.Text = string.Empty; }
|
tbArray.DisbleTextChanged = false;
|
}
|
|
protected virtual void CTextBoxArray_KeyEnd(object sender, int index, KeyEventArgs e)
|
{
|
MasterCtrl.ShowList(tbArray.Items[index]);
|
}
|
|
protected virtual bool CTextBoxArray_IsCorrectEtc(object sender, int index, CTextBoxArrayBaseEventArgs e)
|
{
|
if (m_ValueChangeListener.CurUpdateMode != UpdateFormMode.Inputting && m_ValueChangeListener.CurUpdateMode != UpdateFormMode.Edit) { return true; }
|
|
try
|
{
|
CTextBox obj = tbArray.Items[index];
|
if (!MasterCtrl.IsCorrectEtc(obj, e.CheckAll, e.ShowErrMsg)) { return false; }
|
|
//コード存在チェック
|
if (obj.Text.Length > 0 && obj.MstNameCtrl != null)
|
{
|
if (!IsCDExists(obj))
|
{
|
if (e.ShowErrMsg)
|
{
|
ShowIDErrMsg(obj);
|
return false;
|
}
|
else
|
{
|
obj.Text = obj.OrgText;
|
IsCDExists(obj);
|
return true;
|
}
|
}
|
}
|
return true;
|
}
|
catch (Exception ex)
|
{
|
if (e.ShowErrMsg) { MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); }
|
return false;
|
}
|
}
|
|
protected virtual void CTextBoxArray_ValueChanged(object sender, int index, CTextBoxArrayBaseEventArgs e)
|
{
|
//編集状態
|
switch (m_ValueChangeListener.ChangeToEditingMode())
|
{
|
case ChangeEditingModeResult.Error:
|
e.Cancel = true;
|
return;
|
case ChangeEditingModeResult.ReLoad:
|
e.Cancel = true;
|
e.ResetOrgValue = false;
|
return;
|
}
|
}
|
|
|
#endregion
|
|
#region ★★★★★ Private Function ★★★★★
|
|
private void InitGrid()
|
{
|
GeneralSub.SetDoubleBuffered(dgvData);
|
GeneralSub.InitDataGridView(dgvData, true);
|
//dgvData.RowsDefaultCellStyle.BackColor = Color.FromArgb(60, 63, 65);
|
//dgvData.RowsDefaultCellStyle.ForeColor = Color.White;
|
|
dgvData.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
//dgvData.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(60, 63, 65);
|
dgvData.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(240, 240, 240);
|
dgvData.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
|
dgvData.ColumnHeadersDefaultCellStyle.SelectionBackColor = dgvData.ColumnHeadersDefaultCellStyle.BackColor;
|
|
dgvData.DefaultCellStyle.SelectionBackColor = Color.LemonChiffon;
|
dgvData.DefaultCellStyle.SelectionForeColor = Color.Black;
|
|
//DataGridViewButtonColumn col = new DataGridViewButtonColumn();
|
DataGridViewLinkColumn col = new DataGridViewLinkColumn();
|
col.Name = "colDel";
|
col.Text = "削除";
|
col.HeaderText = string.Empty;
|
//col.UseColumnTextForButtonValue = true;
|
col.UseColumnTextForLinkValue = true;
|
col.Width = 50;
|
col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
|
|
dgvData.Columns.Add(col);
|
}
|
|
protected void SetGridColNameDict()
|
{
|
m_GridColNameDict.Clear();
|
foreach (DataGridViewColumn col in dgvData.Columns)
|
{
|
if (string.IsNullOrEmpty(col.DataPropertyName)) { continue; }
|
m_GridColNameDict.Add(col.DataPropertyName, col.Name);
|
}
|
}
|
|
protected object GetCellValue(string dataField)
|
{
|
return GetCellValue(dataField, dgvData.CurrentRow);
|
}
|
|
protected object GetCellValue(string dataField, DataGridViewRow row)
|
{
|
return row.Cells[m_GridColNameDict[dataField]].Value;
|
}
|
|
protected virtual void SetNewMode()
|
{
|
tbArray.DisbleValidating = true;
|
foreach (TextBox item in tbArray.Items)
|
{
|
if ((item as CTextBox).IsPrimaryKey) { (item as CTextBox).Enabled = true; }
|
(item as CTextBox).Text = string.Empty;
|
}
|
this.ActiveControl = tbArray.Items[0];
|
m_ValueChangeListener.SetUpdateFormMode(UpdateFormMode.New);
|
tbArray.DisbleValidating = false;
|
}
|
|
|
/// <summary>
|
/// コードの存在チェック
|
/// </summary>
|
/// <returns></returns>
|
protected bool IsCDExists(CTextBox sender)
|
{
|
MasterCtrl.SetDispName(sender);
|
return sender.MstNameCtrl.Text.Length > 0;
|
}
|
|
/// <summary>
|
/// 指定コードが存在しない時のエラーメッセージ
|
/// </summary>
|
protected void ShowIDErrMsg(CTextBox sender)
|
{
|
MessageBox.Show(NotExistsMsg, sender.TipText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
}
|
|
/// <summary>
|
/// 項目遷移(Mouse、キー以外でコードからFocus()を使う)の時に、
|
/// 前の項目のValidatingイベント発生しないようにしないといけない
|
/// </summary>
|
/// <param name="ctrl"></param>
|
protected void SetCellFocus(int row, int col, bool isFocus)
|
{
|
try
|
{
|
m_DisableSelectionChanged = true;
|
dgvData.Rows[row].Cells[col].Selected = true;
|
dgvData.CurrentCell = dgvData.Rows[row].Cells[col];
|
if (isFocus) { dgvData.Focus(); }
|
}
|
catch { }
|
finally
|
{
|
m_DisableSelectionChanged = false;
|
}
|
}
|
|
|
#endregion
|
|
#region ★★★★★ Public Function ★★★★★
|
#endregion
|
}
|
}
|