From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。
---
HotelPms.Share.Windows/Tool/DataSelector.cs | 352 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 352 insertions(+), 0 deletions(-)
diff --git a/HotelPms.Share.Windows/Tool/DataSelector.cs b/HotelPms.Share.Windows/Tool/DataSelector.cs
new file mode 100644
index 0000000..540678f
--- /dev/null
+++ b/HotelPms.Share.Windows/Tool/DataSelector.cs
@@ -0,0 +1,352 @@
+using HotelPms.Share.Util;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HotelPms.Share.Windows.Tool
+{
+ public partial class DataSelector : Form
+ {
+ #region ★★★★★ Declartions ★★★★★
+
+ [Flags]
+ public enum Style : int
+ {
+ None = 0x1,
+ HideBottom = 0x2,
+ HideReturnField = 0x4,
+ HideGridHeader = 0x8,
+ }
+
+ private List<string> m_CurrentRow = new List<string>();
+
+
+ public List<string> SelecetdItem
+ {
+ get
+ {
+ return m_CurrentRow;
+ }
+ }
+
+ private DataView DtView = new DataView();
+
+ // 共通変数
+ private int intReturnField_IndexNo; // ReturnFieldのIndex
+ private bool strVisibleBottom = true;
+ private bool strVisibleReturnField = true;
+ private bool visibleGridHeader = true;
+
+ #endregion
+
+ #region ★★★★★ Property ★★★★★
+
+ public bool IsReturnRow { get; set; } = false;
+
+ public Control OwnerControl { get; set; } = null;
+
+ public DataTable Data { get; set; } = null;
+
+ /// <summary>
+ /// ReturnField(選択したときに返すフィールド名)
+ /// </summary>
+ public string ReturnField { get; set; } = "コード";
+
+ public string SearchField { get; set; } = "名称";
+
+ public Style CurStyle { get; set; } = Style.None;
+
+ public List<int> ColWidth { get; set; } = new List<int>();
+
+ /// <summary>
+ /// ReturnValue(選択後に取得できる値)
+ /// </summary>
+ public string ReturnValue { get; set; } = string.Empty;
+
+ #endregion
+
+ #region ★★★★★ Class Event ★★★★★
+
+ public DataSelector(Control obj)
+ {
+ InitializeComponent();
+ OwnerControl = obj;
+ }
+
+ private void CalendarSelector_Load(object sender, EventArgs e)
+ {
+ //如果要将Control1(例如Label1或者Button1)上的点(x,y)转换成屏幕上的点(x1,y1),那么就调用Control1.PointToScreen。
+ //反之,如果要将屏幕的(x1,y1)变成控件上的(x,y),那么就调用Control1.PointToClient。
+ //eg1:求Button1的左上角在屏幕上的位置。
+ //Point p = new Point(0, 0); // 0,0 是左上角
+ //p = Button1.PointToScreen(p);
+ Point location = OwnerControl.PointToScreen(new Point(0, 0));
+ location = new Point(location.X -1,location.Y + OwnerControl.Height - 2);
+ Screen currentScreen = Screen.FromControl(OwnerControl);
+ if (location.X + this.Width > currentScreen.WorkingArea.X + currentScreen.WorkingArea.Width) { location.X = currentScreen.WorkingArea.X + currentScreen.WorkingArea.Width - this.Width; }
+ if(location.Y+ this.Height > currentScreen.WorkingArea.Y + currentScreen.WorkingArea.Height) { location.Y -= (currentScreen.WorkingArea.Y + OwnerControl.Height - 2 + this.Height); }
+ this.Location = location;
+
+ if ((CurStyle & Style.HideBottom) == Style.HideBottom) { strVisibleBottom = false; }
+ if ((CurStyle & Style.HideGridHeader) == Style.HideGridHeader) { visibleGridHeader = false; }
+ if ((CurStyle & Style.HideReturnField) == Style.HideReturnField) { strVisibleReturnField = false; }
+
+ Data.TableName = "SelectTable";
+ DtView.Table = Data;
+ DtView.RowFilter = "";
+
+ // データを表示
+ this.DataGridView1.DataSource = DtView;
+
+ //下部の検索キーと閉じるボタンを表示するか(初期値:True(表示))
+ pnlFilter.Visible = strVisibleBottom;
+
+ //ReturnField(戻り値を返す項目列名)のIndexNoを取得する。
+ intReturnField_IndexNo = -1;
+
+ if (ReturnField.Length == 0)
+ {
+ intReturnField_IndexNo = 0;
+ }
+ else
+ {
+ for (int i = 0; i < this.DataGridView1.Columns.Count; i++)
+ {
+ if (this.DataGridView1.Columns[i].HeaderText.ToString() == ReturnField.ToString())
+ {
+ intReturnField_IndexNo = i;
+ }
+ }
+ }
+
+ //ReturnField(戻り値を返す項目列名)を取得する。
+ if (ReturnField.Length == 0)
+ {
+ ReturnField = this.DtView.Table.Columns[intReturnField_IndexNo].ColumnName.ToString();
+ }
+
+ //SearchField(検索キーに関連させる項目列名)を取得する。
+ if (SearchField.Length == 0)
+ {
+ SearchField = this.DtView.Table.Columns[intReturnField_IndexNo + 1].ColumnName.ToString();
+ }
+
+ //VisibleReturnField = falseの場合、ReturnFieldを非表示とする。
+ if ((!strVisibleReturnField) && (intReturnField_IndexNo > -1))
+ {
+ this.DataGridView1.Columns[intReturnField_IndexNo].Visible = false;
+ }
+
+ if (Data.Rows.Count == 0)
+ {
+ MessageBox.Show("該当データがありません。");
+ this.Close();
+ return;
+ }
+
+ this.DataGridView1.ColumnHeadersVisible = visibleGridHeader;
+
+ //エラー処理
+ if (!ValidateInput())
+ {
+ Debug.Assert(false, "開発用Error", "Selectが不適切、searchFieldが数値、文字列以外");
+
+ }
+
+ DataGridView1.EnableHeadersVisualStyles = false;
+ DataGridView1.ColumnHeadersHeight = 25;
+ foreach (DataGridViewColumn col in DataGridView1.Columns)
+ {
+ col.HeaderCell.Style.BackColor = System.Drawing.Color.FromArgb(50, 50, 100);
+ col.HeaderCell.Style.ForeColor = Color.White;
+ }
+
+ DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
+ DataGridView1.AllowUserToResizeColumns = true;
+ if (ColWidth == null || ColWidth.Count == 0)
+ {
+ DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ }
+ else
+ {
+ for (int i = 0; i < ColWidth.Count; i++)
+ {
+ DataGridView1.Columns[i].Width = ColWidth[i];
+ }
+ }
+
+
+ if(DataGridView1.Rows.Count > 0)
+ {
+ DataGridView1.Rows[0].Cells[0].Selected = true;
+ DataGridView1.CurrentCell = DataGridView1.Rows[0].Cells[0];
+ this.ActiveControl = DataGridView1;
+ }
+ }
+
+ private void DataSelector_KeyDown(object sender, KeyEventArgs e)
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.Escape:
+ e.Handled = true;
+ ReturnValue = string.Empty;
+ this.Close();
+ break;
+ }
+ }
+
+ #endregion
+
+ #region ★★★★★ Control Event ★★★★★
+
+ private void DataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
+ {
+ DataGridView1_KeyDown(sender, new KeyEventArgs(Keys.Enter));
+ }
+
+ private void DataGridView1_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.KeyCode == Keys.Enter)
+ {
+ if (DataGridView1.RowCount > 0)
+ {
+
+ if (!IsReturnRow)
+ {
+ ReturnValue = this.DataGridView1[ReturnField, this.DataGridView1.CurrentCell.RowIndex].Value.ToString(); //Cell値
+ }
+ else
+ {
+ m_CurrentRow.Clear();
+ foreach (DataGridViewCell cell in DataGridView1.CurrentRow.Cells) { m_CurrentRow.Add(CConvert.ToString(cell.Value)); }
+ }
+ //画面を閉じる
+ this.Close();
+ }
+ }
+ else if (e.KeyCode == Keys.Tab)
+ {
+ e.Handled = true;
+ txtFilter.Focus();
+ }
+ }
+
+ private void TxtFilter_KeyDown(object sender, KeyEventArgs e)
+ {
+ //Enterキー入力の場合
+ if (e.KeyCode == Keys.Enter)
+ {
+ //DataGridView1へフォーカス移動
+ DataGridView1.Focus();
+ }
+ }
+
+ private void TxtFilter_Enter(object sender, EventArgs e)
+ {
+ txtFilter.BackColor = Color.LemonChiffon;
+ }
+
+ private void TxtFilter_Leave(object sender, EventArgs e)
+ {
+ txtFilter.BackColor = Color.White;
+ }
+
+ private void TxtFilter_TextChanged(object sender, EventArgs e)
+ {
+ // フィルター条件を判別
+ if (txtFilter.Text.Length == 0 || SearchField.Length == 0)
+ {
+ //フィルタ条件無し(全てを表示)
+ DtView.RowFilter = string.Empty;
+ }
+ else
+ {
+ //フィルタ条件指定
+ DtView.RowFilter = $"{SearchField} LIKE '%{txtFilter.Text}%'";
+ }
+ // データを表示
+ this.DataGridView1.DataSource = DtView;
+ }
+
+
+ #endregion
+
+ #region ★★★★★ Private Function ★★★★★
+
+ /// <summary>
+ /// ValidateInput
+ /// </summary>
+ private bool ValidateInput()
+ {
+ if (IsReturnRow) { return true; }
+ if (Data.Rows.Count == 0) { return false; }
+ if (Data.Columns[SearchField].DataType != typeof(string)) { return false; }
+ return true;
+ }
+
+ #endregion
+
+ #region ★★★★★ Public Function ★★★★★
+
+ public static List<string> ExecuteForRow(Control owner, DataTable data, Style style, Size size, string returnField, string searchField, List<int> colWidth)
+ {
+ using (DataSelector form = new DataSelector(owner))
+ {
+ form.CurStyle = style;
+ if (!size.Equals(Size.Empty)) { form.Size = size; }
+ if (returnField.Length > 0) { form.ReturnField = returnField; }
+ if (searchField.Length > 0) { form.SearchField = searchField; }
+ if (colWidth != null) { form.ColWidth = colWidth; }
+ form.Data = data;
+ form.IsReturnRow = true;
+ form.ShowDialog();
+ return form.SelecetdItem;
+ }
+
+ }
+
+ /// <summary>
+ /// 一覧表示
+ /// </summary>
+ /// <returns></returns>
+ public static string Execute(Control owner, DataTable data)
+ {
+ return Execute(owner, data, Size.Empty);
+ }
+
+ public static string Execute(Control owner, DataTable data, Size size)
+ {
+ return Execute(owner, data, size, string.Empty, string.Empty, null, Style.None);
+ }
+
+ public static string Execute(Control owner, DataTable data, Size size, string returnField, string searchField, List<int> colWidth, Style style)
+ {
+ string result = string.Empty;
+ using (DataSelector form = new DataSelector(owner))
+ {
+ form.CurStyle = style;
+ if (!size.Equals(Size.Empty)) { form.Size = size; }
+ if (returnField.Length > 0) { form.ReturnField = returnField; }
+ if (searchField.Length > 0) { form.SearchField = searchField; }
+ if (colWidth != null) { form.ColWidth = colWidth; }
+ form.Data = data;
+ form.ShowDialog();
+ if (form.ReturnValue.Length > 0)
+ {
+ result = form.ReturnValue;
+ }
+ }
+ return result;
+ }
+
+ #endregion
+ }
+}
--
Gitblit v1.10.0