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 DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.Utils; using CommonLib; using DevExpress.XtraEditors.Repository; using DevExpress.XtraEditors.Controls; using System.Text.RegularExpressions; using Lskj.MyControl.LookUp; using DevExpress.XtraEditors; using Lskj.PubUtils; using DevExpress.Data; using DevExpress.XtraGrid.Menu; using DevExpress.Utils.Menu; using DevExpress.XtraGrid.Views.Base; using ControlLib.inh; using DevExpress.XtraPrinting; using DevExpress.XtraGrid.Views.BandedGrid; using DevExpress.XtraGrid.Views.Grid.ViewInfo; using DevExpress.XtraGrid.Views.BandedGrid.ViewInfo; using Lskj.Common; namespace Lskj.MyControl { public partial class BandedControlEx : UserControl { public BandedGridView gridView { get { return gridView1; } } public GridControl gridControl { get { return gridMain; } } public string Sql { get; set; } public string sqlC { get; set; } public string ConstSql { get; set; } public int SourceType { get; set; } public string loadBom { get; set; } public string bomSql { get; set; } public string bomCaption { get; set; } public string detailEnableCond { get; set; } public string detailEnableMsg { get; set; } public static string OperatorId { get; set; } public static string OperatorName { get; set; } public bool AddCopyRows; public string ColumnPrefix; private bool isCancel = false; private double customSum = 0.00; private Dictionary dicSum; private Dictionary> lookupDatas; public Dictionary lookupTables; private bool inSummary = false; private DataTable clipTable; public DataTable SumFieldsTable { get; set; } private DataTable dtColumns; /// /// 禁用表格是否需要改变表格颜色 /// public bool UnAllowEditChangeColor { get; set; } /// /// 表格列信息保存需要的信息 /// public string ModuleKey; //关键字 public string FormKey; public int ModuleType; //模块类型//基础档案 //报表明细 //单据明细 //来源主信息 //来源明细信息 //单据来源主信息 public Control pnlMain { get; set; } public BandedControlEx() { InitializeComponent(); gridView1.IndicatorWidth = 40; gridView1.KeyDown += new KeyEventHandler(gridView1_KeyDown); gridView1.Appearance.HeaderPanel.Font = new Font("宋体", 9); gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; gridView1.Appearance.Preview.Font = new Font("宋体", 9); gridView1.Appearance.Row.Font = new Font("宋体", 9); gridView1.RowCellStyle += new RowCellStyleEventHandler(gridView1_RowCellStyle); gridView1.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(gridView1_SelectionChange); gridView1.ShowingEditor += new CancelEventHandler(gridView1_CancelEditor); gridView1.PopupMenuShowing += new PopupMenuShowingEventHandler(gridView1_PopupMenuShowing); gridView1.CustomSummaryCalculate += new CustomSummaryEventHandler(gridView1_CustomSummaryCalculate); //gridView1.OptionsView.AllowCellMerge = true; gridView1.OptionsSelection.MultiSelect = true; gridView1.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CellSelect; gridView1.OptionsBehavior.EditorShowMode = EditorShowMode.MouseDownFocused; gridView1.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(gridView1_CustomColumnDisplayTextEventHandler); gridView1.CellValueChanged+= new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridBillInfo_CellValueChanged); gridView1.OptionsView.RowAutoHeight = true; dicSum = new Dictionary(); lookupDatas = new Dictionary>(); lookupTables = new Dictionary(); clipTable = new DataTable(); AddCopyRows = false; ColumnPrefix = ""; } public void reloadDictionary() { foreach (BandedGridColumn gc in gridView1.Columns) { if (!(gc.ColumnEdit is RepositoryItemSearchLookUpEdit)) continue; RepositoryItemSearchLookUpEdit combox = gc.ColumnEdit as RepositoryItemSearchLookUpEdit; LookUpTag ltag = combox.Tag as LookUpTag; if (ltag != null) { String SQL = ltag.Sql; if (SQL != null) { SQL = Regex.Replace(SQL, "#[^##]+#", " 1=1 "); DataTable dtTable = SqlHelper.ExecuteDataSet(SQL).Tables[0]; combox.DataSource = dtTable; } } } } #region 处理Grid计算 private void gridBillInfo_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { MyTagModel tag = e.Column.Tag as MyTagModel; if (tag.unionFields + "" != "") setUnionValue(e.Column as BandedGridColumn, e.Value); if (SumFieldsTable == null) return; if (inSummary) return; inSummary = true; string calcSource = string.Empty; try { DataRow gvRow = gridView.GetDataRow(e.RowHandle); foreach (DataRow row in SumFieldsTable.Rows) { bool ifTruncate = false; string calcExpr = row["calcExpr"].ToString(); if (calcExpr.IndexOf("@truncate:", StringComparison.OrdinalIgnoreCase) != -1) { calcExpr = calcExpr.Substring(10); ifTruncate = true; } //if (calcExpr.IndexOf("{" + e.Column.FieldName + "}", StringComparison.OrdinalIgnoreCase) != -1) { try { calcSource = calcExpr; if (e.Column.FieldName != row["fieldName"].ToString()) { List listParam = GetParamValue(calcExpr); foreach (string str in listParam) { string filed = str.Replace("{", "").Replace("}", ""); string filedValue = gvRow[filed].ToString(); if (string.IsNullOrEmpty(filedValue)) filedValue = "0"; calcExpr = calcExpr.Replace(str, filedValue + ""); } calcExpr = calcExpr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|"); string result = Evaluator.Eval(calcExpr).ToString(); int idataDec = 2; if (row.Table.Columns.Contains("DataDec")) idataDec = int.Parse(row["DataDec"].ToString()); if (ifTruncate) { if (result.IndexOf(".") == -1) result = result + ".0000000000"; else result = result + "0000000000"; gridView.SetRowCellValue(e.RowHandle, gridView.Columns[row["fieldName"].ToString()], result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), idataDec + 1)); } else gridView.SetRowCellValue(e.RowHandle, gridView.Columns[row["fieldName"].ToString()], Math.Round(double.Parse(result), idataDec, MidpointRounding.AwayFromZero)); } } catch (Exception ex) { gridView.SetRowCellValue(e.RowHandle, gridView.Columns[row["fieldName"].ToString()], 0); //MessageBox.Show("计算公式定义错误:" + calcSource + " >> " + calcExpr + "\n" + ex.Message); } } } } catch { //MessageBox.Show("计算公式定义错误:" + calcSource + "\n" + ex.Message); } inSummary = false; } #endregion public void setUnionValue(BandedGridColumn col,object value) { MyTagModel lookUpTag = col.Tag as MyTagModel; var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle); if (focusRow != null && lookUpTag != null) { string columnName = col.FieldName; string unionFields = lookUpTag.unionFields; string unionValue = lookUpTag.unionValue; unionValue = ReqSqlParam(unionValue, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); string cellValue = string.IsNullOrEmpty(value + "") ? "" : value.ToString(); unionValue = unionValue.Replace("{" + columnName + "}", cellValue); var fieldParams = GetParamValue(unionValue); for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); string fieldValue = focusRow[fieldName] + ""; unionValue = unionValue.Replace(fieldParams[i], fieldValue); } DataTable dtTable = SqlHelper.ExecuteDataSet(unionValue).Tables[0]; if (dtTable.Rows.Count > 0) { DataRow row = dtTable.Rows[0]; string[] unionFieldSplit = unionFields.Split(','); for (int i = 0; i < unionFieldSplit.Count(); i++) { string fieldName = unionFieldSplit[i]; gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], row[fieldName]); } } else { string[] unionFieldSplit = unionFields.Split(','); for (int i = 0; i < unionFieldSplit.Count(); i++) { string fieldName = unionFieldSplit[i]; gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], null); } } } } private void gridView1_CustomColumnDisplayTextEventHandler(object sender, CustomColumnDisplayTextEventArgs e) { if (e.Column.ColumnEdit is RepositoryItemButtonEdit) { RepositoryItemButtonEdit colEdit = e.Column.ColumnEdit as RepositoryItemButtonEdit; if (colEdit.Tag+"" == "13") { string lValue = e.Value+""; if (lValue.Trim() != "") { string disp = ""; string[] lst = lValue.Split(','); Dictionary ldic = lookupDatas[e.Column.FieldName]; foreach (string item in lst) { if (ldic.ContainsKey(item)) disp += ldic[item] + ","; else disp += item + ","; } e.DisplayText = disp.TrimEnd(','); } } } } private void gridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e) { GridSummaryItem gi = e.Item as GridSummaryItem; if (e.SummaryProcess == CustomSummaryProcess.Start) { customSum = 0; dicSum.Clear(); } BandedGridColumn gcol = gridView1.Columns[gi.FieldName]; MyTagModel calcTag = gcol.Tag as MyTagModel; string calcStr = ""; if (gcol.Tag != null) { calcStr = (calcTag.calcExpr + "").Trim(); } if (e.SummaryProcess == CustomSummaryProcess.Calculate) { if (calcStr != "") { try { List listParam = GetParamValue(calcStr); foreach (string str in listParam) { string filed = str.Replace("{", "").Replace("}", ""); BandedGridColumn tmpgcol = gridView1.Columns[filed]; string filedValue = gridView1.GetRowCellValue(e.RowHandle, tmpgcol).ToString(); if (string.IsNullOrEmpty(filedValue)) filedValue = "0"; if (dicSum.ContainsKey(filed)) { dicSum[filed] += Math.Round(double.Parse(filedValue), 2, MidpointRounding.AwayFromZero); } else { dicSum.Add(filed, Math.Round(double.Parse(filedValue), 2, MidpointRounding.AwayFromZero)); } } } catch (Exception ex) { //MessageBox.Show("计算公式定义错误:" + calcSource + " >> " + calcExpr + "\n" + ex.Message); } } } if (e.SummaryProcess == CustomSummaryProcess.Finalize) { if (dicSum.Count>0) try { List listParam = GetParamValue(calcStr); foreach (string str in listParam) { string filed = str.Replace("{", "").Replace("}", ""); string filedValue = dicSum[filed].ToString(); if (string.IsNullOrEmpty(filedValue)) filedValue = "0"; calcStr = calcStr.Replace(str, filedValue + ""); } calcStr = calcStr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|"); string result = Evaluator.Eval(calcStr).ToString(); int idataDec = 2; customSum += Math.Round(double.Parse(result), idataDec, MidpointRounding.AwayFromZero); } catch (Exception ex) { //MessageBox.Show("计算公式定义错误:" + calcSource + " >> " + calcExpr + "\n" + ex.Message); } e.TotalValue = customSum; } } /// /// sql转换成代码 /// public static string SqlToCode(string str) { string result = str; result = result.Replace("=", "=="); result = result.Replace("<>", "!="); result = result.Replace("and", "&&"); result = result.Replace("or", "||"); result = result.Replace(">==", ">="); result = result.Replace("<==", "<="); return result; } void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) { if (!e.Column.OptionsColumn.AllowEdit && UnAllowEditChangeColor) { System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml("#d0d0d0"); e.Appearance.BackColor = color1; } if (e.RowHandle >= 0) { DataRow row = this.gridView.GetDataRow(e.RowHandle); if (row == null) return; //颜色集合 DataTable dt = RowColorCondtion as DataTable; if (dt == null) return; //选择列 string cond = string.Empty; string color = string.Empty; string forecolor = string.Empty; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { List condition = GetParamValue(dr["condition"].ToString()); cond = dr["condition"].ToString(); foreach (string item in condition) { string filedName = item.Replace("{", "").Replace("}", ""); cond = cond.Replace(item, row[filedName].ToString()); } cond = SqlToCode(cond); color = dr["backcolor"] + ""; forecolor = dr["forcecolor"].ToString() + ""; string obj = Evaluator.Eval(cond) + ""; if (obj.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1) { if (!string.IsNullOrEmpty(color)) { System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml(color); e.Appearance.BackColor = color1; } if (!string.IsNullOrEmpty(forecolor)) { System.Drawing.Color foreColor = System.Drawing.ColorTranslator.FromHtml(forecolor); e.Appearance.ForeColor = foreColor; } FontStyle fst = new FontStyle(); if (dr["ifBold"].ToString() == "1") { fst = fst | FontStyle.Bold; } if (dr["ifItalic"].ToString() == "1") { fst = fst | FontStyle.Italic; } if (dr["ifStrickOut"].ToString() == "1") { fst = fst | FontStyle.Strikeout; } if (dr["ifUnderLine"].ToString() == "1") { fst = fst | FontStyle.Underline; } e.Appearance.Font = new Font(e.Appearance.Font, fst); } } } } } private void gridView1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (sender != null && e != null) { if (e.KeyCode == Keys.Return) { if (gridView1.FocusedColumn.VisibleIndex == gridView1.Columns.Count - 1) { gridView1.FocusedRowHandle = gridView1.FocusedRowHandle + 1; gridView1.FocusedColumn = gridView1.Columns[0]; } else { gridView1.FocusedColumn = gridView1.Columns[gridView1.FocusedColumn.VisibleIndex+1]; } } if (e.Control & e.KeyCode == Keys.C) { DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells(); if (selecells.Length == 1) { object obj = gridView1.GetFocusedRowCellValue(gridView1.FocusedColumn); if (obj != null) { Clipboard.SetDataObject(obj + ""); e.Handled = true; } } else { gridView1.CopyToClipboard(); e.Handled = true; } } if (e.Modifiers.CompareTo(Keys.Control) == 0 && e.KeyCode == Keys.V) { isCancel = true; e.Handled = true; object _objData = null; IDataObject dataObj = Clipboard.GetDataObject(); if (dataObj.GetDataPresent(DataFormats.Text)) _objData = dataObj.GetData(DataFormats.Text); if (_objData != null) { string _tempStr = _objData.ToString(); int _rowNumber = 1; int _pasteRowCount = 1; string[] _split = { "\r\n" }; string[] _arrayRowStr = _tempStr.Split(_split, StringSplitOptions.None); if (_arrayRowStr.Length < 1) return; DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells(); _rowNumber = selecells[0].RowHandle; if (_arrayRowStr.Length != gridView.SelectedRowsCount) { //选择区域与粘贴行数不匹配 } _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; if (_arrayStr2.Length == 0) _arrayStr2[0] = _arrayRowStr[i]; int _colNumber = selecells[0].Column.VisibleIndex; for (int j = 0; j < _arrayStr2.Length; j++) { //MessageBox.Show(_arrayStr2[j]); if (gridView.Columns[_colNumber].OptionsColumn.AllowEdit) gridView.SetRowCellValue(_rowNumber, gridView.Columns[_colNumber], _arrayStr2[j]); _colNumber += 1; } _rowNumber += 1; } e.Handled = true; } } if (e.Control & e.Shift & e.KeyCode == Keys.C) { if ((gridView.OptionsBehavior.Editable == true)&&(AddCopyRows==true)) { DataTable dt = gridView.GridControl.DataSource as DataTable; clipTable.Rows.Clear(); clipTable = dt.Clone(); foreach (int hnd in gridView.GetSelectedRows()) { object[] obj = gridView.GetDataRow(hnd).ItemArray; clipTable.LoadDataRow(obj, true); } if (clipTable.Rows.Count > 0) { DialogResult dlg = MessageBox.Show("是否复制新增选中的行", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question); //DataTable dt = gridView.GridControl.DataSource as DataTable; foreach (DataRow dr in clipTable.Rows) { DataRow drnew = dt.NewRow(); object[] obj = dr.ItemArray; //drnew.ItemArray = obj; for (int i = 0; i < clipTable.Columns.Count;i++ ) { if (!clipTable.Columns[i].ColumnName.ToLower().Equals(ColumnPrefix+"id",StringComparison.OrdinalIgnoreCase)) drnew[i] = dr[i] ; } dt.Rows.Add(drnew); //dt.LoadDataRow(obj, true); } } } e.Handled = true; } if ((e.KeyCode == Keys.F6)||(e.KeyCode==Keys.F7)) { BandedGridColumn gc = gridView.FocusedColumn as BandedGridColumn; if ((gc != null)&&(gridView.RowCount>0)&&(gc.OptionsColumn.AllowEdit==true)&&(gridView.OptionsBehavior.Editable==true)) { DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells(); if (selecells.Length == 1) { if (gridView.FocusedRowHandle < gridView.RowCount) { DialogResult dlr = MessageBox.Show("是否替换本列下所有数据为当前单元格数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dlr == DialogResult.Yes) { object obj = gridView.GetFocusedRowCellValue(gc); if (obj != null) { for (int i = gridView.FocusedRowHandle; i <= gridView.RowCount; i++) { object obj1 = gridView.GetRowCellValue(i, gc); if (e.KeyCode==Keys.F6) { if ((obj1==null)||(obj1.ToString()=="0")||(obj1.ToString()=="")) gridView.SetRowCellValue(i, gc, obj); } else gridView.SetRowCellValue(i, gc, obj); } e.Handled = true; } } } } else { e.Handled = true; } } } if ((e.KeyCode == Keys.F8) ) { BandedGridColumn gc = gridView.FocusedColumn as BandedGridColumn; if ((gc != null) && (gridView.RowCount > 0) && (gc.OptionsColumn.AllowEdit == true) && (gridView.OptionsBehavior.Editable == true)) { DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells(); if (selecells.Length == 1) { if (gridView.FocusedRowHandle < gridView.RowCount) { DialogResult dlr = MessageBox.Show("是否按顺序生成本列数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dlr == DialogResult.Yes) { object obj = gridView.GetFocusedRowCellValue(gc); int lint = 0; int ilen = 0; if ((obj != null) && (Int32.TryParse(obj+"", out lint))) { ilen = obj.ToString().Length; for (int i = gridView.FocusedRowHandle; i <= gridView.RowCount; i++) { string istr = lint.ToString().PadLeft(ilen, '0'); gridView.SetRowCellValue(i, gc, istr); lint++; } e.Handled = true; } } } } else { e.Handled = true; } } } } } private DefaultBoolean GetMergeFlag(DataRow row) { if (!row.Table.Columns.Contains("ifMerge")) return DefaultBoolean.False; return (row["ifMerge"] + "" == "1") ? DefaultBoolean.True : DefaultBoolean.False; } /// /// 基础数据 /// /// public void SetColumns2(DataTable dt) { dtColumns = dt; gridView.Columns.Clear(); gridView.Bands.Clear(); List dtBands = dt.Rows.Cast().Where(x=> !string.IsNullOrEmpty(x["bandFields"]+"")).ToList(); GridBand gridBandEmpty = new GridBand(); string bandFields = string.Empty; // 添加Band 列 foreach (DataRow item in dtBands) { GridBand gridBand = new GridBand(); 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; gridView.Bands.AddRange(new GridBand[] { gridBand }); bandFields += "|" + item["bandFields"]; } bandFields = ("|" + bandFields + "|").Replace("||", "|"); // 检查是否包含空白列 List dtEmptyBands = dt.Rows.Cast().Where(x => !bandFields.Contains("|" + x["fieldname"] + "|")).ToList(); if (dtEmptyBands != null && dtEmptyBands.Count > 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; gridView.Bands.Insert(0, gridBandEmpty); } for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; BandedGridColumn gridColumn = new BandedGridColumn(); // 添加要放在设置gridcolumn宽度之前,不然... string bandTitle = hasBand(row["fieldname"] + "", dtBands); if (!string.IsNullOrEmpty(bandTitle)) { GridBand gridBand = gridView.Bands.Cast().FirstOrDefault(x => x.Caption == bandTitle); if (gridBand != null) { gridBand.Columns.Add(gridColumn); } gridView.Columns.Add(gridColumn); } else { // 未绑定多表头则直接显示 gridBandEmpty.Columns.Add(gridColumn); gridView.Columns.Add(gridColumn); } gridColumn.OptionsColumn.AllowMerge = GetMergeFlag(row); if (gridColumn.OptionsColumn.AllowMerge == DefaultBoolean.True) gridView.OptionsView.AllowCellMerge = true; gridColumn.FieldName = row["fieldname"].ToString(); gridColumn.Name = row["fieldname"].ToString(); gridColumn.VisibleIndex = i; gridColumn.Caption = row["username1"].ToString(); gridColumn.Width = Convert.ToInt32(row["width"]); gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList; gridColumn.Visible = true; //(Convert.ToInt32(row["width"]) > 0); int sqltag = Convert.ToInt32(row["fieldsqlTag"]); string unionFields = row["unionFields"] + ""; string unionValue = row["unionValue"] + ""; gridColumn.OptionsColumn.AllowEdit = Convert.ToInt32(row["edit"]) != 1; int fieldsqlTag = Convert.ToInt32(row["fieldsqlTag"]); gridColumn.Tag = new MyTagModel() { DefaultValue = row["defaultdate"].ToString(), Tag = gridColumn.Tag, calcExpr = row["calcExpr"].ToString(), unionFields = unionFields, unionValue = unionValue, lookupSql = row["fieldsql"] + "", lookupKey = row["fieldsqlid"] + "", lookupValue = row["fieldsqlname"] + "", fieldTypeId = fieldsqlTag }; int fieldTypeId = Convert.ToInt32(row["fieldsqlTag"]); string lookupSql = row["fieldsql"] + ""; string lookupKeyField = row["fieldsqlid"] + ""; string lookupResult = row["fieldsqlname"] + ""; string fieldName = row["fieldName"] + ""; string dataFormat = row["DataFormat"] + ""; CommonUtils.DataFormat(gridColumn, dataFormat, fieldsqlTag); DataColumn dc = dt.Columns["Accuracy"]; if (dc != null) { string Accuracy = dt.Rows[i]["Accuracy"] + ""; if (!string.IsNullOrEmpty(Accuracy) && Accuracy != "0") { gridColumn.DisplayFormat.FormatType = FormatType.Numeric; gridColumn.DisplayFormat.FormatString = "F2"; } } DataColumn dcIsSum = dt.Columns["isSum"]; if (dcIsSum != null) { if (!String.IsNullOrEmpty(row["isSum"] + "")) { int isSum = Convert.ToInt32(row["isSum"]); //处理统计 if (isSum == 1) { gridView.OptionsView.ShowFooter = true; if ((row["calcExpr"] + "").IndexOf("/{") == -1) { gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0:" + dataFormat + "}") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") }); } else { gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") }); } } } } } if (gridView.Columns.Count > 0) { GridColumn firstColumn = gridView.Columns[0]; if (firstColumn != null) { gridView.OptionsView.ShowFooter = true; firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") }); } } } /// /// 是否包含分组列 /// /// /// /// private string hasBand(string fieldName,List dtBands) { //return string.Empty; foreach (DataRow item in dtBands) { string bandFields = item["bandFields"] + ""; string bandTitle = item["bandTitle"] + ""; if (("|" + bandFields + "|").Contains("|" + fieldName + "|")) { return bandTitle; } } return string.Empty; } public DataTable SetColumns3(string sql) { gridView.Columns.Clear(); DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0]; dtColumns = dt; dt = ResetColumns(dt); for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; BandedGridColumn BandedGridColumn = new BandedGridColumn(); BandedGridColumn.OptionsColumn.AllowMerge = GetMergeFlag(row); if (BandedGridColumn.OptionsColumn.AllowMerge == DefaultBoolean.True) gridView.OptionsView.AllowCellMerge = true; BandedGridColumn.FieldName = row["fieldname"].ToString(); BandedGridColumn.Name = row["fieldname"].ToString(); BandedGridColumn.VisibleIndex = i; BandedGridColumn.Caption = row["userName"].ToString(); BandedGridColumn.Width = Convert.ToInt32(row["width"]); BandedGridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList; BandedGridColumn.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; BandedGridColumn.Visible = true; BandedGridColumn.Visible = ((Convert.ToInt32(row["width"]) > 0)); string dataFormat = row["DataFormat"] + ""; object obj = dt.Columns["isedited"]; if (obj != null && Convert.ToInt32(row["isedited"]) == 1) { BandedGridColumn.OptionsColumn.AllowEdit = false; BandedGridColumn.OptionsColumn.ReadOnly = true; } int isSum = Convert.ToInt32(row["isSum"]); //处理统计 if (isSum == 1) { gridView.OptionsView.ShowFooter = true; //BandedGridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0}") }); //gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "") }); if ((row["calcExpr"] + "").IndexOf("/{") == -1) { BandedGridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0:" + dataFormat + "}") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") }); } else { BandedGridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") }); } } gridView.Columns.Add(BandedGridColumn); int fieldTypeId = Convert.ToInt32(row["fieldTypeId"]); string lookupSql = row["lookupSql"] + ""; string lookupKeyField = row["lookupKeyField"] + ""; string lookupResult = row["lookupResult"] + ""; string fieldName = row["fieldName"] + ""; string unionFields = row["unionFields"] + ""; string unionValue = row["unionValue"] + ""; //if (fieldTypeId == 1 || fieldTypeId == 5 || fieldTypeId == 15) //{ // GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, BandedGridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue); //} //if (fieldTypeId == 2 || fieldTypeId == 6 || fieldTypeId == 16) //{ // GetLookUpEdit(lookupSql, lookupResult, lookupKeyField, fieldName, BandedGridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue); //} if (fieldTypeId == 1) { GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, BandedGridColumn, fieldTypeId, gridControl); } if ((fieldTypeId == 2) || (fieldTypeId == 23)) { GetComboBox(lookupSql, lookupKeyField, lookupResult, fieldName, BandedGridColumn, fieldTypeId); } if (fieldTypeId == 5 || fieldTypeId == 15) { GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, BandedGridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue); } if (fieldTypeId == 6 || fieldTypeId == 16) { GetLookUpEdit(lookupSql, lookupResult, lookupKeyField, fieldName, BandedGridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue); } if (fieldTypeId == 96) { GetProgressBar(BandedGridColumn); } if (fieldTypeId == 17) { GetCheckColumn(BandedGridColumn); } if (fieldTypeId == 18 || fieldTypeId == 19) { GetCheckComboColumn(lookupSql, lookupKeyField, lookupResult, fieldName, BandedGridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue); } // 日期时间控件 if (fieldTypeId == 4 || fieldTypeId == 44 || fieldTypeId == 444) { CreateDateTime(BandedGridColumn, fieldTypeId); } if (fieldTypeId == 4444 || fieldTypeId == 4444) { CreateTime(BandedGridColumn, fieldTypeId); } if (fieldTypeId == 13 || fieldTypeId == 14) { CreateButtonEdit2(BandedGridColumn, row); } //QQ和网址 if (fieldTypeId == 10) { GetHyperLink(BandedGridColumn); BandedGridColumn.Tag = "www"; } if (fieldTypeId == 11) { BandedGridColumn.Tag = "qq"; } //备注框自动换行 if (fieldTypeId == 9) { GetMemoEdit(BandedGridColumn, gridControl); } BandedGridColumn.Tag = new MyTagModel() { DefaultValue = row["DefaultValue"].ToString(), Tag = BandedGridColumn.Tag, calcExpr = row["calcExpr"].ToString(), unionFields = unionFields, unionValue = unionValue, lookupSql = lookupSql,lookupKey=lookupKeyField,lookupValue=lookupResult,fieldTypeId=fieldTypeId }; CommonUtils.DataFormat(BandedGridColumn, row["DataFormat"] + "", fieldTypeId); } if (gridView.Columns.Count > 0) { BandedGridColumn firstColumn = gridView.Columns[0]; if (firstColumn != null) { gridView.OptionsView.ShowFooter = true; firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") }); } } return dt; } private void CreateButtonEdit2(BandedGridColumn BandedGridColumn, DataRow row) { FrmMain frmMain = new FrmMain(); String SQL = row["lookupSql"].ToString(); SQL = GetDefaultValue(SQL, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); Dictionary Columns = new Dictionary(); Columns.Add(row["lookupKeyField"].ToString(), "编码"); Columns.Add(row["lookupResult"].ToString(), "名称"); if (SQL.IndexOf("Remark", StringComparison.OrdinalIgnoreCase) != -1) Columns.Add("Remark", "备注"); frmMain.IsMultiple = true; frmMain.Columns = Columns; int fieldsqlTag = Convert.ToInt32(row["fieldTypeId"]); frmMain.ValueField = row["lookupKeyField"] + ""; frmMain.TextField = row["lookupResult"] + ""; frmMain.IsText = fieldsqlTag; frmMain.sourceSQL = SQL; frmMain.SQL = SQL; string tmpsql = SQL; tmpsql = Regex.Replace(SQL, "#[^##]+#", " 1=1 "); DataTable dtb = SqlHelper.ExecuteDataSet(tmpsql).Tables[0]; Dictionary lookupDt = new Dictionary(); foreach (DataRow item in dtb.Rows) { lookupDt.Add(item[frmMain.ValueField] + "", item[frmMain.TextField] + ""); } lookupDatas.Add(BandedGridColumn.FieldName, lookupDt); RepositoryItemButtonEdit btnEdit = new RepositoryItemButtonEdit(); btnEdit.AutoHeight = false; btnEdit.Buttons[0].Tag = frmMain; btnEdit.Name = "btnEdit"; btnEdit.Tag = fieldsqlTag; //btnEdit.Tag = SQL; btnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.btnEdit_ButtonClick); gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { btnEdit }); BandedGridColumn.ColumnEdit = btnEdit; } private void CreateDateTime(BandedGridColumn BandedGridColumn, int fieldsqlTag) { RepositoryItemDateEdit dateEdit = new RepositoryItemDateEdit(); dateEdit.DisplayFormat.FormatString = dateEdit.EditFormat.FormatString = dateEdit.Mask.EditMask = DateFormatType.GetFormatValue(fieldsqlTag); dateEdit.DisplayFormat.FormatType = dateEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; dateEdit.Closed += new ClosedEventHandler(dateEdit_Closed); gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { dateEdit }); BandedGridColumn.ColumnEdit = dateEdit; } private void CreateTime(BandedGridColumn BandedGridColumn, int fieldsqlTag) { RepositoryItemTimeEdit timeEdit = new RepositoryItemTimeEdit(); timeEdit.DisplayFormat.FormatString = timeEdit.EditFormat.FormatString = timeEdit.Mask.EditMask = DateFormatType.GetFormatValue(fieldsqlTag); timeEdit.DisplayFormat.FormatType = timeEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { timeEdit }); BandedGridColumn.ColumnEdit = timeEdit; } private void dateEdit_Closed(object sender, ClosedEventArgs e) { if (sender is DateEdit) { DateEdit dateEdit = (sender as DateEdit); string dateFormatType = dateEdit.Properties.DisplayFormat.FormatString; if (!string.IsNullOrEmpty(dateEdit.SelectedText)) { dateEdit.EditValue = dateEdit.DateTime.ToString(dateFormatType); } } } #region 智能搜索框事件处理 /// /// 取指定组件值 /// /// /// public static string GetControlText(Control control) { if (control == null) return ""; if (control.Tag == null) { return control.Text; } ControlModelTag cmTag = control.Tag as ControlModelTag; if (cmTag.fieldTypeId == ControlType.LabAutoSeacherText) { return control.Text; } else if ((cmTag.fieldTypeId == ControlType.LabAutoSeacherValue) || (cmTag.fieldTypeId == ControlType.LabComboxValueParam)) { AutoSearcher te = control as AutoSearcher; return te.ReturnValue.ToString(); } else if (cmTag.fieldTypeId == ControlType.LabMultiSelectValue) { LabelLookUp lookup = control as LabelLookUp; return lookup.ReturnValue; } else if (cmTag.fieldTypeId == ControlType.LabComboxValue) { LabelComboxEx Cb = control as LabelComboxEx; return Cb.getComboBox.SelectedValue + ""; } else if (cmTag.fieldTypeId == ControlType.LabComboxText) { LabelComboxEx Cb = control as LabelComboxEx; return Cb.getComboBox.Text; } else if (cmTag.fieldTypeId == ControlType.LabDate || cmTag.fieldTypeId == ControlType.LabDateTime || cmTag.fieldTypeId == ControlType.LabDateTimeShort || cmTag.fieldTypeId == ControlType.LabTime || cmTag.fieldTypeId == ControlType.LabShortTime) { LabelDateEx Cb = control as LabelDateEx; return Cb.GetDateTimePicker.Value.ToString("yyyy-MM-dd HH:mm:ss"); } else if (cmTag.fieldTypeId == ControlType.LabTextInt) { if ((control.Text.Trim() == "")) return "0"; else return control.Text; } else { if (cmTag.fieldTypeId != 99) { return control.Text; } } return "0"; } /// /// 动态加载数据源 /// /// /// private void lookUp_QueryPopUp(object sender, CancelEventArgs e) { if (sender is SearchLookUpEdit) { var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle); if (true) { SearchLookUpEdit edit = (sender as SearchLookUpEdit); LookUpTag lookUpTag = edit.Properties.Tag as LookUpTag; if (lookUpTag != null && !string.IsNullOrEmpty(lookUpTag.Sql)) { string sqlValue = lookUpTag.Sql.Replace("#", "").Replace("#", ""); var fieldParams = GetParamValue(sqlValue); //从单据头取值 if (pnlMain != null) { for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); Control[] ctl = pnlMain.Controls.Find("txt_" + fieldName, true); if ((ctl != null) && (ctl.Length > 0)) { string fieldValue = GetControlText(ctl[0]); sqlValue = sqlValue.Replace(fieldParams[i], fieldValue); } } } //从选中行取值 if (focusRow != null) { fieldParams = GetParamValue(sqlValue); for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); string fieldValue = focusRow[fieldName] + ""; sqlValue = sqlValue.Replace(fieldParams[i], fieldValue); } } DataTable dtTable = SqlHelper.ExecuteDataSet(sqlValue).Tables[0]; edit.Properties.DataSource = dtTable; } } } } /// /// 关联搜索 /// /// /// private void lookUp_EditValueChanged(object sender, EventArgs e) { return; if (sender is SearchLookUpEdit) { SearchLookUpEdit edit = (sender as SearchLookUpEdit); LookUpTag lookUpTag = edit.Properties.Tag as LookUpTag; var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle); if (focusRow != null && lookUpTag != null) { string columnName = lookUpTag.ColumnName; string unionFields = lookUpTag.unionFields; string unionValue = lookUpTag.unionValue; string valueMember = lookUpTag.ValueMember; string displayMember = lookUpTag.DisplayMember; unionValue = ReqSqlParam(unionValue, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); string cellValue = string.IsNullOrEmpty(edit.EditValue + "") ? "" : edit.EditValue.ToString(); unionValue = unionValue.Replace("{" + columnName + "}", cellValue); var fieldParams = GetParamValue(unionValue); for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); string fieldValue = focusRow[fieldName] + ""; unionValue = unionValue.Replace(fieldParams[i], fieldValue); } DataTable dtTable = SqlHelper.ExecuteDataSet(unionValue).Tables[0]; if (dtTable.Rows.Count > 0) { DataRow row = dtTable.Rows[0]; string[] unionFieldSplit = unionFields.Split(','); for (int i = 0; i < unionFieldSplit.Count(); i++) { string fieldName = unionFieldSplit[i]; gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], row[fieldName]); } } else { string[] unionFieldSplit = unionFields.Split(','); for (int i = 0; i < unionFieldSplit.Count(); i++) { string fieldName = unionFieldSplit[i]; gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], null); } } } } } #endregion private void CreateButtonEdit(BandedGridColumn BandedGridColumn, DataRow row) { FrmMain frmMain = new FrmMain(); String SQL = row["fieldsql"].ToString(); SQL = GetDefaultValue(SQL, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); Dictionary Columns = new Dictionary(); Columns.Add(row["fieldsqlid"].ToString(), "编码"); Columns.Add(row["fieldsqlname"].ToString(), "名称"); if (SQL.IndexOf("Remark", StringComparison.OrdinalIgnoreCase) != -1) Columns.Add("Remark", "备注"); frmMain.IsMultiple = true; frmMain.Columns = Columns; int fieldsqlTag = Convert.ToInt32(row["fieldsqlTag"]); frmMain.ValueField = row["fieldsqlid"] + ""; frmMain.TextField = row["fieldsqlname"] + ""; frmMain.IsText = fieldsqlTag; frmMain.SQL = SQL; frmMain.sourceSQL = SQL; DataTable dtb = SqlHelper.ExecuteDataSet(SQL).Tables[0]; lookupTables.Add(BandedGridColumn.FieldName, dtb); Dictionary lookupDt = new Dictionary(); foreach (DataRow item in dtb.Rows) { lookupDt.Add(item[frmMain.ValueField] + "", item[frmMain.TextField] + ""); } lookupDatas.Add(BandedGridColumn.FieldName, lookupDt); RepositoryItemButtonEdit btnEdit = new RepositoryItemButtonEdit(); btnEdit.AutoHeight = false; btnEdit.Buttons[0].Tag = frmMain; btnEdit.Name = "btnEdit"; btnEdit.Tag = fieldsqlTag; btnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.btnEdit_ButtonClick); gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { btnEdit }); BandedGridColumn.ColumnEdit = btnEdit; } void btnEdit_ButtonClick(object sender, ButtonPressedEventArgs e) { ButtonEdit btnEdit = (ButtonEdit)sender; FrmMain frmMain = (FrmMain)e.Button.Tag; if (frmMain.IsText == 13) { frmMain.ReturnValue = btnEdit.Text; } else { frmMain.ReturnText = btnEdit.Text; } var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle); if (focusRow != null) { string tmpsql = frmMain.sourceSQL+""; tmpsql = tmpsql.Replace("#", "").Replace("#", ""); var fieldParams = GetParamValue(tmpsql); for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); string fieldValue = focusRow[fieldName] + ""; tmpsql = tmpsql.Replace(fieldParams[i], fieldValue); } frmMain.SQL = tmpsql; } DialogResult dr = frmMain.ShowDialog(); if (dr == DialogResult.OK) { String value = string.Empty; if (frmMain.IsText == 13) { value = frmMain.ReturnValue; } else { value = frmMain.ReturnText; } btnEdit.Text = value; } } //private void GetComboBox(string sql, string key, string value, string colum, BandedGridColumn gc, int fieldsqlTag) { // RepositoryItemComboBox combobox = new RepositoryItemComboBox(); // sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); // DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0]; // foreach (DataRow item in dt.Rows) // combobox.Items.Add(item[value]); // gc.ColumnEdit = combobox; //} #region 获取参数 public static List GetParamValue(string param) { string SqlParamRegex = "{([^{])+}"; List list = new List(); Regex regex = new Regex(SqlParamRegex); MatchCollection mcs = regex.Matches(param); foreach (Match item in mcs) { list.Add(item.Value); } return list; } #endregion /// /// 获取默认值 /// /// /// public static string GetDefaultValue(string defaultValue, string LoginId, string LoginName) { string result = defaultValue; if (defaultValue.IndexOf("loginid", StringComparison.OrdinalIgnoreCase) != -1) { List list = GetParamValue(defaultValue); foreach (string s in list) { if (s.IndexOf("loginid",StringComparison.OrdinalIgnoreCase)!=-1) result = result.Replace(s, LoginId); } } if (defaultValue.IndexOf("loginname", StringComparison.OrdinalIgnoreCase) != -1) { List list = GetParamValue(defaultValue); foreach (string s in list) { if (s.IndexOf("loginname", StringComparison.OrdinalIgnoreCase) != -1) result = result.Replace(s, LoginName); } } if (result.IndexOf('@') != -1) { object obj = SqlHelper.ExecuteScalar(CommandType.Text, result.Replace("@", "")); if (obj != null) { result = obj.ToString(); } } if (result == "guid") { result = Guid.NewGuid().ToString(); } ////代表传入其他参数格式{#p_1},{#p_2}.. //if (defaultValue.IndexOf("#p_", StringComparison.OrdinalIgnoreCase) != -1) //{ // List list = PubClass.GetParamValue(defaultValue); // foreach (string s in list) // { // string idx = s.Replace("{#p_", "").Replace("}", ""); // int i = 0; // if (int.TryParse(idx, out i)) // { // result = result.Replace(s, otherParams[i - 1]); // } // } //} return result; } public static string ReqSqlParam(string sql, string OperatorId, string OperatorName) { string sourceSql = sql; List listParm = GetParamValue(sql); foreach (string s in listParm) { if (s.IndexOf("loginid", StringComparison.OrdinalIgnoreCase) != -1) { sourceSql = sourceSql.Replace(s, OperatorId); } if (s.IndexOf("loginname", StringComparison.OrdinalIgnoreCase) != -1) { sourceSql = sourceSql.Replace(s, OperatorName); } } return sourceSql; } private void GetComboBox(string sql, string key, string value, string colum, BandedGridColumn gc, int fieldsqlTag) { string tmpsql = sql; tmpsql = ReqSqlParam(tmpsql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); RepositoryItemComboBox combobox = new RepositoryItemComboBox(); combobox.ImmediatePopup = true; combobox.PopupSizeable = true; combobox.DropDownRows = 20; combobox.DropDownItemHeight = 20; combobox.PopupBorderStyle = PopupBorderStyles.Flat; combobox.Tag = value + "^" + tmpsql; tmpsql = Regex.Replace(tmpsql, "#[^##]+#", " 1=1 "); if (fieldsqlTag != 23) { DataTable dt = SqlHelper.ExecuteDataSet(tmpsql).Tables[0]; foreach (DataRow item in dt.Rows) combobox.Items.Add(item[value]); } combobox.NullText = ""; //combobox.ButtonClick += new ButtonPressedEventHandler(comboButtonClick); if (fieldsqlTag==23) combobox.QueryPopUp += new CancelEventHandler(comboQueryPopup); gc.ColumnEdit = combobox; } private void comboQueryPopup(object sender, CancelEventArgs e) { //MessageBox.Show(sender.ToString()); if (sender is ComboBoxEdit) { var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle); if (focusRow != null) { ComboBoxEdit edit = (sender as ComboBoxEdit); string tmpsql = edit.Properties.Tag.ToString(); if (!string.IsNullOrEmpty(tmpsql)) { string listValue = tmpsql.Substring(0, tmpsql.IndexOf("^")); string sqlValue = tmpsql.Replace("#", "").Replace("#", ""); sqlValue = sqlValue.Substring(sqlValue.IndexOf("^") + 1); var fieldParams = GetParamValue(sqlValue); //从单据头取值 if (pnlMain != null) { for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); Control[] ctl = pnlMain.Controls.Find("txt_" + fieldName, true); if ((ctl != null) && (ctl.Length > 0)) { string fieldValue = GetControlText(ctl[0]); sqlValue = sqlValue.Replace(fieldParams[i], fieldValue); } } } //从选中行取值 fieldParams = GetParamValue(sqlValue); for (int i = 0; i < fieldParams.Count; i++) { string fieldName = fieldParams[i].Replace("{", "").Replace("}", ""); string fieldValue = focusRow[fieldName] + ""; sqlValue = sqlValue.Replace(fieldParams[i], fieldValue); } edit.Properties.Items.Clear(); //MessageBox.Show(listValue + "________" + sqlValue); DataTable dtTable = SqlHelper.ExecuteDataSet(sqlValue).Tables[0]; foreach (DataRow item in dtTable.Rows) edit.Properties.Items.Add(item[listValue]); } } } } private static void LookUpEdit_ProcessNewValue(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e) { DataRow Row; RepositoryItemLookUpEdit Edit; Edit = ((LookUpEdit)sender).Properties; if (e.DisplayValue == null || Edit.NullText.Equals(e.DisplayValue) || string.Empty.Equals(e.DisplayValue)) return; DataTable LookupTable = Edit.DataSource as DataTable; Row = LookupTable.NewRow(); Row[Edit.DisplayMember] = e.DisplayValue; LookupTable.Rows.Add(Row); e.Handled = true; } private static void LookSearchUpEdit_ProcessNewValue(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e) { DataRow Row; RepositoryItemSearchLookUpEdit Edit; Edit = ((SearchLookUpEdit)sender).Properties; if (e.DisplayValue == null || Edit.NullText.Equals(e.DisplayValue) || string.Empty.Equals(e.DisplayValue)) return; DataTable LookupTable = Edit.DataSource as DataTable; Row = LookupTable.NewRow(); Row[Edit.DisplayMember] = e.DisplayValue; LookupTable.Rows.Add(Row); e.Handled = true; } private static void GetMemoEdit(BandedGridColumn gc, GridControl gg) { RepositoryItemMemoEdit memo = new RepositoryItemMemoEdit(); memo.WordWrap = true; gg.RepositoryItems.Add(memo); gc.ColumnEdit = memo; } private void GetLookUpEdit(string sql, string key, string value, string colum, BandedGridColumn gc, int fieldsqlTag, GridControl gg) { RepositoryItemLookUpEdit combobox = new RepositoryItemLookUpEdit(); //combobox.ProcessNewValue += LookUpEdit_ProcessNewValue; combobox.SearchMode = SearchMode.AutoFilter; combobox.ImmediatePopup = false; combobox.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; string tmpsql = sql; tmpsql = ReqSqlParam(tmpsql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); combobox.DataSource = SqlHelper.ExecuteDataSet(tmpsql).Tables[0]; lookupTables.Add(colum, combobox.DataSource as DataTable); combobox.DisplayMember = value; combobox.ValueMember = key; LookUpColumnInfo ci = new LookUpColumnInfo(); ci.Caption = "编号"; ci.FieldName = key; ci.Visible = false; combobox.Columns.Add(ci); LookUpColumnInfo ci2 = new LookUpColumnInfo(); ci2.Caption = "名称"; ci2.FieldName = value; ci2.Visible = true; combobox.Columns.Add(ci2); gg.RepositoryItems.Add(combobox); if (sql.IndexOf("remark", StringComparison.OrdinalIgnoreCase) != -1) { LookUpColumnInfo ci3 = new LookUpColumnInfo(); ci3.Caption = "备注"; ci3.FieldName = "remark"; ci3.Visible = true; combobox.Columns.Add(ci3); } combobox.NullText = ""; combobox.AllowNullInput = DevExpress.Utils.DefaultBoolean.False; gc.ColumnEdit = combobox; } private void GetHyperLink(BandedGridColumn gc) { //RepositoryItemHyperLinkEdit hypl = new RepositoryItemHyperLinkEdit(); //gc.ColumnEdit = hypl; } private void GetProgressBar(BandedGridColumn gc) { RepositoryItemProgressBar progress = new RepositoryItemProgressBar(); progress.ShowTitle = true; gc.ColumnEdit = progress; } private void GetCheckColumn(BandedGridColumn gc) { RepositoryItemCheckEdit check = new RepositoryItemCheckEdit(); check.ValueChecked = 1; check.ValueUnchecked = 0; gc.ColumnEdit = check; } private void GetCheckComboColumn(string sql, string key, string value, string colum, BandedGridColumn gc, int fieldsqlTag, string listKey, string listValue, string unionFields, string unionValue) { RepositoryItemCheckedComboBoxEdit combobox = new RepositoryItemCheckedComboBoxEdit(); sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); combobox.AllowFocused = true; //if ((fieldsqlTag == 15 || fieldsqlTag == 16) && sql.Contains("#")) //{ // combobox.Tag = new LookUpTag() { Sql = sql, ValueMember = key, DisplayMember = listValue }; // combobox.QueryPopUp += new CancelEventHandler(lookUp_QueryPopUp); // sql = Regex.Replace(sql, "#[^##]+#", " 1=1 "); //} DataTable dtTable = SqlHelper.ExecuteDataSet(sql).Tables[0]; lookupTables.Add(colum, dtTable); combobox.DataSource = dtTable; combobox.DisplayMember = listValue; if (fieldsqlTag == 18) { combobox.ValueMember = key; } else { combobox.ValueMember = listValue; } if (!string.IsNullOrEmpty(unionFields) && !string.IsNullOrEmpty(unionValue)) { //combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue }; LookUpTag lut = combobox.Tag as LookUpTag; if (lut == null) combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue }; else { lut.ColumnName = colum; lut.ValueMember = key; lut.DisplayMember = listValue; lut.unionFields = unionFields; lut.unionValue = unionValue; } combobox.EditValueChanged += new EventHandler(lookUp_EditValueChanged); } combobox.NullText = ""; gridMain.RepositoryItems.Add(combobox); gc.ColumnEdit = combobox; } private void GetLookUpEdit(string sql, string key, string value, string colum, BandedGridColumn gc, int fieldsqlTag, string listKey, string listValue, string unionFields, string unionValue) { sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName); RepositoryItemSearchLookUpEdit combobox = new RepositoryItemSearchLookUpEdit(); //combobox.ShowAddNewButton = true; //combobox.Buttons[2].Caption = "新增"; combobox.AllowFocused = true; int allWidth = 0; if ((fieldsqlTag == 15 || fieldsqlTag == 16) && sql.Contains("#")) { combobox.Tag = new LookUpTag() { Sql = sql, ValueMember = key, DisplayMember = listValue }; combobox.QueryPopUp += new CancelEventHandler(lookUp_QueryPopUp); sql = Regex.Replace(sql, "#[^##]+#", " 1=1 "); } DataTable dtTable = SqlHelper.ExecuteDataSet(sql).Tables[0]; lookupTables.Add(colum, dtTable); combobox.DataSource = dtTable; combobox.DisplayMember = listValue; combobox.ValueMember = key; //if (listValue.ToLower() != key.ToLower()) //{ // BandedGridColumn ci = new BandedGridColumn(); // ci.Caption = "编号"; // ci.FieldName = listKey; // allWidth += ci.Width = CalcMaxColumnWidth(dtTable, listKey); // ci.Visible = true; // combobox.View.Columns.Add(ci); //} //BandedGridColumn ci2 = new BandedGridColumn(); //ci2.Caption = "名称"; //ci2.FieldName = listValue; //ci2.Visible = true; //allWidth += ci2.Width = CalcMaxColumnWidth(dtTable, listValue); ////ci2.Width = -1; //combobox.View.Columns.Add(ci2); //if (sql.IndexOf("remark", StringComparison.OrdinalIgnoreCase) != -1) //{ // BandedGridColumn ci3 = new BandedGridColumn(); // ci3.Caption = "备注"; // ci3.FieldName = "remark"; // ci3.Visible = true; // allWidth += ci3.Width = CalcMaxColumnWidth(dtTable, "remark"); // combobox.View.Columns.Add(ci3); // //combobox.BestFitMode = BestFitMode.BestFit; // 3列的时候自动计算宽度,否则自动填充满表格 // combobox.View.OptionsView.ColumnAutoWidth = false; //} //else //{ // combobox.BestFitMode = BestFitMode.BestFitResizePopup; //} combobox.View.OptionsView.ShowIndicator = false; combobox.View.OptionsView.ColumnAutoWidth = false; //combobox.View.OptionsView.ShowColumnHeaders = false; combobox.View.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; combobox.PopupBorderStyle = PopupBorderStyles.Flat; combobox.ShowPopupShadow = true; combobox.AllowNullInput = DevExpress.Utils.DefaultBoolean.False; //combobox.PopupFormSize = new Size(allWidth, 250); combobox.ShowFooter = false; // 是否显示底部 if (!string.IsNullOrEmpty(unionFields) && !string.IsNullOrEmpty(unionValue)) { //combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue }; LookUpTag lut = combobox.Tag as LookUpTag; if (lut == null) combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue }; else { lut.ColumnName = colum; lut.ValueMember = key; lut.DisplayMember = listValue; lut.unionFields = unionFields; lut.unionValue = unionValue; } combobox.EditValueChanged += new EventHandler(lookUp_EditValueChanged); //combobox.Validating += new CancelEventHandler(lookUp_EditValidating); } //if (listValue.ToLower() == key.ToLower()) //{ // combobox.View.Columns[1].Visible = false; // combobox.View.Columns[0].Width = 1; // MessageBox.Show("OK"); //} allWidth = 0; foreach (DataColumn col in dtTable.Columns) { //MessageBox.Show(col.ColumnName); BandedGridColumn ci = new BandedGridColumn(); ci.FieldName = col.ColumnName; if (ci.FieldName.ToLower() == "dm" || ci.FieldName.ToLower() == "showid") ci.Caption = "编码"; if (ci.FieldName.ToLower() == "mc" || ci.FieldName.ToLower() == "showname") ci.Caption = "名称"; if (ci.FieldName.ToLower() == "remark") ci.Caption = "备注"; //ci.Width = -1; //MessageBox.Show(ci.FieldName.Substring(0, 1)); if (ci.FieldName.Substring(0, 1) == "_") ci.Visible = false; else { ci.Visible = true; allWidth += ci.Width = CalcMaxColumnWidth(dtTable, ci.FieldName) + 25; } combobox.View.Columns.Add(ci); } combobox.PopupFormSize = new Size(allWidth+40, 300); //combobox.View.Columns[0].Visible = false; combobox.NullText = ""; gridMain.RepositoryItems.Add(combobox); gc.ColumnEdit = combobox; combobox.ProcessNewValue += LookSearchUpEdit_ProcessNewValue; combobox.ImmediatePopup = true; combobox.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; } public void lookUp_EditValidating(object sender, CancelEventArgs e) { //MessageBox.Show("OK"); } public void SetColumns(DataTable dt) { gridView.Columns.Clear(); for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; BandedGridColumn BandedGridColumn = new BandedGridColumn(); BandedGridColumn.FieldName = row["fieldname"].ToString(); BandedGridColumn.Name = row["fieldname"].ToString(); BandedGridColumn.VisibleIndex = i; BandedGridColumn.Caption = row["userName"].ToString(); BandedGridColumn.Width = Convert.ToInt32(row["width"]); BandedGridColumn.Visible = string.IsNullOrEmpty(row["isVisible"] + "") ? true : !Convert.ToBoolean(row["isVisible"]); string dataFormat = row["DataFormat"] + ""; BandedGridColumn.OptionsColumn.AllowEdit = false; BandedGridColumn.OptionsColumn.ReadOnly = false; BandedGridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList; CommonUtils.DataFormat(BandedGridColumn, dataFormat, 7); int isSum = Convert.ToInt32(row["isSum"]); string calcExpr = ""; if (row.Table.Columns.Contains("calcExpr")) calcExpr = row["calcExpr"] + ""; //处理统计 if (isSum == 1) { gridView.OptionsView.ShowFooter = true; if (calcExpr.IndexOf("/{") == -1) { BandedGridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0:" + dataFormat + "}") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") }); } else { BandedGridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") }); } } gridView1.Columns.Add(BandedGridColumn); } if (gridView.Columns.Count > 0) { BandedGridColumn firstColumn = gridView.Columns[0]; if (firstColumn != null) { gridView.OptionsView.ShowFooter = true; firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") }); gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") }); } } } public void SetDataSource(string sql) { gridControl.DataSource = null; if (string.IsNullOrEmpty(sql)) return; DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0]; gridControl.DataSource = dt; } /// /// 计算最大宽度 /// private int CalcMaxColumnWidth(DataTable dTable, string columnName) { int MaxWidth = 0; foreach (DataRow row in dTable.Rows) { int columnWidth = CommonUtils.GetFontWidth(row[columnName] + ""); if (columnWidth > MaxWidth) { MaxWidth = columnWidth; } } return MaxWidth; } private void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e) { e.Appearance.TextOptions.HAlignment = HorzAlignment.Center; e.Appearance.Options.UseBackColor = true; e.Appearance.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.BackwardDiagonal; if (e.Info.IsRowIndicator) { if (e.RowHandle >= 0) { e.Info.DisplayText = (e.RowHandle + 1).ToString(); } if (gridView1.FocusedRowHandle == e.RowHandle) { e.Appearance.BackColor = Color.Blue; e.Info.BackAppearance.BackColor = Color.Blue; e.Appearance.BackColor2 = Color.Blue; e.Info.BackAppearance.BackColor2 = Color.Blue; e.Appearance.ForeColor = Color.Blue; } } } public void SetFocus(string searchText, string colname) { DevExpress.XtraGrid.Views.Base.ColumnView view = (DevExpress.XtraGrid.Views.Base.ColumnView)this.gridControl.FocusedView; BandedGridColumn column = view.Columns[colname] as BandedGridColumn; if (column != null) { int rhFound = view.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText); if (rhFound != DevExpress.XtraGrid.GridControl.InvalidRowHandle) { view.FocusedRowHandle = rhFound; view.FocusedColumn = column; } } } /// /// 行改变事件 /// public object RowColorCondtion { get; set; } public void gridView1_SelectionChange(object sender, SelectionChangedEventArgs e) { isCancel = false; GridCell[] cells = gridView1.GetSelectedCells(); pnlBottom.Visible = (cells.Length > 1); pnlSpec.Visible = (cells.Length > 1); label1.Text = "求和:" + cells.Length.ToString(); double lSum = 0.00; double lAvg = 0.00; int lCount = cells.Length; foreach (GridCell item in cells) { double lNumber = 0.00; string cellValue = "0"; if (item.Column!=null) cellValue = gridView1.GetRowCellValue(item.RowHandle, item.Column)+""; if (double.TryParse(cellValue, out lNumber)) lSum += lNumber; } lAvg = lSum / lCount; label1.Text = "求和:" + lSum.ToString() + " 计数:" + lCount.ToString() + " 平均值:" + lAvg.ToString(); } public void gridView1_CancelEditor(object sender, CancelEventArgs e) { e.Cancel = isCancel; } #region 表格列扩展 /// /// /// /// /// public void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) { //判断是否是列标题的右键菜单 if (e.MenuType == GridMenuType.Column) { string gridMerge = "开启数据合并"; if (gridView1.OptionsView.AllowCellMerge) gridMerge = "关闭数据合并"; string mergeCaption = "数据合并"; BandedGridHitInfo hitInfo = e.HitInfo as BandedGridHitInfo; if (hitInfo.Band != null && hitInfo.Band.Children.Count == 0) { BandedGridColumn column = hitInfo.Band.Columns[0]; if (column.OptionsColumn.AllowMerge == DefaultBoolean.True) mergeCaption = "取消合并"; GridViewColumnMenu menu = e.Menu as GridViewColumnMenu; DXMenuItem itemFixLeft = new DXMenuItem("冻结列(左)", OnFixLeftItemClick); DXMenuItem itemFixRight = new DXMenuItem("冻结列(右)", OnFixRightItemClick); DXMenuItem itemUnFix = new DXMenuItem("取消冻结", OnUnFixItemClick); DXMenuItem gridMergeItem = new DXMenuItem(gridMerge, OnGridMergeItemClick); DXMenuItem itemMerge = new DXMenuItem(mergeCaption, OnMergeItemClick); DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", OnSaveItemClick); itemSaveColumn.Tag = gridView1; DXMenuItem itemClearColumn = new DXMenuItem("恢复表格属性", OnClearItemClick); itemClearColumn.Tag = this; DXMenuItem itemExportColumn = new DXMenuItem("导出表格数据", OnExportItemClick); itemExportColumn.Tag = gridView1; DXMenuItem itemPrintColumn = new DXMenuItem("打印表格数据", OnPrintItemClick); itemPrintColumn.Tag = gridView1; itemFixLeft.Tag = itemFixRight.Tag = itemUnFix.Tag = column; itemFixLeft.Image = Lskj.MyControl.Properties.Resources.fix_left; itemFixRight.Image = Lskj.MyControl.Properties.Resources.fix_right; itemUnFix.Image = Lskj.MyControl.Properties.Resources.fix_exit; gridMergeItem.Tag = gridView1; itemMerge.Tag = column; if (column.OwnerBand.Fixed == FixedStyle.Left) itemFixLeft.Enabled = false; if (column.OwnerBand.Fixed == FixedStyle.Right) itemFixRight.Enabled = false; if (column.OwnerBand.Fixed == FixedStyle.None) itemUnFix.Enabled = false; itemMerge.Enabled = gridView1.OptionsView.AllowCellMerge; itemFixLeft.BeginGroup = true; menu.Items.Add(itemFixLeft); menu.Items.Add(itemFixRight); menu.Items.Add(itemUnFix); gridMergeItem.BeginGroup = true; menu.Items.Add(gridMergeItem); menu.Items.Add(itemMerge); menu.Items.Add(itemExportColumn); menu.Items.Add(itemPrintColumn); if ((!string.IsNullOrEmpty(FormKey))) { gridMergeItem.BeginGroup = true; menu.Items.Add(itemSaveColumn); menu.Items.Add(itemClearColumn); } } } } /// /// 冻结列左侧 /// /// /// private void OnFixLeftItemClick(object sender, EventArgs e) { DXMenuItem item = sender as DXMenuItem; BandedGridColumn column = item.Tag as BandedGridColumn; column.OwnerBand.Fixed = FixedStyle.Left; //column.Fixed = FixedStyle.Left; } /// /// 冻结列右侧 /// /// /// private void OnFixRightItemClick(object sender, EventArgs e) { DXMenuItem item = sender as DXMenuItem; BandedGridColumn column = item.Tag as BandedGridColumn; column.OwnerBand.Fixed = FixedStyle.Right; //column.Fixed = FixedStyle.Right; } /// /// 取消冻结列 /// /// /// private void OnUnFixItemClick(object sender, EventArgs e) { DXMenuItem item = sender as DXMenuItem; BandedGridColumn column = item.Tag as BandedGridColumn; //column.Fixed = FixedStyle.None; column.OwnerBand.Fixed = FixedStyle.None; column.VisibleIndex = column.AbsoluteIndex; } /// /// 合并 /// /// /// private void OnMergeItemClick(object sender, EventArgs e) { DXMenuItem item = sender as DXMenuItem; BandedGridColumn column = item.Tag as BandedGridColumn; //column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; if (column.OptionsColumn.AllowMerge == DefaultBoolean.True) column.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; else column.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True; } /// /// 合并 /// /// /// private void OnGridMergeItemClick(object sender, EventArgs e) { DXMenuItem item = sender as DXMenuItem; GridView grv = item.Tag as GridView; //column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; if (grv.OptionsView.AllowCellMerge == true) grv.OptionsView.AllowCellMerge = false; else { grv.OptionsView.AllowCellMerge = true; MessageBox.Show("请注意:数据合并模式已开启,该模式下将不能进行区域选择、复制和粘贴\r\n要退出合并模式请再次点击进行切换"); } } /// /// 保存表格列信息 /// /// /// private void OnSaveItemClick(object sender, EventArgs e) { if (string.IsNullOrEmpty(FormKey)) return; if (XtraMessageBox.Show("是否将表格列头信息保存至数据库", "询问", MessageBoxButtons.YesNo) != DialogResult.Yes) return; DataTable dtTable = new DataTable(); try { dtTable = SqlHelper.ExecuteDataSet(string.Format("select 1 from P_systemGridConfigTab where formkey='{0}' and operatorId='{1}'", FormKey, OperatorId)).Tables[0]; } catch (Exception ex) { XtraMessageBox.Show("检测到未开启列保存列功能,请联系朗速"); return; } // 检查当前操作人员是否已经保存过列信息 StringBuilder sb = new StringBuilder(); DXMenuItem item = sender as DXMenuItem; GridView grv = item.Tag as GridView; if (dtTable.Rows.Count > 0) { foreach (BandedGridColumn col in grv.Columns) { string tempSql = string.Format(@"update P_systemGridConfigTab set orderid='{0}',fieldWidth='{1}' where formkey='{2}' and fieldname='{3}' and operatorid='{4}';", col.VisibleIndex, col.Width, FormKey, col.FieldName, OperatorId); sb.Append(tempSql); } if (!string.IsNullOrEmpty(sb.ToString())) { SqlHelper.ExecuteNonQuery(sb.ToString()); } } else { foreach (BandedGridColumn col in grv.Columns) { string tempSql = string.Format(@"insert into P_systemGridConfigTab(formkey,fieldname,username,orderid,isvisible,operatorid,operatorName,operatedate,fieldWidth) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}',getdate(),'{7}');", FormKey, col.FieldName, col.Caption, col.VisibleIndex, Convert.ToInt32(col.Visible), OperatorId, OperatorName, col.Width); sb.Append(tempSql); } if (!string.IsNullOrEmpty(sb.ToString())) { SqlHelper.ExecuteNonQuery(sb.ToString()); } } XtraMessageBox.Show("保存列信息成功"); #region old //string tmpsql = string.Empty; //string colTable = string.Empty; //string keyField = string.Empty; //int keyOrder = 0; //DXMenuItem item = sender as DXMenuItem; //GridView grv = item.Tag as GridView; ////基础档案主表 //if (ModuleType == 1) //{ // colTable = "p_systemwordbooktab"; // keyField = "tab"; // tmpsql = "select top 1 orderid from p_systemwordbooktab where tab='"+ModuleKey+"' order by orderid"; // object obj = SqlHelper.ExecuteScalar(CommandType.Text, tmpsql); // if (obj != null) // keyOrder = Convert.ToInt32(obj); //} ////报表明细 //if (ModuleType == 2) //{ // colTable = "p_systemDlltabDetailGrid"; // keyField = "detailkey"; //} ////单据明细 //if (ModuleType == 3) //{ // colTable = "p_systembillDetail"; // keyField = "typecode"; //} ////单据来源主信息 //if (ModuleType == 4) //{ // colTable = "p_systembillsourcegrid"; // keyField = "sourceid"; //} ////单据来源明细信息 //if (ModuleType == 5) //{ // colTable = "p_systembillsourcedetail"; // keyField = "sourceid"; //} //tmpsql = ""; //foreach (BandedGridColumn col in grv.Columns) //{ // tmpsql = tmpsql + "update " + colTable + " set width=" + col.Width.ToString() + ",orderid=" + (col.VisibleIndex + keyOrder + (ModuleType==1?1:0)).ToString() + // " where "+keyField+"='"+ ModuleKey +"' and fieldname='"+col.FieldName+"'"; // if (ModuleType == 1) // tmpsql = tmpsql + " and orderid<>" + keyOrder.ToString(); // tmpsql = tmpsql + ";"; //} ////MessageBox.Show(tmpsql); //SqlHelper.ExecuteNonQuery(tmpsql); #endregion } private void OnClearItemClick(object sender, EventArgs e) { if (string.IsNullOrEmpty(FormKey)) return; if (XtraMessageBox.Show("是否将表格列头信息恢复到系统配置状态", "询问", MessageBoxButtons.YesNo) != DialogResult.Yes) return; DataTable dtTable = new DataTable(); try { dtTable = SqlHelper.ExecuteDataSet(string.Format("select 1 from P_systemGridConfigTab where formkey='{0}' and operatorId='{1}'", FormKey, OperatorId)).Tables[0]; } catch (Exception ex) { XtraMessageBox.Show("检测到未开启列保存列功能,请联系朗速"); return; } string sql = string.Format("delete from P_systemGridConfigTab where formkey='{0}' and operatorId='{1}'", FormKey, OperatorId); SqlHelper.ExecuteNonQuery(sql); DXMenuItem item = sender as DXMenuItem; BandedControlEx grd = item.Tag as BandedControlEx; grd.SetColumns2(dtColumns); } /// /// 重置表格列 /// /// public DataTable ResetColumns(DataTable columns) { try { if (string.IsNullOrEmpty(FormKey)) return columns; DataTable dtColumns = SqlHelper.ExecuteDataSet(string.Format("select * from P_systemGridConfigTab where formkey='{0}' and operatorid='{1}'", FormKey, OperatorId)).Tables[0]; foreach (DataRow row in dtColumns.Rows) { string fieldname = row["fieldname"] + ""; string orderid = row["orderid"] + ""; string fieldWidth = row["fieldWidth"] + ""; foreach (DataRow item in columns.Rows) { if (fieldname.ToLower() == (item["fieldname"] + "").ToLower()) { item["orderid"] = orderid; item["width"] = fieldWidth; } } } DataView dv = columns.DefaultView; dv.Sort = "orderid asc"; return dv.ToTable(); } catch (Exception ex) { } return columns; } /// /// 导出表格数据 /// /// /// private void OnExportItemClick(object sender, EventArgs e) { SaveXls(gridControl); } /// /// 打印表格数据 /// /// /// private void OnPrintItemClick(object sender, EventArgs e) { Preview(gridControl); } #endregion #region 导出Excel /// /// 导出Excel /// /// /// public static int SaveXls(DevExpress.XtraGrid.GridControl GridControlPub) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = "导出Excel"; saveFileDialog.Filter = "Excel文件(*.xls)|*.xls|Excel2007|*.xlsx|PDF文件|*.PDF|RTF文件|*.RTF|HTML文件|*.html"; DialogResult dialogResult = saveFileDialog.ShowDialog(); if (dialogResult == DialogResult.OK) { DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(); if (saveFileDialog.FilterIndex == 1) { GridControlPub.ExportToXls(saveFileDialog.FileName); } if (saveFileDialog.FilterIndex == 2) { GridControlPub.ExportToXlsx(saveFileDialog.FileName); } if (saveFileDialog.FilterIndex == 3) { GridControlPub.ExportToPdf(saveFileDialog.FileName); } if (saveFileDialog.FilterIndex == 4) { GridControlPub.ExportToRtf(saveFileDialog.FileName); } if (saveFileDialog.FilterIndex == 5) { GridControlPub.ExportToHtml(saveFileDialog.FileName); } XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } return 1; } #endregion #region 打印GridControl /// /// 打印GridControl /// /// /// public static int Preview(DevExpress.XtraGrid.GridControl GridControlPub) { PrintingSystem ps = null; DevExpress.XtraPrinting.PrintableComponentLink link = null; ps = new DevExpress.XtraPrinting.PrintingSystem(); link = new DevExpress.XtraPrinting.PrintableComponentLink(ps); ps.Links.Add(link); link.Component = GridControlPub;//这里可以是可打印的部件 string _PrintHeader = "打印数据信息"; PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter; phf.Header.Content.Clear(); phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" }); phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold); phf.Header.LineAlignment = BrickAlignment.Center; link.CreateDocument(); //建立文档 ps.PreviewFormEx.Show(); return 1; } #endregion private void gridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e) { if (e.RowHandle == gridView1.FocusedRowHandle) e.Appearance.BackColor = Color.SpringGreen; } /// /// BandedGridColumn 需要自己写排序规则 /// /// /// private void gridMain_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point pt = new Point(e.X, e.Y); BandedGridHitInfo hit = gridView1.CalcHitInfo(e.Location); if (!hit.InBandPanel) { return; } GridBand gb1 = hit.Band; if (gb1.Children.VisibleBandCount > 0) //是否有下级Band { return; } for (int i = 0; i < gridView1.Columns.Count; i++) //取消当前列以外的所有列的排序 { if (gridView1.Columns[i].SortOrder == DevExpress.Data.ColumnSortOrder.None) { continue; } if (gridView1.Columns[i].FieldName != gb1.Columns[0].FieldName) gridView1.Columns[i].SortOrder = DevExpress.Data.ColumnSortOrder.None; } if (gb1.Columns[0].SortOrder == DevExpress.Data.ColumnSortOrder.Ascending) gb1.Columns[0].SortOrder = DevExpress.Data.ColumnSortOrder.Descending; else gb1.Columns[0].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending; } } } }