/****************************** * 说明:表格树 * 创建人:龚宇超 * 创建日期:2017-12-26 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Lskj.Control.Model; using Lskj.Model; using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Columns; using DevExpress.Utils; using DevExpress.XtraGrid; using DevExpress.XtraTreeList.Menu; using DevExpress.Utils.Menu; using Lskj.Data; using Lskj.Business.Impl; using System.Data.SqlClient; using Lskj.Util; using Lskj.Business; using DevExpress.XtraTreeList.Nodes; using DevExpress.XtraEditors.Repository; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors; using System.Reflection; using DevExpress.Data.Filtering; using DevExpress.XtraGrid.Drawing; using Lskj.Control.MultiGridLookUp; using Lskj.Control.MultiModelLookUp; using System.Text.RegularExpressions; using DevExpress.XtraGrid.Views.BandedGrid; using System.Collections; namespace Lskj.Control { /// /// 表格树 /// public partial class TreeBandedGridControlEx : TreeGridControlEx { public TreeList TreeListObj { get { return gcMain; } } /// /// 树表格固定菜单 /// public ContextMenuStrip MenuStrip { get { return contextMenuStrip; } } /// /// 默认全部展开 /// public string Expansion = "1"; //treeList树展开的节点块 public List treeListNodes = new List(); /// /// 按初始顺序保存全部gridBand /// public List saveGridBands = new List(); /// /// 按初始顺序保存全部gridBand对应的二级列名 /// public Dictionary saveGridBandColumn = new Dictionary(); public TreeBandedGridControlEx() { InitializeComponent(); this.gcMain.KeyDown += new KeyEventHandler(OnTreeGridViewKeyDown); this.gcMain.SelectionChanged += new EventHandler(gcMain_SelectionChanged); this.gcMain.CustomDrawNodeCell += new CustomDrawNodeCellEventHandler(OnCustomDrawNodeCell); this.SetGridRowHeightAndFont(); //InitializeTreeMethod(); //this.gcMain.OptionsBehavior.EnableFiltering = true; //this.gcMain.OptionsFind.AlwaysVisible = true; } void gcMain_SelectionChanged(object sender, EventArgs e) { //try //{ //List cells = this.gcMain.GetSelectedCells(); //DataRow[] rows = GetViewFocusedDataRows(); //this.pl_buttom.Visible = cells.Count > 1 && rows.Length > 1; //if (this.pl_buttom.Visible) //{ // // 分别计算求和、平均值、最大值、最小值、计数 // double sum = 0, avg = 0, max = 0, min = 0; // int count = 0; // foreach (DataRow row in rows) // { // foreach (TreeListCell cell in cells) // { // double cellNumber = 0; // string cellValue = row[cell.Column.Name] + ""; // if (double.TryParse(cellValue, out cellNumber)) // { // cellNumber = Convert.ToDouble(cellValue); // if (max < cellNumber) // max = cellNumber; // if (min == 0 || min > cellNumber) // min = cellNumber; // count++; // sum += cellNumber; // } // } // } // avg = count == 0 || count == 0 ? 0 : sum / count; // lblTotal.Text = string.Format(ResourceKeys.GridTotalDisplayText, count, Math.Round(sum, 2), Math.Round(avg, 2), Math.Round(max, 2), Math.Round(min, 2)); //} //} //catch (Exception) //{ //} } /// /// 说明:设置表格颜色 /// 创建人:龚宇超 /// 创建日期:2017-12-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. public override void SetGridRowColors(DataTable table) { this.GridRowColorsTable = table; if (table != null && table.Rows.Count > 0) { DataRow rowItem = table.Select("1=1").FirstOrDefault(x => (x["condition"] + "").Contains("COLUMN_")); if (rowItem != null) this.gcMain.CustomDrawNodeCell += new CustomDrawNodeCellEventHandler(OnGridViewRowCellStyle); else this.gcMain.NodeCellStyle += new GetCustomNodeCellStyleEventHandler(OnGridViewRowStyle); } } /// /// 说明:设置树表格行颜色 /// 创建人:王一帆 /// 创建日期:2019-11-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnGridViewRowStyle(object sender, GetCustomNodeCellStyleEventArgs e) { if (this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0) { // 渲染界面数据量过多界面刷新会很慢 DataRowView dataRowView = this.gcMain.GetDataRecordByNode(e.Node) as DataRowView; DataRow gridRow = dataRowView != null ? dataRowView.Row : null; foreach (DataRow item in this.GridRowColorsTable.Rows) { string cond = ReplaceHelper.ReplaceRowParam(gridRow, item["condition"] + ""); try { if (!string.IsNullOrWhiteSpace(cond) && ReplaceHelper.EvalCond(cond)) { GridRowColorModel model = new GridRowColorModel(item); if (!string.IsNullOrWhiteSpace(model.BackColor)) { e.Appearance.BackColor = ColorTranslator.FromHtml(model.BackColor); } if (!string.IsNullOrWhiteSpace(model.ForceColor)) { e.Appearance.ForeColor = ColorTranslator.FromHtml(model.ForceColor); } FontStyle fontStyle = new FontStyle(); if (model.IsBold) fontStyle = fontStyle | FontStyle.Bold; if (model.IsItalic) fontStyle = fontStyle | FontStyle.Italic; if (model.IsStrickOut) fontStyle = fontStyle | FontStyle.Strikeout; if (model.IsUnderLine) fontStyle = fontStyle | FontStyle.Underline; e.Appearance.Font = new Font(e.Appearance.Font, fontStyle); } } catch (Exception) { //LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + model.Condition + ";EvalCondtion:" + cond); } } } } /// /// 说明:设置树表格单元格颜色 /// 创建人:王一帆 /// 创建日期:2019-11-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. /// protected void OnGridViewRowCellStyle(object sender, CustomDrawNodeCellEventArgs e) { if (this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0 && !string.IsNullOrEmpty(e.CellValue + "")) { // 渲染界面数据量过多界面刷新会很慢 DataRowView dataRowView = this.gcMain.GetDataRecordByNode(e.Node) as DataRowView; DataRow gridRow = dataRowView != null ? dataRowView.Row : null; foreach (DataRow item in this.GridRowColorsTable.Rows) { string cond = ReplaceHelper.ReplaceRowParam(gridRow, item["condition"] + "").ReplaceColumnParam(e.Column.Name, e.Column.Caption, e.CellValue + ""); try { if (!string.IsNullOrWhiteSpace(cond) && ReplaceHelper.EvalCond(cond)) { GridRowColorModel model = new GridRowColorModel(item); if (!string.IsNullOrWhiteSpace(model.BackColor)) { e.Appearance.BackColor = ColorTranslator.FromHtml(model.BackColor); } if (!string.IsNullOrWhiteSpace(model.ForceColor)) { e.Appearance.ForeColor = ColorTranslator.FromHtml(model.ForceColor); } FontStyle fontStyle = new FontStyle(); if (model.IsBold) fontStyle = fontStyle | FontStyle.Bold; if (model.IsItalic) fontStyle = fontStyle | FontStyle.Italic; if (model.IsStrickOut) fontStyle = fontStyle | FontStyle.Strikeout; if (model.IsUnderLine) fontStyle = fontStyle | FontStyle.Underline; e.Appearance.Font = new Font(e.Appearance.Font, fontStyle); } } catch (Exception) { //LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + model.Condition + ";EvalCondtion:" + cond); } } } } /// /// 说明:设置只读列 /// 创建人:龚宇超 /// 创建日期:2018-03-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. /// The custom colum key. public override void SetReadOnlyColumns(DataTable table, string customColumKey = "") { if (table == null) return; this.CustomColumKey = customColumKey; this.gcMain.PopupMenuShowing += new PopupMenuShowingEventHandler(OnPopupMenuShowing); //设置列头自动高度 this.gcMain.OptionsView.ColumnHeaderAutoHeight = DefaultBoolean.True; base.ColumnList.Clear(); this.gcMain.Bands.Clear(); this.gcMain.Columns.Clear(); this.AddBandColumns(table); DataTable customTable = this.gcMain.GetCustomColumnByDatabase(this.CustomColumKey); this.SetCustomColumns(customTable); } /// /// 说明:添加多表头列 /// 创建人:龚宇超 /// 创建日期:2018-04-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. /// if set to true [read only]. protected void AddBandColumns(DataTable table, bool readOnly = true) { if (table == null) return; this.mControlList.Clear(); List bandFieldstr = new List(); string bandFields = string.Empty; foreach (DataRow item in table.Rows) { GridColumnModel model = new GridColumnModel(item); this.ColumnList.Add(model); } Dictionary gridBandEmptyDic = new Dictionary(); TreeListBand gridBandEmpty = new TreeListBand(); //this.bandedGridView.OptionsView.ColumnHeaderAutoHeight = DefaultBoolean.True; // 添加Band 列 GridColumnModel[] bandRows = this.ColumnList.Where(x => !string.IsNullOrEmpty(x.BandFields)).ToArray(); GridColumnModel[] AutobandRows = this.ColumnList.Where(x => x.FieldText.Contains("|")).ToArray(); GridColumnModel[] bandEmptyRows = null; if (true)//this.moduleModel != null && this.moduleModel.BandSequentialMode { bandEmptyRows = AutobandRows.Length > 0 ? this.ColumnList.Where(x => !x.FieldText.Contains("|") && x.Width > 0).ToArray() : this.ColumnList.Where(x => bandRows.Select(n => n.BandFields.Equals(x.FieldName)).Count() == 0 && x.Width > 0).ToArray(); foreach (GridColumnModel columnModel in this.ColumnList) { if (!string.IsNullOrEmpty(columnModel.BandFields)) { TreeListBand gridBand = new TreeListBand(); gridBand.Caption = columnModel.BandTitle; gridBand.AppearanceHeader.Options.UseFont = true; gridBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold); gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center; if (columnModel.BandTitle.Contains("\\r\\n")) { gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; gridBand.Caption = columnModel.BandTitle.Replace("\\r\\n", " "); gridBand.RowCount = 2; } saveGridBands.Add(gridBand); gcMain.Bands.AddRange(new TreeListBand[] { gridBand }); gridBandEmpty = new TreeListBand();//切换时重置空列 } else if (columnModel.FieldText.Contains("|")) { if (bandRows.Length == 0 && AutobandRows.Length > 0) { TreeListBand gridBand = new TreeListBand(); int index = columnModel.FieldText.LastIndexOf("|"); string bandTitle = columnModel.FieldText.Substring(0, index); string bandField = columnModel.FieldText.Substring(index + 1, columnModel.FieldText.Length - index - 1); if (bandFieldstr.Contains(bandTitle)) continue; bandFieldstr.Add(bandTitle); gridBand.Caption = bandTitle; gridBand.AppearanceHeader.Options.UseFont = true; gridBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold); gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center; if (bandTitle.Contains("\\r\\n")) { gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; gridBand.Caption = bandTitle.Replace("\\r\\n", " "); gridBand.RowCount = 2; } //gridBand.RowCount = 10; //gridBand.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; saveGridBands.Add(gridBand); gcMain.Bands.AddRange(new TreeListBand[] { gridBand }); gridBandEmpty = new TreeListBand();//切换时重置空列 } } else if ((AutobandRows.Length > 0 && !columnModel.FieldText.Contains("|") && columnModel.Width > 0) || (AutobandRows.Length <= 0 && bandRows.Select(n => n.BandFields.Equals(columnModel.FieldName)).Count() == 0 && columnModel.Width > 0)) { // 空白列 gridBandEmpty.Caption = ""; gridBandEmpty.AppearanceHeader.Options.UseFont = true; gridBandEmpty.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold); gridBandEmpty.AppearanceHeader.Options.UseTextOptions = true; gridBandEmpty.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center; if (!gcMain.Bands.Contains(gridBandEmpty)) { gcMain.Bands.Add(gridBandEmpty); } gridBandEmptyDic.Add(this.ColumnList.IndexOf(columnModel), gridBandEmpty); } } } else { foreach (GridColumnModel item in bandRows) { TreeListBand gridBand = new TreeListBand(); gridBand.Caption = item.BandTitle; gridBand.AppearanceHeader.Options.UseFont = true; gridBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold); gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center; if (item.BandTitle.Contains("\\r\\n")) { gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; gridBand.Caption = item.BandTitle.Replace("\\r\\n", " "); gridBand.RowCount = 2; } saveGridBands.Add(gridBand); gcMain.Bands.AddRange(new TreeListBand[] { gridBand }); bandFields += "|" + item.BandFields; } if (bandRows.Length == 0 && AutobandRows.Length > 0) { foreach (GridColumnModel item in AutobandRows) { TreeListBand gridBand = new TreeListBand(); int index = item.FieldText.LastIndexOf("|"); string bandTitle = item.FieldText.Substring(0, index); string bandField = item.FieldText.Substring(index + 1, item.FieldText.Length - index - 1); if (bandFieldstr.Contains(bandTitle)) continue; bandFieldstr.Add(bandTitle); gridBand.Caption = bandTitle; gridBand.AppearanceHeader.Options.UseFont = true; gridBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold); gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center; if (bandTitle.Contains("\\r\\n")) { gridBand.AppearanceHeader.Options.UseTextOptions = true; gridBand.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; gridBand.Caption = bandTitle.Replace("\\r\\n", " "); gridBand.RowCount = 2; } //gridBand.RowCount = 10; //gridBand.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; saveGridBands.Add(gridBand); gcMain.Bands.AddRange(new TreeListBand[] { gridBand }); bandFields += "|" + bandField; } } bandFields = bandFields + "|"; // 检查是否包含空白列 bandEmptyRows = AutobandRows.Length > 0 ? this.ColumnList.Where(x => !x.FieldText.Contains("|") && x.Width > 0).ToArray() : this.ColumnList.Where(x => !bandFields.Contains("|" + x.FieldName + "|") && x.Width > 0).ToArray(); if (bandEmptyRows != null && bandEmptyRows.Length > 0) { // 空白列 gridBandEmpty.Caption = ""; gridBandEmpty.AppearanceHeader.Options.UseFont = true; gridBandEmpty.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold); gridBandEmpty.AppearanceHeader.Options.UseTextOptions = true; gridBandEmpty.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center; gcMain.Bands.Insert(0, gridBandEmpty); } } // 创建列 for (int i = 0; i < this.ColumnList.Count; i++) { GridColumnModel model = this.ColumnList[i]; //if (model.Width == 0 || !model.Visible) continue; int startIndex = model.FieldText.Contains("|") ? model.FieldText.LastIndexOf("|") : 0; string FieldText = startIndex > 0 ? model.FieldText.Substring(startIndex + 1, model.FieldText.Length - startIndex - 1) : model.FieldText; TreeListColumn gridColumn = new TreeListColumn(); string bandTitle = startIndex > 0 ? model.FieldText.Substring(0, startIndex) : HasBand(model.FieldName, bandRows); if (!string.IsNullOrEmpty(bandTitle)) { // 绑定了多表头显示 TreeListBand gridBand = this.gcMain.Bands.Cast().FirstOrDefault(x => x.Caption == bandTitle); if (gridBand != null) { gridBand.Columns.Add(gridColumn); if (saveGridBandColumn.ContainsKey(gridBand)) { saveGridBandColumn[gridBand] = saveGridBandColumn[gridBand] + model.FieldName + "^"; } else { saveGridBandColumn.Add(gridBand, model.FieldName + "^"); } } gcMain.Columns.Add(gridColumn); } else { // 未绑定多表头则直接显示 if (bandEmptyRows != null && bandEmptyRows.Contains(model)) { if (true)//this.moduleModel != null && this.moduleModel.BandSequentialMode { gridBandEmptyDic[this.ColumnList.IndexOf(model)].Columns.Add(gridColumn); } else { gridBandEmpty.Columns.Add(gridColumn); } } gcMain.Columns.Add(gridColumn); } //gridColumn.OptionsColumn.AllowMerge = model.CanMerge ? DefaultBoolean.True : DefaultBoolean.False; //if (model != null && model.CanMerge) // gcMain.OptionsView.AllowCellMerge = true;//若有合并列则设置表合并,合并后无法多选 gridColumn.FieldName = model.FieldName; gridColumn.Name = model.FieldName; gridColumn.VisibleIndex = i; gridColumn.Caption = FieldText; gridColumn.Width = model.Width; gridColumn.Visible = model.Visible; gridColumn.OptionsColumn.AllowEdit = !readOnly && model.Edit; gridColumn.Tag = model; gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList; gridColumn.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; if (EnabledChangeColor) { if (!model.Edit) { gridColumn.AppearanceHeader.Options.UseForeColor = true; gridColumn.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(HeaderColor); } else if (model.CanNull) { gridColumn.AppearanceHeader.Options.UseForeColor = true; gridColumn.AppearanceHeader.ForeColor = RequiredForceColor; } } this.SetColumnFormat(gridColumn, model); this.SetColumnSumming(gridColumn, model); this.InitEditColumns(gridColumn, model); } // 加载数据源 //BindDataSource(); DataTable customTable = this.gcMain.GetCustomColumnByDatabase(this.CustomColumKey); this.SetCustomColumns(customTable); // 延迟加载数据源 this.mLoading = false; this.mTimer.Tick += new EventHandler(mTimerTick); this.mTimer.Start(); } /// /// 说明:是否为多表头 /// 创建人:龚宇超 /// 创建日期:2017-12-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// Name of the field. /// The bands. protected string HasBand(string fieldName, GridColumnModel[] bands) { foreach (GridColumnModel model in bands) { if (("|" + model.BandFields + "|").Contains("|" + fieldName + "|")) { return model.BandTitle; } } return string.Empty; } /// /// 说明:创建列 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The dr row. protected void InitEditColumns(TreeListColumn column, GridColumnModel model) { switch (model.FieldType) { case ControlType.LabAutoLinefeedText: InitAutoLinefeedEdit(column, model); break; case ControlType.LabPassWordValue: InitPasswordEdit(column, model); break; case ControlType.LabComboxValue: case ControlType.LabComboxText: case ControlType.LabComboxValueParam: case ControlType.LabComboxTextParam: InitComboxEdit(column, model); break; case ControlType.LabProgressBar: InitProgressEdit(column); break; case ControlType.LabCheckBox: InitCheckEdit(column); break; case ControlType.LabAutoCompleteValue: case ControlType.LabAutoCompleteText: case ControlType.LabAutoCompleteValueParam: case ControlType.LabAutoCompleteTextParam: case ControlType.LabAutoGridValue: case ControlType.LabAutoGridText: case ControlType.LabAutoGridValueParam: case ControlType.LabAutoGridTextParam: InitAutoSearchEdit(column, model); break; case ControlType.LabDate: case ControlType.LabDateTime: case ControlType.LabDateTimeShort: case ControlType.LabShortDate: InitDateTimeEdit(column, model.FieldType); break; case ControlType.LabTime: case ControlType.LabShortTime: InitTimeEdit(column, model.FieldType); break; case ControlType.LabCalcText: InitCalcEdit(column); break; case ControlType.LabMemoEdit: InitMemoEdit(column); break; case ControlType.LabRemark: InitRemarkEdit(column); break; //case ControlType.LabAccount: // this.cellHelper.AddAmountColumn(column, 11); // break; case ControlType.LabMultiSelectValue: case ControlType.LabMultiSelectValueParam: case ControlType.LabMultiSelectText: case ControlType.LabMultiSelectTextParam: InitMutilEdit(column, model); break; case ControlType.LabTreeLookValue: case ControlType.LabTreeLookText: case ControlType.LabCheckTreeLookValue: case ControlType.LabCheckTreeLookText: case ControlType.LabTreeLastlevelValue: case ControlType.LabTreeLastlevelText: case ControlType.LabCheckTreeLastlevelValue: case ControlType.LabCheckTreeLastlevelText: InitAutoTreeSearchEdit(column, model, false); break; case ControlType.LabComboxCheckListValue: case ControlType.LabComboxCheckListText: InitMutilComboxEdit(column, model); break; //case ControlType.LabQQ: // column.Tag = "QQ"; // break; //case ControlType.LabWWW: // column.Tag = "Brower"; // break; case ControlType.LabRichEdit: InitRichEdit(column); break; case ControlType.LabPic: InitPicEdit(column); break; case ControlType.LabSelectReturnIdNew: case ControlType.LabSelectReturnTextNew: InitSelectReturnId(column, model); break; case ControlType.LabSelectReturnRows: InitSelectReturnRows(column, model); break; //case ControlType.DynamicallyGeneratedSql: // InitSqlGenerate(column, model); // break; //case ControlType.HighShotMeter: // InitHighShotMeterEdit(column, model); // break; //case ControlType.BarCode128B: // InitBarCode128BEdit(column, model); // break; default: break; } // 特殊处理 if (ControlType.LabTreeType == model.FieldType && !IsSpecModel) { InitComboxEdit(column, model); } } /// /// 说明:创建自动换行文本框 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitAutoLinefeedEdit(TreeListColumn gridColumn, GridColumnModel model) { DevExpress.XtraEditors.Repository.RepositoryItemMemoEdit AutoLinefeedEdit = new DevExpress.XtraEditors.Repository.RepositoryItemMemoEdit(); gridColumn.ColumnEdit = AutoLinefeedEdit; } /// /// 说明:创建下拉列表框 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitPasswordEdit(TreeListColumn gridColumn, GridColumnModel model) { RepositoryItemTextEdit passEdit = new RepositoryItemTextEdit(); passEdit.UseSystemPasswordChar = true; passEdit.PasswordChar = '*'; gridColumn.ColumnEdit = passEdit; } /// /// 说明:创建下拉列表框 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitComboxEdit(TreeListColumn gridColumn, GridColumnModel model) { RepositoryItemLookUpEdit comboxEdit = new RepositoryItemLookUpEdit(); if (model.FontSize > 0) comboxEdit.Appearance.Font = new Font("微软雅黑", model.FontSize); comboxEdit.SearchMode = SearchMode.AutoFilter; comboxEdit.ShowHeader = false; comboxEdit.ImmediatePopup = false; comboxEdit.NullText = ""; comboxEdit.PopupBorderStyle = PopupBorderStyles.Flat; comboxEdit.AllowNullInput = DefaultBoolean.False; comboxEdit.DisplayMember = model.TextMember; comboxEdit.ValueMember = ControlType.LabComboxText == model.FieldType || ControlType.LabComboxTextParam == model.FieldType ? model.TextMember : model.ValueMember; //comboxEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource); LookUpColumnInfo valueColumn = new LookUpColumnInfo(); valueColumn.Caption = "编码"; valueColumn.FieldName = model.ValueMember; valueColumn.Visible = false; LookUpColumnInfo textColumn = new LookUpColumnInfo(); textColumn.Caption = "名称"; textColumn.FieldName = model.TextMember; comboxEdit.Columns.AddRange(new LookUpColumnInfo[] { valueColumn, textColumn }); if (model.SourceRow.Table.Columns.Contains("remark")) { LookUpColumnInfo remarkColumn = new LookUpColumnInfo(); remarkColumn.Caption = "备注"; remarkColumn.FieldName = "remark"; remarkColumn.Visible = false; comboxEdit.Columns.Add(remarkColumn); } gridControl.RepositoryItems.Add(comboxEdit); gridColumn.ColumnEdit = comboxEdit; comboxEdit.DataSource = BaseImpl.GetDataTableResult(model.SqlSource);//加载数据源 this.mControlList.Add(model); } /// /// 说明:创建进度条控件 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitProgressEdit(TreeListColumn gridColumn) { RepositoryItemProgressBar progressEdit = new RepositoryItemProgressBar(); progressEdit.ShowTitle = true; gridControl.RepositoryItems.Add(progressEdit); gridColumn.ColumnEdit = progressEdit; } /// /// 说明:创建自动搜索框 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitAutoSearchEdit(TreeListColumn gridColumn, GridColumnModel model) { int popWidth = 0; //DataTable table = MainImpl.GetDataTableResult(ReplaceHelper.ReplaceWhereCond(model.SqlSource) + " and 1<>1"); RepositoryItemGridLookUpEdit searchEdit = new RepositoryItemGridLookUpEdit(); if (model.FontSize > 0) searchEdit.View.Appearance.Row.Font = new Font("微软雅黑", model.FontSize); searchEdit.View.OptionsView.ShowIndicator = false; searchEdit.View.OptionsView.ColumnAutoWidth = false; searchEdit.PopupSizeable = true; searchEdit.PopupResizeMode = ResizeMode.Default; searchEdit.AllowFocused = true; searchEdit.ImmediatePopup = true; searchEdit.ShowFooter = false; searchEdit.NullText = ""; searchEdit.TextEditStyle = TextEditStyles.Standard; searchEdit.PopupBorderStyle = PopupBorderStyles.Flat; searchEdit.AllowNullInput = DefaultBoolean.False; searchEdit.ShowPopupShadow = true; searchEdit.DisplayMember = model.TextMember; searchEdit.ValueMember = ControlType.LabAutoCompleteText == model.FieldType || ControlType.LabAutoCompleteTextParam == model.FieldType || ControlType.LabAutoGridText == model.FieldType || ControlType.LabAutoGridTextParam == model.FieldType ? model.TextMember : model.ValueMember; //searchEdit.DataSource = table; searchEdit.Tag = model; searchEdit.View.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; searchEdit.View.PopupMenuShowing += OnAutoSearchEditPopupMenuShowing; searchEdit.KeyDown += OnsearchEditKeyDown; searchEdit.QueryPopUp += new CancelEventHandler(OnSearchEditQueryPopUp); DataTable cusTable = new DataTable(); DevExpress.XtraGrid.Columns.GridColumn valueColumn = new DevExpress.XtraGrid.Columns.GridColumn(); valueColumn.Name = valueColumn.FieldName = model.ValueMember; valueColumn.Caption = "编码"; valueColumn.Visible = model.ValueMember.Substring(0, 1) != "_"; DevExpress.XtraGrid.Columns.GridColumn textColumn = new DevExpress.XtraGrid.Columns.GridColumn(); textColumn.Name = textColumn.FieldName = model.TextMember; textColumn.Caption = "名称"; textColumn.Visible = model.TextMember.Substring(0, 1) != "_"; searchEdit.View.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { valueColumn, textColumn }); searchEdit.PopupFormSize = new System.Drawing.Size(popWidth, searchEdit.PopupFormSize.Height); gridControl.RepositoryItems.Add(searchEdit); gridColumn.ColumnEdit = searchEdit; searchEdit.View.Tag = searchEdit; searchEdit.EditValueChanging += gridLookUpEdit1_EditValueChanging; searchEdit.View.CustomDrawFilterPanel += OnCustomDrawFilterPanel; searchEdit.View.Click += new EventHandler(View_Click); //加载数据源 DataTable table = BaseImpl.GetDataTableResult(model.SqlSource); searchEdit.DataSource = table; if (table.Columns.Contains("remark")) { DevExpress.XtraGrid.Columns.GridColumn remarkColumn = new DevExpress.XtraGrid.Columns.GridColumn(); remarkColumn.Caption = "备注"; remarkColumn.Name = remarkColumn.FieldName = "remark"; remarkColumn.Visible = true; searchEdit.View.Columns.Add(remarkColumn); } foreach (DataColumn dcol in table.Columns) { if ((dcol.ColumnName.Substring(0, 1) != "_")) { if ((dcol.ColumnName.ToLower() != model.ValueMember.ToLower()) && (dcol.ColumnName.ToLower() != model.TextMember.ToLower()) && (dcol.ColumnName.ToLower() != "remark") && ((int)dcol.ColumnName[0] > 127)) { DevExpress.XtraGrid.Columns.GridColumn otherColumn = new DevExpress.XtraGrid.Columns.GridColumn(); otherColumn.Name = otherColumn.FieldName = otherColumn.Caption = dcol.ColumnName; otherColumn.Visible = true; searchEdit.View.Columns.Add(otherColumn); } if (searchEdit.View.Columns.FirstOrDefault(x => x.FieldName == dcol.ColumnName) != null) { DevExpress.XtraGrid.Columns.GridColumn gCol = searchEdit.View.Columns[dcol.ColumnName]; gCol.Width = CalcMaxColumnWidth(table, gCol.Name); popWidth += gCol.Width; } } } searchEdit.PopupFormSize = new System.Drawing.Size(popWidth, searchEdit.PopupFormSize.Height); this.mControlList.Add(model); } /// 说明:创建DateTime控件 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. /// Type of the field. public void InitDateTimeEdit(TreeListColumn gridColumn, int fieldType) { RepositoryItemDateEdit dateEdit = new RepositoryItemDateEdit(); dateEdit.DisplayFormat.FormatString = dateEdit.EditFormat.FormatString = dateEdit.Mask.EditMask = DateFormat.Format(fieldType); dateEdit.DisplayFormat.FormatType = dateEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; if (fieldType == ControlType.LabDateTime) { dateEdit.Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True; dateEdit.Properties.VistaEditTime = DevExpress.Utils.DefaultBoolean.True; } if (fieldType == ControlType.LabShortDate) { dateEdit.Properties.Mask.UseMaskAsDisplayFormat = true;//掩码属性使用掩码作为显示格式 dateEdit.Properties.DisplayFormat.FormatType = dateEdit.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; dateEdit.Properties.VistaCalendarInitialViewStyle = DevExpress.XtraEditors.VistaCalendarInitialViewStyle.YearView; dateEdit.Properties.VistaCalendarViewStyle = DevExpress.XtraEditors.VistaCalendarViewStyle.YearView; } //dateEdit.Closed += new ClosedEventHandler(dateEdit_Closed); gridControl.RepositoryItems.Add(dateEdit); gridColumn.ColumnEdit = dateEdit; } /// /// 说明:创建Time控件 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. /// Type of the field. public void InitTimeEdit(TreeListColumn gridColumn, int fieldType) { RepositoryItemTimeEdit timeEdit = new RepositoryItemTimeEdit(); timeEdit.DisplayFormat.FormatString = timeEdit.EditFormat.FormatString = timeEdit.Mask.EditMask = DateFormat.Format(fieldType); timeEdit.DisplayFormat.FormatType = timeEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; gridControl.RepositoryItems.Add(timeEdit); gridColumn.ColumnEdit = timeEdit; } /// /// 说明:创建计算器控件 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitCalcEdit(TreeListColumn gridColumn) { RepositoryItemCalcEdit calcEdit = new RepositoryItemCalcEdit(); calcEdit.AllowMouseWheel = false; gridControl.RepositoryItems.Add(calcEdit); gridColumn.ColumnEdit = calcEdit; } /// /// 说明:创建备注框 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitMemoEdit(TreeListColumn gridColumn) { RepositoryItemMemoExEdit memoEdit = new RepositoryItemMemoExEdit(); memoEdit.WordWrap = true; memoEdit.ShowIcon = false; if (!gridColumn.OptionsColumn.AllowEdit) { gridColumn.OptionsColumn.AllowEdit = true; //设置只读 memoEdit.ReadOnly = true; //只读状态允许下拉列表 memoEdit.AllowDropDownWhenReadOnly = DefaultBoolean.True; } gridControl.RepositoryItems.Add(memoEdit); gridColumn.ColumnEdit = memoEdit; } /// /// 说明:创建备注框 /// 创建人:王一帆 /// 创建日期:2019-08-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitRemarkEdit(TreeListColumn gridColumn) { RepositoryItemMemoEdit memo = new RepositoryItemMemoEdit(); memo.Appearance.TextOptions.WordWrap = WordWrap.Wrap;//自动换行 gridControl.RepositoryItems.Add(memo); gridColumn.ColumnEdit = memo; } /// /// 说明:创建多选框 /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitMutilEdit(TreeListColumn gridColumn, GridColumnModel model) { FrmLookUp mutilLookUp = new FrmLookUp(); mutilLookUp.ValueField = model.ValueMember; mutilLookUp.TextField = model.TextMember; mutilLookUp.SourceSQL = model.SqlSource; mutilLookUp.IsType = model.FieldType; mutilLookUp.ValueMember = model.FieldType == ControlType.LabMultiSelectValue || model.FieldType == ControlType.LabMultiSelectValueParam ? model.ValueMember : model.TextMember; mutilLookUp.Tag = model; RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit(); btnEdit.NullText = ""; btnEdit.PopupBorderStyle = PopupBorderStyles.Flat; btnEdit.AllowNullInput = DefaultBoolean.False; btnEdit.DisplayMember = model.TextMember; btnEdit.SeparatorChar = ','; btnEdit.ValueMember = model.FieldType == ControlType.LabMultiSelectValue || model.FieldType == ControlType.LabMultiSelectValueParam ? model.ValueMember : model.TextMember; btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource); btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用. btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) }); btnEdit.Tag = model; btnEdit.Buttons[1].Tag = mutilLookUp; btnEdit.ButtonClick += new ButtonPressedEventHandler(OnButtonEditClick); gridControl.RepositoryItems.Add(btnEdit); gridColumn.OptionsColumn.ReadOnly = true; gridColumn.ColumnEdit = btnEdit; this.mControlList.Add(model); } /// /// 说明:创建树节点自动搜索框 /// 创建人:王一帆 /// 创建日期:2021-03-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitAutoTreeSearchEdit(TreeListColumn gridColumn, GridColumnModel model, bool isMulitClick = true, bool isRootNode = true) { PubTreeLookUp _popup = new PubTreeLookUp(); //_popup.LookUp = gridColumn; _popup.ValueMember = ControlType.LabTreeLookValue == model.FieldType || ControlType.LabCheckTreeLookValue == model.FieldType || ControlType.LabTreeLastlevelValue == model.FieldType || ControlType.LabCheckTreeLastlevelValue == model.FieldType ? model.ValueMember : model.TextMember; _popup.ValueField = model.ValueMember; _popup.TextMember = model.TextMember; _popup.SourceSQL = model.SqlSource; _popup.TreeViewObj.CheckBoxes = isMulitClick; DataTable table = MainImpl.GetDataTableResult(model.SqlSource); _popup.SetDataSource(table); _popup.Dock = DockStyle.Fill; _popup.model = model; _popup.isRootNode = isRootNode; RepositoryItemPopupContainerEdit btnEdit = new RepositoryItemPopupContainerEdit(); btnEdit.NullText = ""; btnEdit.Buttons.Clear(); btnEdit.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//文本框可输入 btnEdit.MouseDown += new MouseEventHandler(OnAutoGridLookUpGotFocus); btnEdit.KeyUp += new KeyEventHandler(OnAutoGridLookUpKeyUp); btnEdit.PopupControl = new PopupContainerControl(); btnEdit.PopupControl.AllowDrop = true; btnEdit.PopupControl.Controls.Add(_popup); if (isMulitClick) _popup.TreeViewExObj.OnGridViewEnter += OnPopupGridViewEnter; if (!isMulitClick) _popup.TreeViewExObj.OnTreeNodeMouseClick += OnPopupGridMouseClick; btnEdit.PopupControl.Tag = _popup; btnEdit.QueryPopUp += OnQueryPopUp; if (model.FieldType == ControlType.LabTreeLookValue || model.FieldType == ControlType.LabCheckTreeLookValue || ControlType.LabTreeLastlevelValue == model.FieldType || ControlType.LabCheckTreeLastlevelValue == model.FieldType) btnEdit.QueryDisplayText += OnQueryDisplayText; btnEdit.Tag = model; gridControl.RepositoryItems.Add(btnEdit); //gridColumn.OptionsColumn.ReadOnly = true; gridColumn.ColumnEdit = btnEdit; this.mControlList.Add(model); } /// /// 说明: /// 创建人:龚宇超 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. /// The model. public void InitMutilComboxEdit(TreeListColumn gridColumn, GridColumnModel model) { RepositoryItemCheckedComboBoxEdit comboxEdit = new RepositoryItemCheckedComboBoxEdit(); comboxEdit.AllowFocused = true; comboxEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource); comboxEdit.DisplayMember = model.TextMember; comboxEdit.ValueMember = model.FieldType == ControlType.LabComboxCheckListValue ? model.ValueMember : model.TextMember; comboxEdit.NullText = ""; gridControl.RepositoryItems.Add(comboxEdit); gridColumn.ColumnEdit = comboxEdit; this.mControlList.Add(model); } /// /// 说明:富文本编辑框 /// 创建人:龚宇超 /// 创建日期:2018-06-01 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. /// The model. public void InitRichEdit(TreeListColumn gridColumn) { RepositoryItemRichTextEdit richEdit = new RepositoryItemRichTextEdit(); richEdit.Encoding = Encoding.UTF8;//乱码问题 gridControl.RepositoryItems.Add(richEdit); gridColumn.ColumnEdit = richEdit; } /// /// 说明:表格图片 /// 创建人:龚宇超 /// 创建日期:2018-08-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void InitPicEdit(TreeListColumn gridColumn) { RepositoryItemPictureEdit picEdit = new RepositoryItemPictureEdit(); picEdit.AutoHeight = true; picEdit.SizeMode = PictureSizeMode.Zoom; picEdit.BestFitWidth = 16; picEdit.CustomHeight = 16; gridColumn.ColumnEdit = picEdit; } /// /// 说明:创建 模块返回ID /// 创建人:曹屹峰 /// 创建日期:2021-08-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitSelectReturnId(TreeListColumn gridColumn, GridColumnModel model) { FrmModelLookUp2 modelLookUp = new FrmModelLookUp2(model.addModuleld); modelLookUp.ValueField = model.ValueMember; modelLookUp.TextField = model.TextMember; modelLookUp.SourceSQL = model.SqlSource; modelLookUp.IsType = model.FieldType; modelLookUp.ValueMember = model.FieldType == ControlType.LabSelectReturnIdNew ? model.ValueMember : model.TextMember; modelLookUp.Tag = model; RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit(); btnEdit.NullText = ""; btnEdit.PopupBorderStyle = PopupBorderStyles.Flat; btnEdit.AllowNullInput = DefaultBoolean.False; btnEdit.DisplayMember = model.TextMember; btnEdit.SeparatorChar = ','; btnEdit.ValueMember = model.FieldType == ControlType.LabSelectReturnIdNew ? model.ValueMember : model.TextMember; btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource); btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用. btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) }); btnEdit.Tag = model; btnEdit.Buttons[1].Tag = modelLookUp; btnEdit.ButtonClick += new ButtonPressedEventHandler(OnModuleChoice); gridControl.RepositoryItems.Add(btnEdit); gridColumn.OptionsColumn.ReadOnly = true; gridColumn.ColumnEdit = btnEdit; this.mControlList.Add(model); } /// /// 说明:创建 模块返回行数据 /// 创建人:唐德馨 /// 创建日期:2022-10-4 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitSelectReturnRows(TreeListColumn gridColumn, GridColumnModel model) { FrmRowsModelLookUp modelLookUp = new FrmRowsModelLookUp(); modelLookUp.UnionModuleCodel = model.addModuleld; modelLookUp.gridColumnModel = model; modelLookUp.ValueField = model.ValueMember; modelLookUp.TextField = model.TextMember; modelLookUp.SourceSQL = model.SqlSource; modelLookUp.IsType = model.FieldType; modelLookUp.ValueMember = model.FieldType == ControlType.LabSelectReturnIdNew ? model.ValueMember : model.TextMember; modelLookUp.selectField = gridColumn.FieldName; modelLookUp.Tag = model; RepositoryItemButtonEdit btnEdit = new RepositoryItemButtonEdit(); btnEdit.NullText = ""; btnEdit.AllowNullInput = DefaultBoolean.False; //RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit(); //btnEdit.NullText = ""; //btnEdit.PopupBorderStyle = PopupBorderStyles.Flat; //btnEdit.AllowNullInput = DefaultBoolean.False; //btnEdit.DisplayMember = model.TextMember; //btnEdit.SeparatorChar = ','; //btnEdit.ValueMember = model.FieldType == ControlType.LabSelectReturnId ? model.ValueMember : model.TextMember; //btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource); btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用. btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) }); btnEdit.Tag = model; btnEdit.Buttons[1].Tag = modelLookUp; btnEdit.ButtonClick += new ButtonPressedEventHandler(OnModuleRowsChoice); gridControl.RepositoryItems.Add(btnEdit); gridColumn.OptionsColumn.ReadOnly = true; gridColumn.ColumnEdit = btnEdit; this.mControlList.Add(model); } /// /// 说明:创建CheckBoxEdit /// 创建人:龚宇超 /// 创建日期:2017-08-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. public void InitCheckEdit(TreeListColumn gridColumn) { RepositoryItemCheckEdit checkEdit = new RepositoryItemCheckEdit(); checkEdit.ValueChecked = 1; checkEdit.ValueUnchecked = 0; gridControl.RepositoryItems.Add(checkEdit); gridColumn.ColumnEdit = checkEdit; } /// /// 说明:列菜单配置 /// 创建人:龚宇超 /// 创建日期:2018-08-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnPopupMenuShowing(object sender, PopupMenuShowingEventArgs e) { try { if (e.Menu.MenuType == TreeListMenuType.Column) { TreeList treeList = sender as TreeList; TreeListHitInfo hitInfo = treeList.CalcHitInfo(e.Point); TreeListMenu columnMenu = e.Menu as TreeListMenu; DXMenuItem itemFixLeft = new DXMenuItem("冻结列", FixLeftItemClick); DXMenuItem itemFixLeftAll = new DXMenuItem("冻结列(所有列)", FixLeftAllItemClick); DXMenuItem itemUnFix = new DXMenuItem("清除冻结", UnFixItemClick); DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", SaveItemClick); DXMenuItem itemResetColumn = new DXMenuItem("重置表格属性", ResetItemClick); DXMenuItem itemExportColumn = new DXMenuItem("导出表格数据", ExportItemClick); DXMenuItem itemPrintColumn = new DXMenuItem("打印表格数据", PrintItemClick); DXMenuItem itemSortColumn = new DXMenuItem("清除全部列排序", ClearSortItemClick); itemSaveColumn.BeginGroup = itemFixLeft.BeginGroup = true; itemFixLeft.Tag = itemFixLeftAll.Tag = itemUnFix.Tag = hitInfo.Column; itemSaveColumn.Tag = itemResetColumn.Tag = itemExportColumn.Tag = itemPrintColumn.Tag = itemSortColumn.Tag = hitInfo.Column; columnMenu.Items.AddRange(new DXMenuItem[] { itemFixLeft, itemFixLeftAll, itemUnFix }); if (!string.IsNullOrEmpty(CustomColumKey)) columnMenu.Items.AddRange(new DXMenuItem[] { itemSaveColumn, itemResetColumn }); columnMenu.Items.AddRange(new DXMenuItem[] { itemExportColumn, itemPrintColumn, itemSortColumn }); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:冻结列点击 /// 创建人:龚宇超 /// 创建日期:2018-08-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected override void FixLeftItemClick(object sender, EventArgs e) { try { DXMenuItem item = sender as DXMenuItem; TreeListColumn column = item.Tag as TreeListColumn; column.Fixed = FixedStyle.Left; } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:冻结所有列 /// 创建人:龚宇超 /// 创建日期:2018-08-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected override void FixLeftAllItemClick(object sender, EventArgs e) { try { DXMenuItem item = sender as DXMenuItem; TreeListColumn column = item.Tag as TreeListColumn; TreeList treeList = sender as TreeList; foreach (TreeListColumn col in treeList.Columns) { if (col.AbsoluteIndex <= column.AbsoluteIndex) { col.Fixed = FixedStyle.Left; } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:取消冻结列 /// 创建人:龚宇超 /// 创建日期:2018-02-01 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected override void UnFixItemClick(object sender, EventArgs e) { try { DXMenuItem item = sender as DXMenuItem; TreeListColumn column = item.Tag as TreeListColumn; column.Fixed = FixedStyle.None; column.VisibleIndex = column.AbsoluteIndex; } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:设置编辑列 /// 创建人:龚宇超 /// 创建日期:2018-08-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. /// The custom colum key. public override void SetEditColumns(DataTable table, string customColumKey = "") { if (table == null) return; this.CustomColumKey = customColumKey; //设置列头自动高度 this.gcMain.OptionsView.ColumnHeaderAutoHeight = DefaultBoolean.True; base.ColumnList.Clear(); this.gcMain.Bands.Clear(); this.gcMain.Columns.Clear(); this.AddBandColumns(table, false); DataTable customTable = this.gcMain.GetCustomColumnByDatabase(this.CustomColumKey); this.SetCustomColumns(customTable); } /// /// 说明:设置编辑列 /// 创建人:龚宇超 /// 创建日期:2018-08-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. /// The custom colum key. public void InitializeTreeMethod() { this.TreeListObj.CellValueChanging += new DevExpress.XtraTreeList.CellValueChangedEventHandler(OnCellValueChaning); } protected void OnCellValueChaning(object sender, CellValueChangedEventArgs e) { try { TreeListColumn gridColumn = e.Column; SetCheckedChildNodes(e.Node, e.Value, gridColumn); SetCheckedParentNodes(e.Node, e.Value, gridColumn); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:设置子节点的状态 /// 创建人:龚宇超 /// 创建日期:2020-05-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The node. /// The check. /// The grid column. protected void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, Object check, TreeListColumn gridColumn) { for (int i = 0; i < node.Nodes.Count; i++) { node.Nodes[i].SetValue(gridColumn, check); SetCheckedChildNodes(node.Nodes[i], check, gridColumn); } node.SetValue(gridColumn, check); SetCheckedParentNodes(node, check, gridColumn); } /// /// 说明:设置父节点的状态 /// 创建人:龚宇超 /// 创建日期:2020-05-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The node. /// The check. /// The grid column. protected void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, Object check, TreeListColumn gridColumn) { if (node.ParentNode != null) { bool b = false; int state; for (int i = 0; i < node.ParentNode.Nodes.Count; i++) { state = (int)(node.ParentNode.Nodes[i].GetValue(gridColumn)); if ((int)check != state) { b = !b; break; } } node.ParentNode.SetValue(gridColumn, b ? CheckState.Indeterminate : check); SetCheckedParentNodes(node.ParentNode, check, gridColumn); } } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2019-11-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void SetGridRowHeightAndFont() { if (SystemInfo.Instance.GridRowFontSize > 0) this.gcMain.Appearance.Row.Font = new Font("微软雅黑", SystemInfo.Instance.GridRowFontSize); if (SystemInfo.Instance.GridRowHeight > 0) { this.gcMain.ColumnPanelRowHeight = this.gcMain.RowHeight = SystemInfo.Instance.GridRowHeight; } } /// /// 说明:保存树表格表格属性 /// 创建人:王一帆 /// 创建日期:2019-11-14 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected override void SaveItemClick(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.CustomColumKey)) { MessageUtil.Show(ResourceKeys.NotSettingResetColumn); return; } DataRow rowItem = null; bool success = BaseImpl.HasExistsDataRow(ResourceKeys.SettingTableName, "formKey", CustomColumKey.ToString(), string.Format(" and OperatorName='{0}' ", ERPInfo.Instance.UserName), out rowItem); if (!success) { MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable); return; } if (MessageUtil.Show(ResourceKeys.IsSaveColumn, MessageBoxButtons.YesNo) == DialogResult.Yes) { try { if (rowItem == null) { success = this.gcMain.SaveCustomColumnToDatabase(this.CustomColumKey); } else { success = this.gcMain.UpdateCustomColumnToDatabase(this.CustomColumKey); } 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) { LogUtil.WriteError("保存表格属性出错", ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } } /// /// 说明:重置树表格属性 /// 创建人:王一帆 /// 创建日期:2019-11-14 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected override void ResetItemClick(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(this.CustomColumKey)) { MessageUtil.Show(ResourceKeys.NotSettingResetColumn); return; } if (!BaseImpl.HasExistsTable(ResourceKeys.SettingTableName)) { MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable); return; } if (MessageUtil.Show(ResourceKeys.IsResetColumn, MessageBoxButtons.YesNo) == DialogResult.Yes) { bool success = this.gcMain.ResetCustomColumnToDatabase(this.CustomColumKey); DataTable customTable = this.gcMain.GetCustomColumnByDatabase(this.CustomColumKey); this.SetCustomColumns(customTable, false); MessageUtil.Show(success ? ResourceKeys.ResetSuccess : ResourceKeys.ResetFault); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:设置列格式化 /// 创建人:龚宇超 /// 创建日期:2018-03-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. /// The model. private void SetColumnFormat(TreeListColumn gridColumn, GridColumnModel model) { if (gridColumn == null || model == null) return; // 格式化数字 if (!string.IsNullOrEmpty(model.DataFormat)) { if (model.FieldType == ControlType.LabTextInt || model.FieldType == ControlType.LabCalcText) { gridColumn.Format.FormatType = FormatType.Numeric; gridColumn.Format.FormatString = model.DataFormat; } else { gridColumn.Format.FormatType = FormatType.Custom; gridColumn.Format.FormatString = model.DataFormat; } } // 特殊字段格式化 if (model.CanAccuracy) { gridColumn.Format.FormatType = FormatType.Numeric; gridColumn.Format.FormatString = "F2"; } } /// /// 说明:设置列汇总 /// 创建人:龚宇超 /// 创建日期:2018-03-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. /// The model. private void SetColumnSumming(TreeListColumn gridColumn, GridColumnModel model) { // 设置底部合计 if (gridColumn.VisibleIndex == 0) { gcMain.OptionsView.ShowSummaryFooter = true; gridColumn.AllNodesSummary = true; gridColumn.SummaryFooter = SummaryItemType.Count; gridColumn.RowFooterSummaryStrFormat = "合计:{0:#,###}行"; } else { if (model.CanSum) { gcMain.OptionsView.ShowSummaryFooter = true; gridColumn.AllNodesSummary = true; gridColumn.SummaryFooter = DevExpress.XtraTreeList.SummaryItemType.Sum; gridColumn.RowFooterSummaryStrFormat = "{0:" + model.DataFormat + "}"; } } } /// /// 说明:设置树表格自定义列 /// 创建人:王一帆 /// 创建日期:2019-11-14 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected override void SetCustomColumns(DataTable customTable, bool isInit = true) { Dictionary dataCaches = Model != null ? Model.DataCaches : null; if (!dataCaches.GetValue(this, "HasExistsSettingTable", out bool hasExistsSettingTable)) { hasExistsSettingTable = BaseImpl.HasExistsTable(ResourceKeys.SettingTableName); } if (string.IsNullOrEmpty(this.CustomColumKey) || !hasExistsSettingTable) return; 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); GridColumnModel column = this.ColumnList.Find(x => x.FieldName == fieldName); TreeListColumn gridColumn = this.gcMain.Columns.ColumnByName(fieldName); if (column != null && gridColumn != null && gridColumn.Visible && gridColumn.Width > 0) { TreeListColumn colObj = this.gcMain.Columns[fieldName]; colObj.VisibleIndex = index; colObj.Width = fieldWidth; colObj.Visible = visible; colObj.Fixed = isFix ? FixedStyle.Left : FixedStyle.None; } } } if (!isInit) { // 非初始化,假如未配置则初始化到系统配置 for (int i = 0; i < this.ColumnList.Count; i++) { GridColumnModel column = this.ColumnList[i]; if (this.gcMain.Columns.ColumnByName(column.FieldName) != null) { TreeListColumn colObj = this.gcMain.Columns[column.FieldName]; colObj.VisibleIndex = i; colObj.Width = column.Width; colObj.Visible = column.Visible; } } } } /// /// 说明:监听树表格键盘事件 /// 创建人:王一帆 /// 创建日期:2019-11-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected virtual void OnTreeGridViewKeyDown(object sender, KeyEventArgs e) { try { // 复制单元格 if (e.Control && e.KeyCode == Keys.C) { var selectNodes = this.gcMain.Selection; if (selectNodes != null && selectNodes.Count == 1) { //object obj = gridView.GetFocusedRowCellValue(gridView.FocusedColumn); object obj = this.gcMain.FocusedNode.GetDisplayText(this.gcMain.FocusedColumn); if (obj != null) { Clipboard.SetDataObject(obj + ""); e.Handled = true; } } else if (selectNodes != null && selectNodes.Count > 1) { DataRow[] dataRows = new DataRow[selectNodes.Count]; string copySummary = string.Empty; for (int i = 0; i < selectNodes.Count; i++) { TreeListNode treeNode = selectNodes[i]; List cells = gcMain.GetSelectedCells(treeNode); DataRowView dataRowView = this.gcMain.GetDataRecordByNode(treeNode) as DataRowView; dataRows[i] = dataRowView != null ? dataRowView.Row : null; foreach (TreeListColumn cell in cells) { copySummary += dataRows[i][cell.Name] + "\t"; } copySummary += "\n"; } if (!string.IsNullOrWhiteSpace(copySummary)) { copySummary = copySummary.TrimEnd('\n'); Clipboard.SetDataObject(copySummary); e.Handled = true; } } else { gcMain.CopyToClipboard(); e.Handled = true; } } else if (e.Modifiers.CompareTo(Keys.Control) == 0 && e.KeyCode == Keys.V) { //if (this.gridView.IsFindPanelVisible) //{ // MessageUtil.Show("搜索模式下无法粘贴行."); // return; //} object _objData = null; IDataObject dataObj = Clipboard.GetDataObject(); if (dataObj.GetDataPresent(DataFormats.Text)) _objData = dataObj.GetData(DataFormats.Text); NewPasteMethod(e, _objData); } else if (e.Control && e.KeyCode == Keys.F) { this.gcMain.ShowFindPanel(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:获取选中行数据 /// 创建人:龚宇超 /// 创建日期:2019-10-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// DataRow. public override DataRow GetViewFocusedDataRow() { TreeListNode treeNode = this.gcMain.FocusedNode as TreeListNode; if (treeNode != null) { DataRowView dataRowView = this.gcMain.GetDataRecordByNode(treeNode) as DataRowView; return dataRowView != null ? dataRowView.Row : null; } return null; } /// /// 说明:获取选中行数据 /// 创建人:龚宇超 /// 创建日期:2019-10-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// DataRow[]. public override DataRow[] GetViewFocusedDataRows() { var selectNodes = this.gcMain.Selection; DataRow[] dataRows = new DataRow[selectNodes.Count]; for (int i = 0; i < selectNodes.Count; i++) { TreeListNode treeNode = selectNodes[i]; DataRowView dataRowView = this.gcMain.GetDataRecordByNode(treeNode) as DataRowView; dataRows[i] = dataRowView != null ? dataRowView.Row : null; } return dataRows; } /// /// 说明:设置数据源 /// 创建人:龚宇超 /// 创建日期:2018-03-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. /// if set to true [select row handler]. public DataTable GetGridViewDataSource() { return this.gcMain.DataSource as DataTable; } /// /// 说明:设置数据源 /// 创建人:龚宇超 /// 创建日期:2018-03-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. /// if set to true [select row handler]. public override void SetGridViewDataSource(DataTable table, bool selectRowHandler = true) { TreeListNode lastNode = this.TreeListObj.FocusedNode; this.gcMain.DataSource = table; if (selectRowHandler) { this.TreeListObj.FocusedNode = lastNode; } } public override int SetGridViewDataSource(SqlDataAdapter adapter, bool selectRowHandler = true) { if (adapter == null) return 0; TreeListNode lastNode = this.TreeListObj.FocusedNode; this.AdapterObj = adapter; DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "SetGridViewDataSource"); SqlCommandBuilder cb = new SqlCommandBuilder(this.AdapterObj); GetTreeExpanded(); this.gcMain.DataSource = dataSet.Tables[0]; //根据记录展开对应节点 foreach (TreeListNode treeListNode in treeListNodes) { TreeListNode treeListNode1 = this.gcMain.Nodes.TreeList.FindNodeByID(treeListNode.Id); if (treeListNode1 != null) treeListNode1.Expanded = true; } if ((Expansion + "").Equals("1")) { this.gcMain.ExpandAll(); } else if ((Expansion + "").Equals("2")) { this.gcMain.ExpandToLevel(0); } if (selectRowHandler) { this.TreeListObj.FocusedNode = lastNode; } return dataSet.Tables[0] != null ? dataSet.Tables[0].Rows.Count : 0; } /// /// 记录展开的节点 /// public void GetTreeExpanded() { treeListNodes.Clear(); foreach (TreeListNode n in this.gcMain.Nodes) { setRecursive(n); } } public void setRecursive(TreeListNode treeNode) { if (treeNode.Expanded) treeListNodes.Add(treeNode); // Visit each node recursively. foreach (TreeListNode tn in treeNode.Nodes) { setRecursive(tn); } } /// /// 说明:全部展开 /// 创建人:龚宇超 /// 创建日期:2018-08-13 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnAllExpandClick(object sender, EventArgs e) { try { this.gcMain.ExpandAll(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:全部合并 /// 创建人:龚宇超 /// 创建日期:2018-08-13 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnAllMergeClick(object sender, EventArgs e) { try { this.gcMain.CollapseAll(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:自动搜索框弹出时 /// 创建人:龚宇超 /// 创建日期:2019-06-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnAutoSearchEditPopupMenuShowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e) { try { if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column) { CurrentOperGridView = e.HitInfo.View; DevExpress.XtraGrid.Menu.GridViewColumnMenu columnMenu = e.Menu as DevExpress.XtraGrid.Menu.GridViewColumnMenu; //Model.ModuleCode+ e.HitInfo.Column.FieldName DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", SaveItemClick2); DXMenuItem itemResetColumn = new DXMenuItem("重置表格属性", ResetItemClick2); itemSaveColumn.BeginGroup = true; itemSaveColumn.Tag = itemResetColumn.Tag = e.HitInfo.Column; columnMenu.Items.AddRange(new DXMenuItem[] { itemSaveColumn, itemResetColumn }); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } private void gridLookUpEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e) { try { GridLookUpEdit edit = sender as GridLookUpEdit; RepositoryItemGridLookUpEdit searchEdit = edit.Properties; DataTable dt = (searchEdit.DataSource as DataTable); BeginInvoke(new MethodInvoker(delegate () { FilterLookup(sender, e.NewValue + ""); })); if (string.IsNullOrWhiteSpace(edit.AutoSearchText) && e.NewValue == "") { DataRow newRow = dt.NewRow(); if (dt.Rows.Cast().FirstOrDefault(x => x == newRow) == null) { dt.Rows.Add(newRow.ItemArray); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } private void FilterLookup(object sender, string NewValue) { try { GridLookUpEdit edit = sender as GridLookUpEdit; DevExpress.XtraGrid.Views.Grid.GridView gridView = edit.Properties.View as DevExpress.XtraGrid.Views.Grid.GridView; GridColumnModel model = edit.Properties.Tag as GridColumnModel; DataTable table = edit.Properties.DataSource as DataTable; FieldInfo fi = gridView.GetType().GetField("extraFilter", BindingFlags.NonPublic | BindingFlags.Instance); List strList = new List(); foreach (DevExpress.XtraGrid.Columns.GridColumn colum in gridView.Columns) { string AutoSearchText = string.IsNullOrEmpty(edit.AutoSearchText) ? NewValue : edit.AutoSearchText; BinaryOperator op1 = new BinaryOperator(colum.FieldName, "%" + AutoSearchText + "%", BinaryOperatorType.Like); strList.Add(op1); } string isPopShow = edit.Tag + ""; if (isPopShow == "1") edit.ShowPopup(); string filterCondition = new GroupOperator(GroupOperatorType.Or, strList.ToArray()).ToString(); fi.SetValue(gridView, filterCondition); MethodInfo mi = gridView.GetType().GetMethod("ApplyColumnsFilterEx", BindingFlags.NonPublic | BindingFlags.Instance); edit.Tag = "0"; mi.Invoke(gridView, null); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 隐藏自动搜索框的过滤面板 /// /// /// private void OnCustomDrawFilterPanel(object sender, DevExpress.XtraGrid.Views.Base.CustomDrawObjectEventArgs e) { GridFilterPanelInfoArgs info = e.Info as DevExpress.XtraGrid.Drawing.GridFilterPanelInfoArgs; info.ShowCloseButton = false; info.ShowCustomizeButton = false; info.ShowActiveButton = false; e.Handled = true; } /// /// 数据源中点击将数据源更新 /// /// /// private void View_Click(object sender, EventArgs e) { try { DevExpress.XtraGrid.Views.Grid.GridView gridView = sender as DevExpress.XtraGrid.Views.Grid.GridView; DataRow rt = gridView.GetFocusedDataRow(); RepositoryItemGridLookUpEdit searchEdit = gridView.Tag as RepositoryItemGridLookUpEdit; if (rt == null) return; DataTable dt = (searchEdit.DataSource as DataTable); if (dt.Rows.Cast().FirstOrDefault(x => x == rt) == null && dt != null && dt.Rows.Count > 0) { dt.Rows.Add(rt.ItemArray); gridView.UpdateCurrentRow(); gridView.ShowEditor(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); 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 { PubTreeLookUp popup = (PopupEdit.Properties.PopupControl.Tag) as PubTreeLookUp; if (e.KeyCode == Keys.Enter) { GridColumnModel model = popup.model; string ids = popup.TreeViewExObj.GetCheckValues(); if (ids != null) { ids = ids.Replace("'", ""); if (model.FieldType == ControlType.LabTreeLookText || model.FieldType == ControlType.LabCheckTreeLookText) { string[] values = ids.Trim(',').Split(','); string text = string.Empty; foreach (string item in values) { DataRow rowItem = popup.TreeViewExObj.DataSource.Rows.Cast().FirstOrDefault(x => x[popup.ValueMember] + "" == item); if (rowItem != null) { text += rowItem[popup.TextMember] + ","; } } ids = text.Trim(','); } PopupEdit.Properties.OwnerEdit.EditValue = ids.Trim(','); this.Focus(); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:自定义设置其弹出框宽度 /// 创建人:王一帆 /// 创建日期:2021-03-29 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. private void OnPopupGridMouseClick(object sender, TreeNodeMouseClickEventArgs e) { try { PubTreeLookUp popup = (PopupEdit.Properties.PopupControl.Tag) as PubTreeLookUp; if (e.Node != null && e.Node.Bounds.Contains(e.Location)) { if (e.Node.Nodes.Count > 0 && !popup.isRootNode) { return; } PopupEdit.Properties.OwnerEdit.EditValue = (popup.model.FieldType == ControlType.LabTreeLookText || popup.model.FieldType == ControlType.LabCheckTreeLookText) ? e.Node.Text.ToString() : e.Node.Name.ToString(); this.Focus(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:自定义设置其弹出框宽度 /// 创建人:王一帆 /// 创建日期:2021-03-29 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. private void OnQueryPopUp(object sender, CancelEventArgs e) { try { PopupContainerEdit popupedit = (PopupContainerEdit)sender; popupedit.Properties.PopupControl.Width = popupedit.Width; popupedit.Properties.PopupControl.Height = (int)(popupedit.Width * 1.1); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:自定义设置其显示值 /// 创建人:王一帆 /// 创建日期:2021-03-29 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The grid column. private void OnQueryDisplayText(object sender, QueryDisplayTextEventArgs e) { try { RepositoryItemPopupContainerEdit PopupEdit = sender as RepositoryItemPopupContainerEdit; if (PopupEdit != null) { PubTreeLookUp popup = (PopupEdit.PopupControl.Tag) as PubTreeLookUp; if (e.EditValue == null) return; string[] values = e.EditValue.ToString().Trim(',').Split(','); string text = string.Empty; foreach (string item in values) { DataRow rowItem = popup.TreeViewExObj.DataSource.Rows.Cast().FirstOrDefault(x => x[popup.ValueMember] + "" == item); if (rowItem != null) { text += rowItem[popup.TextMember] + ","; } } e.DisplayText = text.Trim(','); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:表格打开模块返回id /// 创建人:曹屹峰 /// 创建日期:2021-08-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void OnModuleChoice(object sender, ButtonPressedEventArgs e) { try { CheckedComboBoxEdit btnEdit = (CheckedComboBoxEdit)sender; FrmModelLookUp2 modelLookUp = e.Button.Tag as FrmModelLookUp2; GridColumnModel model = modelLookUp.Tag as GridColumnModel; modelLookUp.EditText = btnEdit.Text; modelLookUp.CurrentOperColumnKey = Model.ModuleCode + "_" + model.FieldName; if (model.FieldType == ControlType.LabMultiSelectValue || model.FieldType == ControlType.LabMultiSelectValueParam) { modelLookUp.EditValue = btnEdit.EditValue + ""; modelLookUp.EditText = string.Empty; } else { modelLookUp.EditText = btnEdit.Text; modelLookUp.EditValue = string.Empty; } //多选关联单据头 modelLookUp.SourceSQL = model.SqlSource.Replace("#", ""); //单据头关联取值 if (this.ParentControl != null) { modelLookUp.SourceSQL = this.ParentControl.ReplaceControlValue(modelLookUp.SourceSQL); } modelLookUp.SourceSQL = ReplaceHelper.ReplaceRowParam(this.GetViewFocusedDataRow(), modelLookUp.SourceSQL); //modelLookUp.DataSource = BaseImpl.GetDataTableResult(modelLookUp.SourceSQL); modelLookUp.InitControls(modelLookUp.UnionModuleCodel); DialogResult result = modelLookUp.ShowDialog(); if (result == DialogResult.OK) { btnEdit.EditValue = modelLookUp.EditValue; } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:表格打开模块返回数据源行 /// 创建人:唐德馨 /// 创建日期:2022-10-4 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void OnModuleRowsChoice(object sender, ButtonPressedEventArgs e) { try { ButtonEdit btnEdit = (ButtonEdit)sender; FrmRowsModelLookUp modelLookUp = e.Button.Tag as FrmRowsModelLookUp; GridColumnModel model = modelLookUp.Tag as GridColumnModel; modelLookUp.EditText = btnEdit.Text; modelLookUp.CurrentOperColumnKey = Model.ModuleCode + "_" + model.FieldName; if (model.FieldType == ControlType.LabMultiSelectValue || model.FieldType == ControlType.LabMultiSelectValueParam) { modelLookUp.EditValue = btnEdit.EditValue + ""; modelLookUp.EditText = string.Empty; } else { modelLookUp.EditText = btnEdit.Text; modelLookUp.EditValue = string.Empty; } ////多选关联单据头 //modelLookUp.SourceSQL = model.SqlSource.Replace("#", ""); ////单据头关联取值 //if (this.ParentControl != null) //{ // modelLookUp.SourceSQL = this.ParentControl.ReplaceControlValue(modelLookUp.SourceSQL); //} //modelLookUp.SourceSQL = ReplaceHelper.ReplaceRowParam(this.gridView.GetFocusedDataRow(), modelLookUp.SourceSQL); //modelLookUp.DataSource = BaseImpl.GetDataTableResult(modelLookUp.SourceSQL); string sourceSql = string.Empty; if (!string.IsNullOrEmpty(model.SqlSource)) { sourceSql = model.SqlSource; } else { DataRow modelRow = MainImpl.GetSystemdllTab(model.addModuleld);//获取单个模块信息 if (modelRow == null) { MessageUtil.Show("模块编号[" + model.addModuleld + "],配置错误!\r\n该模块信息未找到!"); return; } ModuleModel moduleModel = new ModuleModel(modelRow);// 系统模块实体对象 sourceSql = moduleModel.MenuSql; } //多选关联单据头 modelLookUp.SourceSQL = sourceSql.Replace("#", ""); //单据头关联取值 if (this.ParentControl != null) { modelLookUp.SourceSQL = this.ParentControl.ReplaceControlValue(modelLookUp.SourceSQL); } modelLookUp.SourceSQL = ReplaceHelper.ReplaceRowParam(this.GetViewFocusedDataRow(), modelLookUp.SourceSQL); //modelLookUp.DataSource = BaseImpl.GetDataTableResult(modelLookUp.SourceSQL); modelLookUp.InitControls(); DialogResult result = modelLookUp.ShowDialog(); modelLookUp.DataSource = null; if (result == DialogResult.OK) { //btnEdit.EditValue = modelLookUp.EditValue; DataRow returnRow = modelLookUp.selectRowsEditValue; DataRow dataRow = this.GetViewFocusedDataRow(); if (!string.IsNullOrEmpty(model.SqlSource)) { foreach (DevExpress.XtraGrid.Columns.GridColumn gridColumn in this.gcMain.Columns) { GridColumnModel colModel = gridColumn.Tag as GridColumnModel; if (!string.IsNullOrEmpty(colModel.unionCompare) && colModel.unionCompare.Trim().Split('^').Length == 2) { string[] fields = colModel.unionCompare.Trim().Split('^'); string inField = fields[0]; string outField = fields[1]; if (returnRow.Table.Columns.Contains(inField)) { dataRow[outField] = returnRow[inField] + ""; } } } } else { //btnEdit.EditValue = modelLookUp.EditValue; foreach (DataColumn col in returnRow.Table.Columns) { if (dataRow.Table.Columns.Contains(col.ColumnName)) { dataRow[col.ColumnName] = returnRow[col.ColumnName] + ""; } } } SendKeys.Send("{Esc}"); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:重写表格选中事件. /// 创建人:王一帆 /// 创建日期:2020-10-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnCustomDrawNodeCell(object sender, CustomDrawNodeCellEventArgs e) { if (e.Node == this.gcMain.FocusedNode) e.Appearance.BackColor = ColorTranslator.FromHtml("#9feb6a"); } /// /// 粘贴功能 /// /// /// private void NewPasteMethod(KeyEventArgs e, object _objData) { if (_objData != null) { string _tempStr = _objData.ToString(); _tempStr = Regex.Replace(_tempStr, "\"[^\"]*(?:\"\"[^\"]*)*\"", m => m.Value.Replace("\r\n", "{lskj}").Replace("\"", "")); int _rowNumber = 1; int _pasteRowCount = 1; string[] _split = { "\r\n" }; string[] _arrayRowStr = _tempStr.Split(_split, StringSplitOptions.None); if (_arrayRowStr.Length < 1) return; TreeListColumn focColumn = this.gcMain.FocusedColumn; focColumn = focColumn == null ? this.gcMain.Columns[0] : focColumn; if (focColumn != null) { DataTable table = this.GetGridViewDataSource(); int beforeNumber = table.Rows.Count; _rowNumber = this.gcMain.GetVisibleIndexByNode(this.gcMain.FocusedNode); if (_rowNumber < 0) { _rowNumber = 0; } if (_arrayRowStr.Length != this.gcMain.Selection.Count) { //选择区域与粘贴行数不匹配 } _pasteRowCount = _arrayRowStr.Length; for (int i = 0; i < _pasteRowCount; i++) { string[] _arrayStr2 = _arrayRowStr[i].Split('\t'); if ((i == _pasteRowCount - 1 && _arrayRowStr[_pasteRowCount - 1].Replace("\r\n", "").Trim() == "")) continue; DataRow newRow = null; if (_rowNumber + 1 > table.Rows.Count) { newRow = table.NewRow(); //table.Rows.Add(newRow); TreeListColumnCollection gridColumns = this.gcMain.Columns; this.gcMain.FocusedNode = this.gcMain.GetNodeByVisibleIndex(_rowNumber); foreach (TreeListColumn col in gridColumns) { GridColumnModel model = col.Tag as GridColumnModel; string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); if (model.DefaultValue != null && model.DefaultValue.Contains("{#") && this.ParentControl != null) { fieldValue = this.ParentControl.ReplaceParentControlValue(model.DefaultValue); if (!string.IsNullOrEmpty(fieldValue)) { newRow[col.FieldName] = fieldValue; } } else if (!string.IsNullOrEmpty(model.DefaultValue) && !model.DefaultValue.Contains("{ROW_")) { newRow[col.FieldName] = fieldValue; } } } this.gcMain.FocusedNode = this.gcMain.GetNodeByVisibleIndex(_rowNumber); if (_arrayStr2.Length == 0) _arrayStr2[0] = _arrayRowStr[i]; int _colNumber = beforeNumber == 0 ? 0 : focColumn.VisibleIndex; for (int j = 0; j < _arrayStr2.Length; j++)//j = _colNumber { TreeListColumn col = this.gcMain.VisibleColumns[_colNumber]; GridColumnModel model = col.Tag as GridColumnModel; if (model != null && (model.CanCopy || ((this.gcMain.OptionsBehavior.Editable) && (this.gcMain.VisibleColumns[_colNumber].OptionsColumn.AllowEdit)))) { // 返回ID类型特殊处理 string cellValue = _arrayStr2[j]; if (!string.IsNullOrEmpty(cellValue)) cellValue = cellValue.Replace("{lskj}", "\n"); bool IsTextEqualValue = false; object value = model != null && ControlType.IsValue(model.FieldType) ? GetValueByCaption(model, col.ColumnEdit, cellValue, out IsTextEqualValue) : cellValue; value = model != null && model.FieldType == 14 ? ReplaceMultiSpace(value) : value; DateTime dateValue = new DateTime(); // 避免下拉框值替换失败提示错误 if (model != null && !IsTextEqualValue && ((ControlType.IsValue(model.FieldType) && cellValue == value + "") || (ControlType.LabTextInt == model.FieldType && (value + "").IsChinese()) || (ControlType.IsDate(model.FieldType) && !DateTime.TryParse(value + "", out dateValue)))) { _colNumber += 1; continue; } if (newRow == null) { DataRow dataRow = this.GetViewFocusedDataRow(); dataRow[this.gcMain.FocusedColumn.FieldName] = value; } else { if (string.IsNullOrEmpty(value + "")) { if (string.IsNullOrWhiteSpace(newRow[col.FieldName] + "")) { if (col.ColumnType.Name.ToLower() == "string") newRow[col.FieldName] = ""; if (col.ColumnType.Name.ToLower().IndexOf("char") >= 0) newRow[col.FieldName] = ""; if (col.ColumnType.Name.ToLower().IndexOf("int") >= 0) newRow[col.FieldName] = 0; if (col.ColumnType.Name.ToLower() == "decimal") newRow[col.FieldName] = 0; //if (dc.DataType.Name.ToLower().IndexOf("date") >= 0) // tmpRow[dc] = DateTime.Now; } } else { newRow[col.FieldName] = value; } } //gridView.SetRowCellValue(_rowNumber, col, value); } _colNumber += 1; } _rowNumber += 1; if (newRow != null) { // 其它处理(如绑定左侧树结构数据) //if (OnParseGridDataCallBack != null) this.OnParseGridDataCallBack(newRow); for (int j = 0; j < this.gcMain.Columns.Count; j++) { if (this.gcMain.Columns[j].Tag == null) continue; if ((this.gcMain.Columns[j].Tag as GridColumnModel).LimitLength > 0) { int MaxInputLength = System.Text.Encoding.Default.GetBytes(newRow[this.gcMain.Columns[j].FieldName].ToString()).Length; if (MaxInputLength > (this.gcMain.Columns[j].Tag as GridColumnModel).LimitLength) { newRow.SetColumnError(newRow.Table.Columns[this.gcMain.Columns[j].FieldName], "当前输入文本超过设定长度!");//不满足条件设置错误信息 } } } table.Rows.Add(newRow); //this.gridView.FocusedRowHandle = _rowNumber - 1;