Files
lserp_cs_6.0/插件库/Lskj.MesGumDip/Control/SweepAutoEdit.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

1117 lines
44 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using DevExpress.XtraEditors;
using System.Drawing;
using DevExpress.XtraGrid.Views.Grid;
using System.Windows.Forms;
using System.Data;
using DevExpress.XtraGrid.Columns;
using Lskj.Business.Impl;
using Lskj.Control.Model;
using System.Threading;
using Lskj.Util;
using System.Text.RegularExpressions;
using Lskj.Data;
using DevExpress.XtraGrid.Menu;
using DevExpress.Utils.Menu;
using System.Data.SqlClient;
using Lskj.Business;
using Lskj.Model;
using Lskj.Control;
namespace Lskj.MesGumDip.Control
{
public partial class SweepAutoEdit : UserControl
{
/// <summary>
/// 是否处理过计算
/// </summary>
private bool _Handed;
/// <summary>
/// 弹出框最大宽度
/// </summary>
private int _maxPopupWidth = 800;
private string _value;
private bool _hasRemark = false;
/// <summary>
/// 后台线程是否在执行中
/// </summary>
private bool _working = false;
private List<string> _queryQueue = new List<string>();
/// <summary>
/// The _popup
/// </summary>
private AutoGridPopup _popup = null;
/// <summary>
/// 新增模糊查询条件
/// </summary>
private string AddConditions = string.Empty;
/// <summary>
/// 弹出框是否显示
/// </summary>
/// <value><c>true</c> if this instance is show popup; otherwise, <c>false</c>.</value>
public bool IsShowPopup;
/// <summary>
/// 弹出框是否自动弹出
/// </summary>
/// <value><c>true</c> if this instance is show popup; otherwise, <c>false</c>.</value>
public bool AutoShowPopup = true;
/// <summary>
/// 是否需要自动匹配列宽度
/// </summary>
[Description("是否需要自动匹配列宽度")]
public bool IsBestFitColumns = true;
/// <summary>
/// The minimum popup width
/// </summary>
[Description("弹出框最小宽度")]
public int MinPopupWidth;
/// <summary>
/// The minimum popup height
/// </summary>
[Description("弹出框最小高度")]
public int MinPopupHeight;
/// <summary>
/// The value field
/// </summary>
public string ValueField = string.Empty;
/// <summary>
/// The value member
/// </summary>
[Description("设置ValueMember")]
public string ValueMember = string.Empty;
/// <summary>
/// The text field
/// </summary>
[Description("设置TextMember")]
public string TextMember = string.Empty;
public string FormKey = string.Empty;
/// <summary>
/// The remark text
/// </summary>
[Description("设置备注")]
public string RemarkField = "remark";
/// <summary>
/// 数据源
/// </summary>
public string SourceSQL = string.Empty;
/// <summary>
/// The contro object
/// </summary>
public MyControl ControlObj;
/// <summary>
/// 控件对象
/// </summary>
public ControlModel Model;
/// <summary>
/// 标题对象
/// </summary>
/// <value>The title label object.</value>
public Label TitleLabelObj { get { return lbTitle; } }
/// <summary>
/// 公用控件值
/// </summary>
/// <value>The button object.</value>
public ButtonEdit TextEdit { get { return btnEdit; } }
/// <summary>
///选中获取数据后执行事件
/// </summary>
public event EventHandler OnEnterAfterback;
/// <summary>
/// 隐藏值
/// </summary>
/// <value>The value.</value>
public new string EditValue
{
get
{
// 存在名称并且没有value值则
if (btnEdit != null && string.IsNullOrEmpty(_value) && !string.IsNullOrEmpty(btnEdit.Text))
{
if (this.DataSource != null && this.DataSource is DataTable)
{
DataTable table = this.DataSourceTable != null ? this.DataSourceTable : this.DataSource as DataTable;
DataRow rowItem = table.Select("1=1").FirstOrDefault(x => btnEdit.Text == x[TextMember] + "");
if (rowItem != null)
{
return rowItem[ValueMember] + "";
}
else
{
rowItem = (this.DataSource as DataTable).Select("1=1").FirstOrDefault(x => btnEdit.Text == x[TextMember] + "");
if (rowItem != null)
{
return rowItem[ValueMember] + "";
}
}
}
}
return btnEdit != null && string.IsNullOrEmpty(btnEdit.Text) ? "" : _value;
}
set
{
if (this.DataSource != null && this.DataSource is DataTable)
{
DataTable table = this.DataSourceTable != null && this.DataSourceTable.Rows.Count > 0 && !SourceSQL.ToLower().StartsWith("exec") ? this.DataSourceTable : this.DataSource as DataTable;
DataRow rowItem = table.Select("1=1").FirstOrDefault(x => value == x[ValueMember] + "");
if (rowItem != null)
{
this._value = rowItem[ValueMember] + "";
this.btnEdit.Text = rowItem[TextMember] + "";
this.btnEdit.SelectionStart = this.btnEdit.Text.Length;
}
else
{
rowItem = (this.DataSource as DataTable).Select("1=1").FirstOrDefault(x => value == x[ValueMember] + "");
if (rowItem != null)
{
this._value = rowItem[ValueMember] + "";
this.btnEdit.Text = rowItem[TextMember] + "";
this.btnEdit.SelectionStart = this.btnEdit.Text.Length;
}
else
{
this._value = string.Empty;
this.btnEdit.Text = string.Empty;
}
}
}
else
{
this._value = string.Empty;
this.btnEdit.Text = string.Empty;
}
}
}
/// <summary>
/// 设置数据源
/// </summary>
/// <value>The data source.</value>
public object DataSource
{
get
{
return this._popup != null ? this._popup.GridControlObj.DataSource : null;
}
set
{
if (value != null)
{
this._popup.GridControlObj.DataSource = value;
this._popup.GridViewObj.PopupMenuShowing += new PopupMenuShowingEventHandler(this.OnGridViewPopupMenuShowing);
this._popup.Model = Model;
this.SetGridViewColumns(value as DataTable);
}
}
}
/// <summary>
/// 数据源(用于匹配数据)
/// </summary>
public DataTable DataSourceTable;
public string SpeciesValue;
/// <summary>
/// <para>说明:隐藏弹出框</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void HidePopup()
{
if (this.IsShowPopup)
{
this.IsShowPopup = false;
this._popup.Hide();
}
}
/// <summary>
/// <para>说明:显示弹出框</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void ShowPopup()
{
if (!this.btnEdit.Properties.ReadOnly && this.Enabled && !this.IsShowPopup)
{
if (AutoShowPopup)
{
this.IsShowPopup = true;
this._popup.Show();
}
}
}
/// <summary>
/// 弹出框
/// </summary>
/// <value>The popup.</value>
[Description("自动搜索弹出框")]
public AutoGridPopup Popup { get { return this._popup; } private set { _popup = value; } }
/// <summary>
/// 界面关闭时
/// </summary>
public event EventHandler OnPopupClosed;
/// <summary>
/// 设置控件的排序值
/// </summary>
/// <value>The title label object.</value>
public string orderId;
/// <summary>
/// 控件公共回车事件
/// </summary>
/// <value>The KeyEventHandler KeyDown.</value>
public event KeyEventHandler KeyDown;
/// <summary>
/// 字体大小
/// </summary>
public int FontSize
{
get
{
return FontSize;
}
set
{
if (value > 0)
{
this.lbTitle.Font = new Font(this.lbTitle.Font.FontFamily, value);
this.btnEdit.Font = new Font(this.btnEdit.Font.FontFamily, value);
}
}
}
private void buttonEdit1_KeyDown(object sender, KeyEventArgs e)
{
if (KeyDown != null)
{
KeyDown(this, e);
}
}
public SweepAutoEdit()
{
InitializeComponent();
InitializePopup();
InitializeEvent();
}
/// <summary>
/// <para>说明:初始化事件</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void InitializeEvent()
{
this.btnEdit.GotFocus += new EventHandler(OnAutoGridLookUpGotFocus);
this.btnEdit.LostFocus += new EventHandler(OnAutoGridLookUpLostFocus);
this.btnEdit.KeyUp += new KeyEventHandler(OnAutoGridLookUpKeyUp);
this.btnEdit.Leave += new EventHandler(OnAutoGridLookUpleave);
this._popup.GridControlObj.LostFocus += new EventHandler(OnAutoGridLookUpLostFocus);
this._popup.OnGridViewMouseClick += new EventHandler(OnPopupGridViewMouseClick);
this._popup.OnGridViewEnter += new KeyEventHandler(OnPopupGridViewEnter);
//this.SourceSQL.
}
/// <summary>
/// <para>说明:初始化弹出框</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-15 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void InitializePopup()
{
this._popup = new AutoGridPopup();
this._popup.LookUp = this.btnEdit;
this._popup.Hide();
}
private void CalcFormAndGrid()
{
if (string.IsNullOrEmpty(this.btnEdit.Text.Trim()))
{
this.ShowPopup();
}
Thread queryThread = new Thread(CalcPopupSize);
queryThread.IsBackground = true;
queryThread.Start(Popup);
}
/// <summary>
/// <para>说明:计算弹出控件位置</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void CalcPopupLocation()
{
this._popup.Parent = this.GetParent(this.Parent);
Form form = this._popup.Parent as Form;
if (form != null)
{
int iTop = this.Top + this.Height;
int iLeft = this.Left;
System.Windows.Forms.Control ctr = this.Parent;
while (ctr != form)
{
iTop += ctr.Top;
iLeft += ctr.Left + 16;
ctr = ctr.Parent;
}
if (iTop + this.Height + this._popup.Height > ctr.Height)
{
if (iTop - this.Height > ctr.Height - iTop)
{
if (this._popup.Height > iTop - this.Height)
{
this._popup.Height = iTop - this.Height;
iTop = 0;
}
else
{
iTop = iTop - this.Height - this._popup.Height;
}
}
else
{
this._popup.Height = ctr.Height - iTop - 30;
}
}
if (iLeft + this._popup.Width > ctr.Width)
{
if (iLeft + this.Width > ctr.Width - iLeft)
{
if (this._popup.Width > iLeft + this.Width)
{
this._popup.Width = iLeft + this.Width;
iLeft = 0;
}
else
iLeft = iLeft + this.Width - this._popup.Width;
}
else
this._popup.Width = ctr.Width - iLeft - 30;
}
this._popup.Left = iLeft;
this._popup.Top = iTop;
}
this._popup.BringToFront();
}
/// <summary>
/// <para>说明:</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-21 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void HandPopupSqlValue(object searchText)
{
if (string.IsNullOrEmpty(SourceSQL))
{
// 本地搜索
}
else
{
// 数据库搜索
string sqlValue = string.Empty;
if (SourceSQL.ToLower().StartsWith("exec"))
{
// 存储过程处理
sqlValue = SourceSQL;
if (sqlValue.Contains("{" + ValueField + "}"))
sqlValue = sqlValue.Replace("{" + ValueField + "}", searchText + "");
if (sqlValue.Contains("{" + TextMember + "}"))
sqlValue = sqlValue.Replace("{" + TextMember + "}", searchText + "");
if (sqlValue.Contains("{" + RemarkField + "}"))
sqlValue = sqlValue.Replace("{" + RemarkField + "}", searchText + "");
if (this.ControlObj != null)
sqlValue = this.ControlObj.ReplaceControlValue(sqlValue);
}
else
{
// SQL处理
string remarkCond = string.Empty;
if (this._hasRemark)
remarkCond = string.Format(" or {0} like '%{1}%' or dbo.P_getpy({0}) like '%{1}%'", RemarkField, searchText);
sqlValue = string.Format("select top 500 * from ({0}) temp where {1} like '%{3}%' or {2} like '%{3}%' or dbo.P_getpy({2}) like '%{3}%' " + remarkCond + AddConditions, SourceSQL, ValueField, TextMember, searchText);
}
//if (this.Model != null && (this.Model.FieldType == ControlType.LabAutoCompleteValueParam || this.Model.FieldType == ControlType.LabAutoCompleteTextParam))
//{
//}
// 带参数sql,处理
if (this.ControlObj != null && Regex.IsMatch(SourceSQL, ReplaceHelper.ReplaceParamKey))
{
string sourceSql = sqlValue;
// Step 1:替换SpeciesNo
List<string> condition = ReplaceHelper.GetParamFields(sourceSql);
if (!string.IsNullOrEmpty(SpeciesValue))
{
foreach (string item in condition)
{
string field = item.Replace("{", "").Replace("}", "");
if ("speciesno".Equals(field, StringComparison.OrdinalIgnoreCase))
{
sourceSql = sourceSql.Replace(item, SpeciesValue);
}
}
}
// Step 2:替换SpeciesNo
if (this.ControlObj.CurrentData != null && this.ControlObj.CurrentData.Table.Columns.Contains("SpeciesNo"))
{
foreach (string item in condition)
{
string field = item.Replace("{", "").Replace("}", "");
if ("speciesno".Equals(field, StringComparison.OrdinalIgnoreCase))
{
sourceSql = sourceSql.Replace(item, this.ControlObj.CurrentData["SpeciesNo"] + "");
}
}
}
sqlValue = ControlObj.ReplaceControlValue(sourceSql.Replace("#", ""));
}
if (!this._working)
{
Thread thread = new Thread(new ParameterizedThreadStart(RefreshPopupDataSource));
thread.IsBackground = true;
thread.Start(sqlValue);
}
else
{
this._queryQueue.Add(sqlValue);
}
}
}
/// <summary>
/// <para>说明:刷新弹出框数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-05-02 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sqlValue">The SQL value.</param>
private void RefreshPopupDataSource(object sqlValue)
{
if (this.InvokeRequired)
{
this.Invoke(new EventHandler(delegate
{
this._working = true;
this.Popup.LabelObj.Text = "正在筛选数据,请稍后...";
this.Popup.BottomPanelObj.Visible = true;
this.Popup.GridControlObj.DataSourceTable().Clear();
}));
}
DateTime beginTime = DateTime.Now;
DataTable table = MainImpl.GetDataTableResult(sqlValue + "");
DateTime endTime = DateTime.Now;
if (this._queryQueue.Count > 0)
{
// 在检索过程中还存在输入数据,则拿最后一次数据在进行匹配一次
Thread thread = new Thread(new ParameterizedThreadStart(RefreshPopupDataSource));
thread.IsBackground = true;
thread.Start(this._queryQueue.Last());
this._queryQueue.Clear();
}
else
{
if (this.InvokeRequired)
{
this.Invoke(new EventHandler(delegate
{
int second = Convert.ToInt32((endTime - beginTime).TotalSeconds);
string tipMsg = "数据筛选完成.";
this.Popup.LabelObj.Text = second > 0 ? string.Format(tipMsg + "(耗时{0}秒)", second) : tipMsg;
this.Popup.GridControlObj.DataSource = table;
this._working = false;
this.CalcFormAndGrid();
}));
}
}
}
/// <summary>
/// <para>说明:获取顶层窗口</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns>Control.</returns>
private Form GetParent(System.Windows.Forms.Control ctr)
{
if (ctr == null) return null;
return ctr is Form ? ctr as Form : GetParent(ctr.Parent);
}
/// <summary>
/// <para>说明:设置值</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void SetValue()
{
DataRow rowItem = this._popup.GridViewObj.GetFocusedDataRow();
if (rowItem != null)
{
this.EditValue = rowItem[ValueMember] + "";
this.btnEdit.Focus();
}
if (this.OnPopupClosed != null)
this.OnPopupClosed(this, null);
}
/// <summary>
/// <para>说明:根据输入值判断下拉框中是否存在value值</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-05-14 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public string getValueItem(string ItemText)
{
string obj = string.Empty;
DataTable table = this.DataSourceTable;
DataTable currtable = this.DataSource as DataTable;
if (table != null)
{
DataRow rowItemValue = table.Rows.Cast<DataRow>().FirstOrDefault(x => x[Model.TextMember] + "" == ItemText);
obj = rowItemValue != null ? rowItemValue[Model.ValueMember] + "" : string.Empty;
}
if (string.IsNullOrEmpty(obj) && currtable != null)
{
DataRow rowItemValue = currtable.Rows.Cast<DataRow>().FirstOrDefault(x => x[Model.TextMember] + "" == ItemText);
obj = rowItemValue != null ? rowItemValue[Model.ValueMember] + "" : string.Empty;
}
return obj;
}
/// <summary>
/// <para>说明:设置自定义列</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2019-09-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public virtual void SetCustomColumns()
{
if (string.IsNullOrEmpty(this.FormKey) || !BaseImpl.HasExistsTable(ResourceKeys.SettingTableName)) return;
DataTable customTable = this._popup.GridViewObj.GetCustomColumnByDatabase(this.FormKey);
if (customTable != null && customTable.Rows.Count > 0)
{
foreach (DataRow rowItem in customTable.Rows)
{
string fieldName = rowItem["fieldName"] + "";
int fieldWidth = Convert.ToInt32(rowItem["fieldWidth"]);
int index = Convert.ToInt32(rowItem["orderid"]);
bool visible = "1".Equals(rowItem["isVisible"] + "") && fieldWidth > 0;
bool isFix = "True".Equals(rowItem["IfFixColumn"] + "", StringComparison.OrdinalIgnoreCase);
GridColumn gridColumn = this._popup.GridViewObj.Columns.ColumnByName(fieldName);
if (gridColumn != null && gridColumn.Visible && gridColumn.Width > 0)
{
GridColumn colObj = this._popup.GridViewObj.Columns[fieldName];
colObj.VisibleIndex = index;
colObj.Width = fieldWidth;
colObj.Visible = visible;
colObj.Fixed = isFix ? FixedStyle.Left : FixedStyle.None;
}
}
}
}
/// <summary>
/// <para>说明:重置表格属性</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2019-09-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected virtual void ResetItemClick(object sender, EventArgs e)
{
try
{
if (!BaseImpl.HasExistsTable(ResourceKeys.SettingTableName))
{
MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable);
return;
}
if (MessageUtil.Show(ResourceKeys.IsResetColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
bool success = this._popup.GridViewObj.ResetCustomColumnToDatabase(FormKey);
SetGridViewColumns(DataSource as DataTable);
_Handed = false;
this.CalcFormAndGrid();
MessageUtil.Show(success ? ResourceKeys.ResetSuccess : ResourceKeys.ResetFault);
this.ShowPopup();
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:保存表格属性</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2019-09-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected virtual void SaveItemClick(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(this.FormKey))
{
MessageUtil.Show(ResourceKeys.NotSettingResetColumn);
return;
}
DataRow rowItem = null;
bool success = BaseImpl.HasExistsDataRow(ResourceKeys.SettingTableName, "formKey", FormKey, string.Format(" and OperatorId='{0}' ", ERPInfo.Instance.UserId), out rowItem);
if (!success)
{
MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable);
return;
}
if (MessageUtil.Show(ResourceKeys.IsSaveColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
if (rowItem == null)
{
success = this._popup.GridViewObj.SaveCustomColumnToDatabase(this.FormKey);
}
else
{
success = this._popup.GridViewObj.UpdateCustomColumnToDatabase(this.FormKey);
}
MessageUtil.Show(success ? ResourceKeys.SaveSuccess : ResourceKeys.SaveFault);
}
catch (SqlException sex)
{
if (sex.Message.Contains(ResourceKeys.FieldLenIsShort) &&
MessageUtil.Show(ResourceKeys.SaveFault + "\r\n" + ResourceKeys.CanUpgradeTable, MessageBoxButtons.YesNo) == DialogResult.Yes &&
BaseImpl.UpdateTableField(ResourceKeys.SettingTableName, "formKey", "varchar(200)"))
{
MessageUtil.Show(ResourceKeys.UpdateSuccess);
}
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
LogUtil.WriteError("保存表格属性出错", ex);
//MessageUtil.Show(ex);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
}
/// <summary>
/// <para>说明:列右键菜单扩展</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2019-09-11 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void OnGridViewPopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
{
try
{
if (e.MenuType == GridMenuType.Column)
{
GridViewColumnMenu columnMenu = e.Menu as GridViewColumnMenu;
DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", SaveItemClick);
DXMenuItem itemResetColumn = new DXMenuItem("重置表格属性", ResetItemClick);
itemSaveColumn.BeginGroup = true;
itemSaveColumn.Tag = e.HitInfo.Column;
columnMenu.Items.AddRange(new DXMenuItem[] { itemSaveColumn, itemResetColumn });
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void SetGridViewColumns(DataTable table)
{
AddConditions = string.Empty;
this._popup.GridViewObj.Columns.Clear();
if (table != null && this._popup.GridViewObj.Columns.Count == 0)
{
int popWidth = 200;
GridColumn valueColumn = new GridColumn();
valueColumn.Name = valueColumn.FieldName = ValueField;
valueColumn.Caption = "编码";
valueColumn.Visible = true;
valueColumn.Width = 60;
//字段第一个字符为下划线代表不显示
if (string.IsNullOrEmpty(ValueField) || ValueField.Substring(0, 1) == "_")
valueColumn.Visible = false;
GridColumn textColumn = new GridColumn();
textColumn.Name = textColumn.FieldName = TextMember;
textColumn.Caption = "名称";
textColumn.Visible = true;
textColumn.Width = 120;
//字段第一个字符为下划线代表不显示
if (string.IsNullOrEmpty(TextMember) || TextMember.Substring(0, 1) == "_")
textColumn.Visible = false;
this._popup.GridViewObj.Columns.AddRange(new GridColumn[] { valueColumn, textColumn });
if (table.Columns.IndexOf("remark") != -1)
{
DataColumn column = table.Columns.Cast<DataColumn>().FirstOrDefault(x => x.ColumnName.ToLower() == RemarkField);
if (column != null) RemarkField = column.ColumnName;
GridColumn remarkColumn = new GridColumn();
remarkColumn.Name = remarkColumn.FieldName = RemarkField;
remarkColumn.Caption = "备注";
remarkColumn.Visible = true;
remarkColumn.Width = 120;
//字段第一个字符为下划线代表不显示
if (RemarkField.Substring(0, 1) == "_")
remarkColumn.Visible = false;
this._popup.GridViewObj.Columns.Add(remarkColumn);
_hasRemark = true;
}
foreach (DataColumn dcol in table.Columns)
{
if ((dcol.ColumnName.Substring(0, 1) != "_") && (dcol.ColumnName.ToLower() != ValueField.ToLower()) && (dcol.ColumnName.ToLower() != TextMember.ToLower()) && (dcol.ColumnName.ToLower() != RemarkField.ToLower()) && ((int)dcol.ColumnName[0] > 127))
{
GridColumn otherColumn = new GridColumn();
otherColumn.Name = otherColumn.FieldName = otherColumn.Caption = dcol.ColumnName;
otherColumn.Visible = true;
otherColumn.Width = 80;
this._popup.GridViewObj.Columns.Add(otherColumn);
AddConditions += "or " + otherColumn.Name + " like '%{3}%'";
}
}
this.SetCustomColumns();
this._popup.Width = popWidth;
}
}
/// <summary>
/// <para>说明:计算控件Size,只计算一次</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-04-10 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="obj">The object.</param>
protected virtual void CalcPopupSize(object obj)
{
if (this._Handed) return;
this._Handed = true;
AutoGridPopup popupObj = obj as AutoGridPopup;
if (popupObj != null && IsBestFitColumns)
{
if (this.InvokeRequired)
{
this.Invoke((EventHandler)delegate
{
int calcLen = this.Popup.GridViewObj.DataRowCount > 20 ? 20 : this.Popup.GridViewObj.DataRowCount;
DataTable table = this.Popup.GridControlObj.DataSourceTable();
bool hasReamrkField = table.Columns.Contains(RemarkField);
int iValueWidth = 0, iTextWidth = 0, iRemarkWidth = 0, iOtherWidth = 0;
int iIndexWidth = popupObj.GridViewObj.IndicatorWidth;
for (int i = 0; i < calcLen; i++)
{
string valueValue = table.Rows[i][ValueMember] + "";
string textValue = table.Rows[i][TextMember] + "";
string remarkValue = hasReamrkField ? table.Rows[i][RemarkField] + "" : "";
int valueWidth = GraphicsText.GetTextWidth(valueValue);
int textWidth = GraphicsText.GetTextWidth(textValue);
int remarkWidth = GraphicsText.GetTextWidth(remarkValue);
if (iValueWidth < valueWidth) iValueWidth = valueWidth;
if (iTextWidth < textWidth) iTextWidth = textWidth;
if (iRemarkWidth < remarkWidth) iRemarkWidth = remarkWidth;
}
foreach (GridColumn col in this.Popup.GridViewObj.Columns)
{
if (col.Name.Substring(0, 1) != "_" &&
col.Name.ToLower() != ValueField.ToLower() &&
col.Name.ToLower() != TextMember.ToLower() &&
col.Name.ToLower() != RemarkField.ToLower())
{
col.Width = col.GetBestWidth();
iOtherWidth += col.Width;
}
}
// 由于计算有误差,所以计算列结果都加10px
iValueWidth = iValueWidth < 50 ? 50 : iValueWidth + 10;
iTextWidth = iTextWidth + 10;
popupObj.GridViewObj.Columns[ValueMember].Width = iValueWidth;
popupObj.GridViewObj.Columns[TextMember].Width = iTextWidth;
if (hasReamrkField)
{
popupObj.GridViewObj.Columns[RemarkField].Width = iRemarkWidth;
iRemarkWidth = iRemarkWidth + 10;
}
int popupWidth = iIndexWidth + iValueWidth + iTextWidth + iRemarkWidth + iOtherWidth + 20;
if (popupWidth > popupObj.Width)
popupObj.Width = popupWidth > this._maxPopupWidth ? this._maxPopupWidth : popupWidth;
this.CalcPopupLocation();
this._Handed = false;
});
}
}
}
/// <summary>
/// <para>说明:值为空时弹出搜索界面</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnAutoGridLookUpGotFocus(object sender, EventArgs e)
{
try
{
this.HandPopupSqlValue(this.btnEdit.Text);
//this.CalcFormAndGrid();
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-15 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnPopupGridViewEnter(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter)
{
this.SetValue();
this.HidePopup();
if (this.OnEnterAfterback != null)
this.OnEnterAfterback(this, null);
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:鼠标回调</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-15 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnPopupGridViewMouseClick(object sender, EventArgs e)
{
try
{
this.SetValue();
if (this.OnEnterAfterback != null)
this.OnEnterAfterback(this, null);
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:搜索框离开焦点时</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-09-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnAutoGridLookUpleave(object sender, EventArgs e)
{
try
{
if (this.Model != null && !string.IsNullOrEmpty(this.btnEdit.Text) && string.IsNullOrEmpty(getValueItem(this.btnEdit.Text)) && (ControlType.LabAutoCompleteValue == Model.FieldType || ControlType.LabAutoCompleteValueParam == Model.FieldType))
{
this.btnEdit.Text = string.Empty;
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:失去焦点关闭界面</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnAutoGridLookUpLostFocus(object sender, EventArgs e)
{
try
{
//if (this.Model != null &&!string.IsNullOrEmpty(this.btnEdit.Text)&& string.IsNullOrEmpty(getValueItem(this.btnEdit.Text)) && (ControlType.LabAutoCompleteValue == Model.FieldType || ControlType.LabAutoCompleteValueParam == Model.FieldType))
//{
// this.btnEdit.Text = string.Empty;
//}
if (this._popup.Visible && !this._popup.Focused && !this._popup.GridControlObj.Focused && !this.Focused)
{
this.HidePopup();
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
/// <summary>
/// <para>说明:鼠标弹起时刷新数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-03-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
protected void OnAutoGridLookUpKeyUp(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Down)
{
this._popup.Focus();
}
else
{
this.HandPopupSqlValue(this.btnEdit.Text);
}
this.ShowPopup();
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message,ex.Message);
}
}
}
}