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.SweepCode.Control { public partial class SweepAutoEdit : UserControl { /// /// 是否处理过计算 /// private bool _Handed; /// /// 弹出框最大宽度 /// private int _maxPopupWidth = 800; private string _value; private bool _hasRemark = false; /// /// 后台线程是否在执行中 /// private bool _working = false; private List _queryQueue = new List(); /// /// The _popup /// private AutoGridPopup _popup = null; /// /// 新增模糊查询条件 /// private string AddConditions = string.Empty; /// /// 弹出框是否显示 /// /// true if this instance is show popup; otherwise, false. public bool IsShowPopup; /// /// 弹出框是否自动弹出 /// /// true if this instance is show popup; otherwise, false. public bool AutoShowPopup = true; /// /// 是否需要自动匹配列宽度 /// [Description("是否需要自动匹配列宽度")] public bool IsBestFitColumns = true; /// /// The minimum popup width /// [Description("弹出框最小宽度")] public int MinPopupWidth; /// /// The minimum popup height /// [Description("弹出框最小高度")] public int MinPopupHeight; /// /// The value field /// public string ValueField = string.Empty; /// /// The value member /// [Description("设置ValueMember")] public string ValueMember = string.Empty; /// /// The text field /// [Description("设置TextMember")] public string TextMember = string.Empty; public string FormKey = string.Empty; /// /// The remark text /// [Description("设置备注")] public string RemarkField = "remark"; /// /// 数据源 /// public string SourceSQL = string.Empty; /// /// The contro object /// public MyControl ControlObj; /// /// 控件对象 /// public ControlModel Model; /// /// 标题对象 /// /// The title label object. public Label TitleLabelObj { get { return lbTitle; } } /// /// 公用控件值 /// /// The button object. public ButtonEdit TextEdit { get { return btnEdit; } } /// ///选中获取数据后执行事件 /// public event EventHandler OnEnterAfterback; /// /// 是否扫码后获取焦点(默认获取,配置为1就不获取) /// public bool isGainFocus = true; /// /// 扫码后刷新主表 /// public bool RefreshMain = false; /// /// 隐藏值 /// /// The 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; } } } /// /// 设置数据源 /// /// The data source. 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); } } } /// /// 数据源(用于匹配数据) /// public DataTable DataSourceTable; public string SpeciesValue; /// /// 说明:隐藏弹出框 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void HidePopup() { if (this.IsShowPopup) { this.IsShowPopup = false; this._popup.Hide(); } } /// /// 说明:显示弹出框 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void ShowPopup() { if (!this.btnEdit.Properties.ReadOnly && this.Enabled && !this.IsShowPopup) { if (AutoShowPopup) { this.IsShowPopup = true; this._popup.Show(); } } } /// /// 弹出框 /// /// The popup. [Description("自动搜索弹出框")] public AutoGridPopup Popup { get { return this._popup; } private set { _popup = value; } } /// /// 界面关闭时 /// public event EventHandler OnPopupClosed; /// /// 设置控件的排序值 /// /// The title label object. public string orderId; /// /// 控件公共回车事件 /// /// The KeyEventHandler KeyDown. public event KeyEventHandler KeyDown; /// /// 字体大小 /// 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(); } /// /// 说明:初始化事件 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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. } /// /// 说明:初始化弹出框 /// 创建人:龚宇超 /// 创建日期:2018-03-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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); } /// /// 说明:计算弹出控件位置 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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(); } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2018-03-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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 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); } } } /// /// 说明:刷新弹出框数据 /// 创建人:龚宇超 /// 创建日期:2018-05-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The SQL value. 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(); })); } } } /// /// 说明:获取顶层窗口 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// Control. private Form GetParent(System.Windows.Forms.Control ctr) { if (ctr == null) return null; return ctr is Form ? ctr as Form : GetParent(ctr.Parent); } /// /// 说明:设置值 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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); } /// /// 说明:根据输入值判断下拉框中是否存在value值 /// 创建人:王一帆 /// 创建日期:2020-05-14 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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().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().FirstOrDefault(x => x[Model.TextMember] + "" == ItemText); obj = rowItemValue != null ? rowItemValue[Model.ValueMember] + "" : string.Empty; } return obj; } /// /// 说明:设置自定义列 /// 创建人:王一帆 /// 创建日期:2019-09-17 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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; } } } } /// /// 说明:重置表格属性 /// 创建人:王一帆 /// 创建日期:2019-09-17 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. 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); } } /// /// 说明:保存表格属性 /// 创建人:王一帆 /// 创建日期:2019-09-17 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. 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); } } } /// /// 说明:列右键菜单扩展 /// 创建人:王一帆 /// 创建日期:2019-09-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// /// 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); } } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 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().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; } } /// /// 说明:计算控件Size,只计算一次 /// 创建人:龚宇超 /// 创建日期:2018-04-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The object. 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; }); } } } /// /// 说明:值为空时弹出搜索界面 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. 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); } } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2018-03-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. 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); } } /// /// 说明:鼠标回调 /// 创建人:龚宇超 /// 创建日期:2018-03-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. 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); } } /// /// 说明:搜索框离开焦点时 /// 创建人:王一帆 /// 创建日期:2020-09-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. 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); } } /// /// 说明:失去焦点关闭界面 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. 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); } } /// /// 说明:鼠标弹起时刷新数据 /// 创建人:龚宇超 /// 创建日期:2018-03-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. 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); } } } }