/*
* Copyright INDEX Co.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using ChatworkBulkSender.Daos;
using ChatworkBulkSender.Dtos;
using ChatworkBulkSender.Utils;
using ChatworkBulkSender.Forms;
using System.Diagnostics;
using System.Linq;
namespace ChatworkBulkSender.UserControls
{
/// <summary>
/// 顧客マスタ画面DGVコントロール。
/// デザイナー表示のためデバッグ時は、中間クラスを経由する。
/// </summary>
[DesignerCategory("UserControl")] // デザイナーでユーザーコントロールとして表示することを明記する
public partial class CustomerDgvControl : BaseCustomerDgvControl
{
protected override int EditButtonColumnIndex => 6;
protected override int SortableColumnMaxIndex => 5;
protected override string InitialSortColumnName => "SortOrder";
EventHandler<CustomerMasterDto> _createdCustomer;
public CustomerDgvControl()
{
if (!IsInDesignMode())
{
InitializeComponent();
if (_dgv == null)
{
base._dgv = this.customerDgv;
}
InitializeDgv();
SetUpColumns();
customerDgv.Dock = DockStyle.Fill;
}
}
protected override void InitializeDgv()
{
base.InitializeDgv();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsInDesignMode())
{
_createdCustomer = (s, args) => CreatedCustomer();
_individualEditForm = new M_CustomerMasterIndividualEdit();
_individualEditForm.DataCreated += _createdCustomer;
RefreshData();
}
}
public void ClearSelectionCell()
{
ClearSelection();
}
/* public void ShowCreateForm()
{
customerDgv.Enabled = false;
try
{
var createForm = new M_CustomerMasterIndividualEdit(
M_CustomerMasterIndividualEdit.ButtonMode.Register);
createForm.DataCreated += _createdCustomer;
createForm.Owner = this.ParentForm;
createForm.FormClosed += (s, args) =>
{
customerDgv.Enabled = true;
if (this.ParentForm != null && !this.ParentForm.Visible)
{
this.ParentForm.Show();
this.ParentForm.BringToFront();
}
RefreshData();
};
this.ParentForm.Hide();
createForm.Show();
}
catch(Exception e)
{
customerDgv.Enabled = true;
if (this.ParentForm != null && !this.ParentForm.Visible)
{
this.ParentForm.Show();
}
MessageBoxUtil.ShowErr($"新規作成画面の表示中にエラーが発生しました。\n\n{e.Message}");
}
}*/
protected override void ShowEditForm(CustomerMasterDto selectedItem)
{
customerDgv.Enabled = false;
try
{
if(_individualEditForm != null && !_individualEditForm.IsDisposed)
{
var form = _individualEditForm;
if (form != null)
{
form.DataCreated += _createdCustomer;
}
_individualEditForm.Close();
_individualEditForm.Dispose();
// 内部メッセージ処理
Application.DoEvents();
}
// フォームを作成(更新ボタン配置の設定にする)
_individualEditForm = new M_CustomerMasterIndividualEdit(
M_CustomerMasterIndividualEdit.ButtonMode.Update, selectedItem);
var editForm = _individualEditForm;
if (editForm != null)
{
editForm.DataCreated += _createdCustomer;
}
_individualEditForm.Owner = this.ParentForm;
_individualEditForm.FormClosed += (s, args) =>
{
customerDgv.Enabled = true;
if (this.ParentForm != null && !this.ParentForm.Visible)
{
this.ParentForm.Show();
this.ParentForm.BringToFront();
}
RefreshData();
};
this.ParentForm.Hide();
_individualEditForm.Show();
}
catch(Exception e)
{
customerDgv.Enabled = true;
if (this.ParentForm != null && !this.ParentForm.Visible)
{
this.ParentForm.Show();
}
MessageBoxUtil.ShowErr($"個別編集画面の表示中にエラーが発生しました。\n\n{e.Message}");
}
}
private void CreatedCustomer()
{
RefreshData();
}
private void SetUpColumns()
{
_dgv.Columns.Clear();
_dgv.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = nameof(CustomerMasterDto.ManagementNumber),
Name = nameof(CustomerMasterDto.ManagementNumber),
HeaderText = "管理番号",
ReadOnly = true,
SortMode = DataGridViewColumnSortMode.Programmatic
,
});
var mgmtNumberCol = customerDgv.Columns[nameof(CustomerMasterDto.ManagementNumber)];
mgmtNumberCol.FillWeight = 60;
_dgv.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = nameof(CustomerMasterDto.CustomerName),
Name = nameof(CustomerMasterDto.CustomerName),
HeaderText = "顧客名",
ReadOnly = true,
SortMode = DataGridViewColumnSortMode.Programmatic
,
});
var customerNameCol = customerDgv.Columns[nameof(CustomerMasterDto.CustomerName)];
customerNameCol.FillWeight = 400;
_dgv.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = nameof(CustomerMasterDto.RoomId),
Name = nameof(CustomerMasterDto.RoomId),
HeaderText = "ルームID(rid)",
ReadOnly = true,
SortMode = DataGridViewColumnSortMode.Programmatic
,
});
var roomIdCol = customerDgv.Columns[nameof(CustomerMasterDto.RoomId)];
roomIdCol.FillWeight = 60;
_dgv.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = nameof(CustomerMasterDto.DestinationAccountId),
Name = nameof(CustomerMasterDto.DestinationAccountId),
HeaderText = "宛先アカウントID",
ReadOnly = true,
SortMode = DataGridViewColumnSortMode.Programmatic
,
});
var destinationCol = customerDgv.Columns[nameof(CustomerMasterDto.DestinationAccountId)];
destinationCol.FillWeight = 90;
_dgv.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = nameof(CustomerMasterDto.SortOrder),
Name = nameof(CustomerMasterDto.SortOrder),
HeaderText = "並び順",
ReadOnly = true,
SortMode = DataGridViewColumnSortMode.Programmatic
,
});
var sortOrderCol = customerDgv.Columns[nameof(CustomerMasterDto.SortOrder)];
sortOrderCol.FillWeight = 38;
sortOrderCol.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
sortOrderCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
sortOrderCol.HeaderCell.Style.Padding = new Padding(12, 0, 0, 0);
_dgv.Columns.Add(new DataGridViewCheckBoxColumn
{
DataPropertyName = nameof(CustomerMasterDto.IsUnused),
Name = nameof(CustomerMasterDto.IsUnused),
HeaderText = "未使用フラグ",
ReadOnly = true,
SortMode = DataGridViewColumnSortMode.Programmatic
,
});
var isUnusedCol = customerDgv.Columns[nameof(CustomerMasterDto.IsUnused)];
isUnusedCol.FillWeight = 55;
isUnusedCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
isUnusedCol.HeaderCell.Style.Padding = new Padding(12, 0, 0, 0);
_dgv.Columns.Add(new DataGridViewButtonColumn
{
// Data列ではないのでNameのみを設定
Name = "BtnEdit",
HeaderText = "編集",
Text = "\u270F\uFE0F",
UseColumnTextForButtonValue = true,
ReadOnly = true,
DefaultCellStyle = new DataGridViewCellStyle
{
Font = new Font("Segoe UI Emoji", 10),
Alignment = DataGridViewContentAlignment.MiddleCenter
,
}
});
var editCol = customerDgv.Columns["BtnEdit"];
editCol.FillWeight = 38;
editCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
}
protected override List<CustomerMasterDto> GetDataFromDao()
{
var dao = new CustomerMasterDao();
List<CustomerMasterDto> currentData = dao.GetAll(true);
if (_searchCriteria != null && _searchCriteria.Count > 0)
{
var query = currentData.AsQueryable();
if (_searchCriteria.ContainsKey("ManagementNumber"))
{
var mgmtNumber = _searchCriteria["ManagementNumber"].ToString();
query = query.Where(x => x.ManagementNumber.ToString().StartsWith(mgmtNumber));
}
if (_searchCriteria.ContainsKey("CustomerName"))
{
var customerName = _searchCriteria["CustomerName"].ToString();
query = query.Where(x => x.CustomerName.ToString().Contains(customerName));
}
if (_searchCriteria.ContainsKey("IsUnused"))
{
var includeUnused = (bool)_searchCriteria["IsUnused"];
if (!includeUnused)
{
query = query.Where(x => !x.IsUnused);
}
}
return query.ToList();
}
return currentData.Where(x => !x.IsUnused).ToList(); ;
}
protected override bool HasUpdateAfter(DateTime? lastLoadTime)
{
if (lastLoadTime == null) { return false; }
return new CustomerMasterDao().HasUpdatesAfter(lastLoadTime);
}
public override void Search(Dictionary<string, object> criteria)
{
base.Search(criteria);
this.GetDataFromDao();
}
protected override void Dgv_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
base.Dgv_ColumnHeaderMouseDoubleClick(sender, e);
}
protected override void Dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
base.Dgv_CellClick(sender, e);
}
private void customerDgv_BringContextChanged(object sender, EventArgs e)
{
ClearSelection();
}
private void customerDgv_Leave(object sender, EventArgs e)
{
ClearSelection();
}
}
}