3422 lines
169 KiB
C#
3422 lines
169 KiB
C#
/******************************
|
|
* 说明:多表头表格
|
|
* 创建人:龚宇超
|
|
* 创建日期:2017-12-25
|
|
* 修改人:
|
|
* 修改日期:
|
|
* 修改备注:
|
|
* 版本: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.Model;
|
|
using DevExpress.XtraGrid;
|
|
using DevExpress.XtraGrid.Views.Grid;
|
|
using DevExpress.XtraGrid.Views.BandedGrid;
|
|
using Lskj.Control.Model;
|
|
using DevExpress.Utils;
|
|
using DevExpress.Data;
|
|
using DevExpress.XtraGrid.Columns;
|
|
using DevExpress.XtraGrid.Views.Base;
|
|
using Lskj.Data;
|
|
using Lskj.Business;
|
|
using DevExpress.XtraEditors.Repository;
|
|
using Lskj.Business.Impl;
|
|
using Lskj.Util;
|
|
using System.Text.RegularExpressions;
|
|
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
|
|
using DevExpress.XtraGrid.Menu;
|
|
using DevExpress.Utils.Menu;
|
|
using Lskj.Core;
|
|
using System.Data.SqlClient;
|
|
using DevExpress.XtraEditors;
|
|
using DevExpress.Data.Filtering;
|
|
using DevExpress.XtraEditors.Controls;
|
|
|
|
|
|
namespace Lskj.Control
|
|
{
|
|
|
|
/// <summary>
|
|
/// 多表头表格
|
|
/// </summary>
|
|
public partial class BandedGridControlEx : GridControlEx
|
|
{
|
|
/// <summary>
|
|
/// 创建Dictionary存储行号为Key,有效日期格式列名数组为Value
|
|
/// </summary>
|
|
public Dictionary<int, List<DateTime>> rowDateValues = new Dictionary<int, List<DateTime>>();
|
|
/// <summary>
|
|
/// 获取模块配置
|
|
/// </summary>
|
|
public ModuleModel moduleModel;
|
|
/// <summary>
|
|
/// Gets the grid view.
|
|
/// </summary>
|
|
/// <value>The grid view.</value>
|
|
public override GridView GridView { get { return this.bandedGridView; } }
|
|
/// <summary>
|
|
/// 多表头
|
|
/// </summary>
|
|
public BandedGridView BandedView { get { return this.bandedGridView; } }
|
|
/// <summary>
|
|
/// 粘贴表格数据时调用
|
|
/// </summary>
|
|
public event ParseGridDataEventHandler OnParseGridDataCallBack;
|
|
/// <summary>
|
|
/// 数据源绑定完成触发
|
|
/// </summary>
|
|
public event EventHandler OnDataSourceBindCallBack;
|
|
/// <summary>
|
|
/// 按初始顺序保存全部gridBand
|
|
/// </summary>
|
|
public List<GridBand> saveGridBands = new List<GridBand>();
|
|
/// <summary>
|
|
/// 按初始顺序保存全部gridBand对应的二级列名
|
|
/// </summary>
|
|
public Dictionary<GridBand, string> saveGridBandColumn = new Dictionary<GridBand, string>();
|
|
/// <summary>
|
|
/// 当前选中行数组
|
|
/// </summary>
|
|
private int[] SelectedRows = new int[0];
|
|
/// <summary>
|
|
/// 冻结列
|
|
/// </summary>
|
|
private List<BandedGridColumn> FrozenColumns = new List<BandedGridColumn>();
|
|
/// <summary>
|
|
/// 滚动条位置改变回调
|
|
/// </summary>
|
|
public event EventHandler OnLeftCoordCallback;
|
|
/// <summary>
|
|
/// 虚拟列颜色
|
|
/// </summary>
|
|
public Dictionary<string, string> ColorDictionary = new Dictionary<string, string>();
|
|
/// <summary>
|
|
/// 虚拟列关联字段
|
|
/// </summary>
|
|
public string virtualPrimaryKey;
|
|
/// <summary>
|
|
/// 行数合计列
|
|
/// 合计xx行 列,因为默认给的在最前面插入空白表头列,按照工具顺序加载列,可能会出现有2列合计行,所以在重新创建时就把之前的清空
|
|
/// </summary>
|
|
public GridColumn TotalColumn;
|
|
|
|
public BandedGridControlEx()
|
|
{
|
|
InitializeComponent();
|
|
this.bandedGridView.CustomDrawRowIndicator += new RowIndicatorCustomDrawEventHandler(OnGridViewCustomDrawRowIndicator);
|
|
this.bandedGridView.SelectionChanged += new SelectionChangedEventHandler(OnGridViewSelectionChanged);
|
|
this.bandedGridView.CustomDrawCell += new RowCellCustomDrawEventHandler(OnGridViewCustomDrawCell);
|
|
this.bandedGridView.CellValueChanged += new CellValueChangedEventHandler(OnGridViewCellValueChanged);
|
|
this.bandedGridView.KeyDown += new KeyEventHandler(OnGridViewKeyDown);
|
|
this.bandedGridView.DragObjectDrop += new DragObjectDropEventHandler(OnGridViewDragObjectDrop);
|
|
this.bandedGridView.CellMerge += new CellMergeEventHandler(OnGridViewCellMerge);
|
|
this.bandedGridView.CustomSummaryCalculate += new CustomSummaryEventHandler(OnGridViewSummaryCalculate);
|
|
this.bandedGridView.ShowFilterPopupCheckedListBox += new FilterPopupCheckedListBoxEventHandler(OnShowFilterPopupCheckedListBox);//(修复筛选条件)
|
|
this.bandedGridView.PopupMenuShowing += new DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventHandler(this.OnGridViewPopupMenuShowing);
|
|
this.bandedGridView.Click += new EventHandler(OnBandedGridView_Click);
|
|
this.bandedGridView.DoubleClick += new EventHandler(OnBandedGridViewDoubleClick);
|
|
this.bandedGridView.CustomDrawGroupRow += new RowObjectCustomDrawEventHandler(OnGridCustomDrawGroupRow);
|
|
this.bandedGridView.LeftCoordChanged += OnBandedLeftCoordChanged;
|
|
this.SetGridRowHeightAndFont();
|
|
if (SystemInfo.Instance.GroupRowFontSizeDelta > 0)
|
|
{
|
|
this.bandedGridView.Appearance.GroupRow.FontSizeDelta = SystemInfo.Instance.GroupRowFontSizeDelta;
|
|
}
|
|
this.bandedGridView.EndSorting += BandedGridView_EndSorting;//排序后选中第一行
|
|
this.bandedGridView.ShowingEditor += GridView_ShowingEditor;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:单元格合并</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期: </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="CellMergeEventArgs"/> instance containing the event data.</param>
|
|
protected void OnGridViewCellMerge(object sender, CellMergeEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
GridColumn column = e.Column;
|
|
GridColumnModel model = column.Tag as GridColumnModel;
|
|
if (model == null)
|
|
{
|
|
e.Handled = true;
|
|
return;
|
|
}
|
|
if (string.IsNullOrEmpty(model.MergeGroup))
|
|
{
|
|
return;
|
|
}
|
|
string[] fields = model.MergeGroup.Trim(',').Split(',');
|
|
for (int i = 0; i < fields.Length; i++)
|
|
{
|
|
int row1 = e.RowHandle1;
|
|
int row2 = e.RowHandle2;
|
|
string McColumn = fields[i] + "";//关联条件列
|
|
string value1 = bandedGridView.GetDataRow(row1)[McColumn].ToString();
|
|
string value2 = bandedGridView.GetDataRow(row2)[McColumn].ToString();
|
|
if (value1 != value2)
|
|
{
|
|
e.Handled = true;
|
|
}
|
|
else
|
|
{
|
|
e.Handled = false;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
LogHelper.Instance.WriteError(ex);
|
|
}
|
|
}
|
|
|
|
private string GetMergeGroupValue(GridColumnModel model, DataRow row)
|
|
{
|
|
if (model == null || row == null || string.IsNullOrEmpty(model.MergeGroup)) return string.Empty;
|
|
|
|
string[] fields = model.MergeGroup.Trim(',').Split(',');
|
|
StringBuilder groupValue = new StringBuilder();
|
|
foreach (string item in fields)
|
|
{
|
|
string fieldName = (item + "").Trim();
|
|
if (string.IsNullOrEmpty(fieldName) || !row.Table.Columns.Contains(fieldName)) continue;
|
|
|
|
groupValue.Append(fieldName);
|
|
groupValue.Append("=");
|
|
groupValue.Append(row[fieldName] + "");
|
|
groupValue.Append("|");
|
|
}
|
|
return groupValue.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:重写设置表格颜色</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-09-10 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="table">The table.</param>
|
|
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.GridView.RowCellStyle -= new RowCellStyleEventHandler(OnGridViewRowCellStyle);
|
|
this.GridView.RowCellStyle += new RowCellStyleEventHandler(OnGridViewRowCellStyle);
|
|
}
|
|
else
|
|
{
|
|
if (!SystemInfo.Instance.ConditionalStylePriority)
|
|
{
|
|
this.GridView.RowStyle -= new RowStyleEventHandler(OnGridViewRowStyle);
|
|
this.GridView.RowStyle += new RowStyleEventHandler(OnGridViewRowStyle);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:设置表格行颜色</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2019-06-10 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="RowStyleEventArgs"/> instance containing the event data.</param>
|
|
protected void OnGridViewRowStyle(object sender, RowStyleEventArgs e)
|
|
{
|
|
if (e.RowHandle >= 0 && this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0)
|
|
{
|
|
// 渲染界面数据量过多界面刷新会很慢
|
|
DataRow gridRow = this.GridView.GetDataRow(e.RowHandle);
|
|
foreach (DataRow item in this.GridRowColorsTable.Rows)
|
|
{
|
|
//string cond = ReplaceHelper.ReplaceRowParam(gridRow, item["condition"] + "");
|
|
string cond = ReplaceHelper.ReplaceRowParamEmptyWrapQuote(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 = FontStyle.Regular;
|
|
|
|
if (model.IsBold) fontStyle |= FontStyle.Bold;
|
|
if (model.IsItalic) fontStyle |= FontStyle.Italic;
|
|
if (model.IsStrickOut) fontStyle |= FontStyle.Strikeout;
|
|
if (model.IsUnderLine) fontStyle |= FontStyle.Underline;
|
|
|
|
e.Appearance.FontStyleDelta = fontStyle;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
//LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + model.Condition + ";EvalCondtion:" + cond);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:设置表格单元格颜色</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-09-10 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The source of the event.</param>
|
|
/// <param name="e">The <see cref="DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs"/> instance containing the event data.</param>
|
|
/// <exception cref="System.NotImplementedException"></exception>
|
|
public void OnGridViewRowCellStyle(object sender, RowCellStyleEventArgs e)
|
|
{
|
|
var view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
|
|
bool isLaterDatePresent = false;
|
|
if (view.IsCellSelected(e.RowHandle, e.Column))
|
|
{
|
|
return; // 如果当前单元格被选中,则不应用自定义样式
|
|
}
|
|
|
|
if (e.RowHandle >= 0 && this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0)
|
|
{
|
|
DataRow gridRow = view.GetDataRow(e.RowHandle);
|
|
// 获取行的最大日期值
|
|
DateTime? maxDateForRow = null;
|
|
if (gridRow.Table.Columns.Contains("PrecomputedMaxDate"))
|
|
{
|
|
bool isFieldDate = DateTime.TryParse(e.Column.FieldName, out DateTime FieldDate);
|
|
bool isMaxDate = DateTime.TryParse(gridRow["PrecomputedMaxDate"].ToString(), out DateTime parsedDate);
|
|
if (isMaxDate && isFieldDate)
|
|
{
|
|
maxDateForRow = parsedDate;
|
|
|
|
if (FieldDate < parsedDate)
|
|
{
|
|
isLaterDatePresent = true;
|
|
}
|
|
}
|
|
else if (isFieldDate)
|
|
{
|
|
return; // 如果当前是日期框模式且没有定义最大值则直接跳过
|
|
}
|
|
}
|
|
//DateTime? maxDateForRow = GetMaxDateFromColumnNames(gridRow);
|
|
foreach (DataRow item in this.GridRowColorsTable.Rows)
|
|
{
|
|
string condition = item["condition"] + "";
|
|
string cond = condition;
|
|
// 检查是否条件字符串包含 'COLUMN_NAME'
|
|
if (condition.Contains("COLUMN_NAME"))
|
|
{
|
|
// 解析期望的列名
|
|
string pattern = @"('{?COLUMN_NAME}'?\s*=\s*'[^']*')";
|
|
var matches = Regex.Matches(condition, pattern, RegexOptions.IgnoreCase);
|
|
var results = new List<string>();
|
|
foreach (Match match in matches)
|
|
{
|
|
results.Add(match.Value);
|
|
}
|
|
string expectedColumnName = "";
|
|
if (results.Count > 0)
|
|
{
|
|
expectedColumnName = results[0].Split('=').Last().Trim('\'');
|
|
}
|
|
if (!expectedColumnName.Equals(e.Column.Name, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
//cond = ReplaceHelper.ReplaceRowParam(gridRow, item["condition"] + "").ReplaceColumnParam(e.Column.Name, e.Column.Caption, e.CellValue + "");
|
|
cond = ReplaceHelper.ReplaceRowParamEmptyWrapQuote(gridRow, item["condition"] + "").ReplaceColumnParam(e.Column.Name, e.Column.Caption, e.CellValue + "");
|
|
try
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(cond) && ReplaceHelper.EvalCond(cond) && (!string.IsNullOrEmpty(e.CellValue + "") || isLaterDatePresent|| SystemInfo.Instance.isBlankCellColor))
|
|
{
|
|
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 = FontStyle.Regular;
|
|
|
|
if (model.IsBold) fontStyle |= FontStyle.Bold;
|
|
if (model.IsItalic) fontStyle |= FontStyle.Italic;
|
|
if (model.IsStrickOut) fontStyle |= FontStyle.Strikeout;
|
|
if (model.IsUnderLine) fontStyle |= FontStyle.Underline;
|
|
|
|
e.Appearance.FontStyleDelta = fontStyle;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// 考虑增加错误日志记录
|
|
// LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + item["condition"] + "; EvalCondtion:" + cond, ex);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (e.RowHandle >= 0 && this.ColorDictionary.Count > 0 && !string.IsNullOrWhiteSpace(this.virtualPrimaryKey) && bandedGridView.Columns.ColumnByName(this.virtualPrimaryKey) != null)
|
|
{
|
|
DataRow gridRow = view.GetDataRow(e.RowHandle);
|
|
string key = gridRow[this.virtualPrimaryKey] +"^"+ e.Column.FieldName;
|
|
string value;
|
|
if (this.ColorDictionary.TryGetValue(key, out value))
|
|
{
|
|
//DataModel.TopModuleModel.ParmaryKey
|
|
e.Appearance.BackColor = ColorTranslator.FromHtml("#"+ value);
|
|
}
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 解析列名是否为日期模式
|
|
/// </summary>
|
|
/// <param name="fieldName"></param>
|
|
/// <param name="date"></param>
|
|
/// <returns></returns>
|
|
private bool IsDateColumn(string fieldName, out DateTime date)
|
|
{
|
|
// 通过正则表达式或其他方法来解析字段名是否包含日期,并尝试解析日期
|
|
return DateTime.TryParse(fieldName, out date); // 示例,实际应根据实际字段名解析逻辑
|
|
}
|
|
/// <summary>
|
|
/// 获取行中最大的有效日期
|
|
/// </summary>
|
|
/// <param name="row"></param>
|
|
/// <returns></returns>
|
|
private DateTime? GetMaxDateFromColumnNames(DataRow row)
|
|
{
|
|
DateTime? maxDate = null;
|
|
foreach (DataColumn column in row.Table.Columns)
|
|
{
|
|
DateTime date;
|
|
if (IsDateColumn(column.ColumnName, out date))
|
|
{
|
|
if (!maxDate.HasValue || date > maxDate.Value)
|
|
{
|
|
if (!string.IsNullOrEmpty(row[column.ColumnName] + ""))
|
|
{
|
|
maxDate = date;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return maxDate;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:设置只读列</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-12-25 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="table">The table.</param>
|
|
public override void SetReadOnlyColumns(DataTable table, string customColumKey = "")
|
|
{
|
|
//设置列头自动高度
|
|
this.bandedGridView.OptionsView.ColumnHeaderAutoHeight = DefaultBoolean.True;
|
|
base.CustomColumKey = customColumKey;
|
|
base.ColumnList.Clear();
|
|
this.bandedGridView.Bands.Clear();
|
|
this.bandedGridView.Columns.Clear();
|
|
this.AddBandColumns(table);
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:设置可编辑列</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-12-25 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="table">The table.</param>
|
|
public override void SetEditColumns(DataTable table, string customColumKey = "")
|
|
{
|
|
//设置列头自动高度
|
|
this.bandedGridView.OptionsView.ColumnHeaderAutoHeight = DefaultBoolean.True;
|
|
base.CustomColumKey = customColumKey;
|
|
base.ColumnList.Clear();
|
|
this.bandedGridView.Bands.Clear();
|
|
this.bandedGridView.Columns.Clear();
|
|
this.AddBandColumns(table, false);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2019-11-11 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
protected void SetGridRowHeightAndFont()
|
|
{
|
|
if (SystemInfo.Instance.GridRowFontSize > 0)
|
|
this.bandedGridView.Appearance.Row.Font = new Font("微软雅黑", SystemInfo.Instance.GridRowFontSize);
|
|
if (SystemInfo.Instance.GridRowHeight > 0)
|
|
{
|
|
this.bandedGridView.ColumnPanelRowHeight = this.bandedGridView.RowHeight = SystemInfo.Instance.GridRowHeight;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:是否为多表头</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-12-25 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="fieldName">Name of the field.</param>
|
|
/// <param name="bands">The bands.</param>
|
|
protected string HasBand(string fieldName, GridColumnModel[] bands)
|
|
{
|
|
foreach (GridColumnModel model in bands)
|
|
{
|
|
if (("|" + model.BandFields + "|").Contains("|" + fieldName + "|"))
|
|
{
|
|
return model.BandTitle;
|
|
}
|
|
}
|
|
return string.Empty;
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:获取选中行数据</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2019-10-18 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns>DataRow[].</returns>
|
|
public override DataRow[] GetViewFocusedDataRows()
|
|
{
|
|
int[] rows = GridView.GetSelectedRows();
|
|
DataRow[] dataRows = new DataRow[rows.Length];
|
|
for (int i = 0; i < rows.Length; i++)
|
|
{
|
|
dataRows[i] = GridView.GetDataRow(rows[i]);
|
|
}
|
|
return dataRows;
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期: </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns>DataRow.</returns>
|
|
public override DataRow GetViewFocusedDataRow()
|
|
{
|
|
return GridView.GetFocusedDataRow();
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:添加多表头列</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-04-11 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="table">The table.</param>
|
|
/// <param name="readOnly">if set to <c>true</c> [read only].</param>
|
|
protected void AddBandColumns(DataTable table, bool readOnly = true)
|
|
{
|
|
if (table == null) return;
|
|
this.InitGridColumsTab = table;
|
|
this.mControlList.Clear();
|
|
List<String> bandFieldstr = new List<String>();
|
|
string bandFields = string.Empty;
|
|
foreach (DataRow item in table.Rows)
|
|
{
|
|
GridColumnModel model = new GridColumnModel(item);
|
|
this.ColumnList.Add(model);
|
|
}
|
|
Dictionary<int, GridBand> gridBandEmptyDic = new Dictionary<int, GridBand>();
|
|
GridBand gridBandEmpty = new GridBand();
|
|
//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 (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))
|
|
{
|
|
GridBand gridBand = new GridBand();
|
|
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);
|
|
bandedGridView.Bands.AddRange(new GridBand[] { gridBand });
|
|
gridBandEmpty = new GridBand();//切换时重置空列
|
|
}
|
|
else if (columnModel.FieldText.Contains("|"))
|
|
{
|
|
if (bandRows.Length == 0 && AutobandRows.Length > 0)
|
|
{
|
|
GridBand gridBand = new GridBand();
|
|
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);
|
|
bandedGridView.Bands.AddRange(new GridBand[] { gridBand });
|
|
gridBandEmpty = new GridBand();//切换时重置空列
|
|
}
|
|
}
|
|
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 (!bandedGridView.Bands.Contains(gridBandEmpty))
|
|
{
|
|
bandedGridView.Bands.Add(gridBandEmpty);
|
|
}
|
|
gridBandEmptyDic.Add(this.ColumnList.IndexOf(columnModel), gridBandEmpty);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (GridColumnModel item in bandRows)
|
|
{
|
|
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;
|
|
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);
|
|
bandedGridView.Bands.AddRange(new GridBand[] { gridBand });
|
|
|
|
bandFields += "|" + item.BandFields;
|
|
}
|
|
if (bandRows.Length == 0 && AutobandRows.Length > 0)
|
|
{
|
|
foreach (GridColumnModel item in AutobandRows)
|
|
{
|
|
GridBand gridBand = new GridBand();
|
|
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);
|
|
bandedGridView.Bands.AddRange(new GridBand[] { 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;
|
|
if (this.moduleModel != null && moduleModel.BandedAddToEnd)
|
|
{
|
|
bandedGridView.Bands.Add(gridBandEmpty);
|
|
}
|
|
else
|
|
{
|
|
bandedGridView.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;
|
|
BandedGridColumn gridColumn = new BandedGridColumn();
|
|
gridColumn.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains;
|
|
string bandTitle = startIndex > 0 ? model.FieldText.Substring(0, startIndex) : HasBand(model.FieldName, bandRows);
|
|
|
|
if (!string.IsNullOrEmpty(bandTitle))
|
|
{
|
|
// 绑定了多表头显示
|
|
GridBand gridBand = this.bandedGridView.Bands.Cast<GridBand>().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 + "^");
|
|
}
|
|
|
|
}
|
|
bandedGridView.Columns.Add(gridColumn);
|
|
}
|
|
else
|
|
{
|
|
// 未绑定多表头则直接显示
|
|
if (bandEmptyRows != null && bandEmptyRows.Contains(model))
|
|
{
|
|
if (this.moduleModel != null && this.moduleModel.BandSequentialMode)
|
|
{
|
|
gridBandEmptyDic[this.ColumnList.IndexOf(model)].Columns.Add(gridColumn);
|
|
}
|
|
else
|
|
{
|
|
gridBandEmpty.Columns.Add(gridColumn);
|
|
}
|
|
}
|
|
bandedGridView.Columns.Add(gridColumn);
|
|
}
|
|
gridColumn.OptionsColumn.AllowMerge = model.CanMerge ? DefaultBoolean.True : DefaultBoolean.False;
|
|
if (model != null && model.CanMerge)
|
|
bandedGridView.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 (model.DataAlignment > 0)
|
|
{
|
|
gridColumn.AppearanceCell.Options.UseTextOptions = true;
|
|
gridColumn.AppearanceCell.TextOptions.HAlignment = model.DataAlignment == 1 ? DevExpress.Utils.HorzAlignment.Center : DevExpress.Utils.HorzAlignment.Far;
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(model.TitleColor))
|
|
{
|
|
gridColumn.AppearanceHeader.Options.UseForeColor = true;
|
|
gridColumn.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(model.TitleColor);
|
|
}
|
|
|
|
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);
|
|
if (model.RepeatedVerification)
|
|
{
|
|
this.RepeatedVerificationNames.Add(model.FieldName);
|
|
}
|
|
//工具中设置的冻结列
|
|
if (model.FrozenFlag)
|
|
{
|
|
//gridColumn.Fixed = FixedStyle.Left;
|
|
//FixLeftItemClick(gridColumn, new EventArgs());
|
|
FrozenColumns.Add(gridColumn);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(model.PromptText))
|
|
{
|
|
PromptMessage.Add(model.FieldName, model.PromptText);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(model.ColumnAnnotation))
|
|
{
|
|
gridColumn.ToolTip = model.ColumnAnnotation;
|
|
}
|
|
}
|
|
// 加载数据源
|
|
//BindDataSource();
|
|
this.SetCustomColumns();//加载多表头自定义列
|
|
|
|
//多表头冻结
|
|
foreach (BandedGridColumn item in FrozenColumns)
|
|
{
|
|
FixLeftItemClick(item, new EventArgs());
|
|
}
|
|
|
|
|
|
// 延迟加载数据源
|
|
this.mLoading = false;
|
|
this.mTimer.Tick += new EventHandler(mTimerTick);
|
|
this.mTimer.Start();
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:设置自定义列</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-02-01 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
protected virtual void SetCustomColumns(bool isInit = true)
|
|
{
|
|
if (string.IsNullOrEmpty(this.CustomColumKey) || !BaseImpl.HasExistsTable(ResourceKeys.SettingTableName)) return;
|
|
if (!BaseImpl.HasExistsColumn(ResourceKeys.SettingTableName, "FieldText"))
|
|
{
|
|
BaseImpl.ExecSqlValue("alter table " + ResourceKeys.SettingTableName + " add FieldText varchar(100)");
|
|
}
|
|
DataTable customTable = this.bandedGridView.GetCustomColumnByDatabase(this.CustomColumKey);
|
|
if (customTable != null && customTable.Rows.Count > 0)
|
|
{
|
|
|
|
int MaxIndex = customTable.Columns.Count;
|
|
foreach (DataRow rowItem in customTable.Rows)
|
|
{
|
|
string fieldName = rowItem["fieldName"] + "";
|
|
string FieldText = rowItem["FieldText"] + "";
|
|
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);
|
|
string FilterInfo = rowItem.Table.Columns.Contains("FilterInfo") ? rowItem["FilterInfo"] + "" : "";//列筛选条件
|
|
|
|
GridColumnModel column = this.ColumnList.Find(x => x.FieldName == fieldName);
|
|
BandedGridColumn gridColumn = this.bandedGridView.Columns.ColumnByName(fieldName);
|
|
if (column != null && !string.IsNullOrEmpty(fieldName) && gridColumn != null && gridColumn.Visible && gridColumn.Width > 0)
|
|
{
|
|
BandedGridColumn colObj = this.bandedGridView.Columns[fieldName];
|
|
GridBand gridBand = colObj.OwnerBand;
|
|
if (index >= 0 && index <= this.bandedGridView.Columns.Count - 1)
|
|
{
|
|
this.bandedGridView.Columns.Remove(colObj);
|
|
this.bandedGridView.Columns.Insert(index, colObj);
|
|
}
|
|
colObj.OwnerBand = gridBand;
|
|
colObj.VisibleIndex = index;
|
|
colObj.Width = fieldWidth;
|
|
colObj.Visible = visible;
|
|
if (!string.IsNullOrWhiteSpace(FilterInfo)) colObj.FilterInfo = new ColumnFilterInfo(FilterInfo);
|
|
if (FieldText.Contains("|") && isFix)
|
|
{
|
|
FixLeftItemClick(colObj, new EventArgs());
|
|
}
|
|
else
|
|
{
|
|
colObj.OwnerBand.Fixed = isFix ? FixedStyle.Left : FixedStyle.None;
|
|
}
|
|
|
|
}
|
|
}
|
|
//是否显示筛选器行
|
|
if (customTable.Columns.Contains("DisplayFiltering") && "1".Equals(customTable.Rows[0]["DisplayFiltering"] + "")) this.bandedGridView.OptionsView.ShowAutoFilterRow = true;
|
|
//分组序号
|
|
if (customTable.Columns.Contains("GroupIndex"))
|
|
{
|
|
DataRow[] dataRows = customTable.Select("GroupIndex>-1");
|
|
|
|
for (int i = 0; i < dataRows.Length; i++)
|
|
{
|
|
DataRow row = dataRows.Cast<DataRow>().FirstOrDefault(x => Convert.ToInt32(x["GroupIndex"] + "") == i);
|
|
if (row != null)
|
|
{
|
|
string fieldName = row["fieldName"] + "";
|
|
int GroupIndex = row.Table.Columns.Contains("GroupIndex") ? Convert.ToInt32(row["GroupIndex"] + "") : -1;
|
|
GridColumnModel column = this.ColumnList.Find(x => x.FieldName == fieldName);
|
|
BandedGridColumn gridColumn = this.bandedGridView.Columns.ColumnByName(fieldName);
|
|
if (column != null && !string.IsNullOrEmpty(fieldName) && gridColumn != null && gridColumn.Visible && gridColumn.Width > 0)
|
|
{
|
|
BandedGridColumn colObj = this.bandedGridView.Columns[fieldName];
|
|
if (GroupIndex > -1)
|
|
{
|
|
colObj.GroupIndex = GroupIndex;
|
|
this.bandedGridView.OptionsView.ShowGroupPanel = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 隐藏分组面板
|
|
this.bandedGridView.OptionsView.ShowGroupPanel = false;
|
|
// 展开所有分组
|
|
this.bandedGridView.OptionsBehavior.AutoExpandAllGroups = true;//展开所有分组
|
|
}
|
|
foreach (BandedGridColumn col in this.bandedGridView.Columns)
|
|
{
|
|
DataRow a = customTable.Rows.Cast<DataRow>().FirstOrDefault(x => col.Name.Equals(x["fieldName"] + "", StringComparison.OrdinalIgnoreCase));
|
|
if (a == null)
|
|
{
|
|
bool visible = col.Visible;//获取设置VisibleIndex之前列的状态
|
|
col.VisibleIndex = MaxIndex;
|
|
MaxIndex += 1;
|
|
col.Visible = visible;
|
|
}
|
|
}
|
|
}
|
|
if (!isInit)
|
|
{
|
|
// 非初始化,假如未配置则初始化到系统配置
|
|
for (int i = 0; i < this.ColumnList.Count; i++)
|
|
{
|
|
GridColumnModel column = this.ColumnList[i];
|
|
if (this.bandedGridView.Columns.ColumnByName(column.FieldName) != null)
|
|
{
|
|
BandedGridColumn colObj = this.bandedGridView.Columns[column.FieldName];
|
|
colObj.VisibleIndex = i;
|
|
colObj.Width = column.Width;
|
|
colObj.Visible = column.Visible;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:重写表格选中事件.</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-10-30 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The source of the event.</param>
|
|
/// <param name="e">The <see cref="DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs"/> instance containing the event data.</param>
|
|
protected override void OnGridViewCustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
|
|
{
|
|
|
|
if (SystemInfo.Instance.ConditionalStylePriority && e.RowHandle >= 0 && this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0)
|
|
{
|
|
// 渲染界面数据量过多界面刷新会很慢
|
|
DataRow gridRow = this.GridView.GetDataRow(e.RowHandle);
|
|
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 = FontStyle.Regular;
|
|
|
|
if (model.IsBold) fontStyle |= FontStyle.Bold;
|
|
if (model.IsItalic) fontStyle |= FontStyle.Italic;
|
|
if (model.IsStrickOut) fontStyle |= FontStyle.Strikeout;
|
|
if (model.IsUnderLine) fontStyle |= FontStyle.Underline;
|
|
|
|
e.Appearance.FontStyleDelta = fontStyle;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
//LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + model.Condition + ";EvalCondtion:" + cond);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// 仅当单元格没有被选中时,才设置行选中颜色,否则保持默认的选中色
|
|
if (e.RowHandle == bandedGridView.FocusedRowHandle &&
|
|
!bandedGridView.IsCellSelected(e.RowHandle, e.Column))
|
|
{
|
|
e.Appearance.BackColor = ColorTranslator.FromHtml("#9feb6a");
|
|
}
|
|
|
|
string PromptText = string.Empty;
|
|
// 判断单元格值是否为 null 或空
|
|
if (PromptMessage.TryGetValue(e.Column.FieldName, out PromptText) && (e.CellValue == null || string.IsNullOrEmpty(e.CellValue.ToString())))
|
|
{
|
|
// 绘制默认单元格背景
|
|
e.DefaultDraw();
|
|
|
|
// 绘制提示文本(灰色、斜体)
|
|
var appearance = e.Appearance;
|
|
appearance.ForeColor = Color.Gray;
|
|
appearance.FontStyleDelta = FontStyle.Italic;
|
|
e.Graphics.DrawString(PromptText, appearance.Font,
|
|
new SolidBrush(appearance.ForeColor), e.Bounds,
|
|
new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center });
|
|
|
|
// 标记事件已处理,避免默认绘制覆盖
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:重写绘制序号列</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-04-20 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The source of the event.</param>
|
|
/// <param name="e">The <see cref="RowIndicatorCustomDrawEventArgs" /> instance containing the event data.</param>
|
|
protected override void OnGridViewCustomDrawRowIndicator(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 (bandedGridView.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;
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-04-26 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="gridColumn">The grid column.</param>
|
|
/// <param name="model">The model.</param>
|
|
protected override void SetColumnSumming(GridColumn gridColumn, GridColumnModel model)
|
|
|
|
{
|
|
bool isBlankHeader = true;//是空白一级列头
|
|
if (moduleModel != null && gridColumn is BandedGridColumn && moduleModel.BandedAddToEnd)
|
|
{
|
|
//只有一级表头为空的第一列会显示合计(设置了空白列加在最后才生效)
|
|
BandedGridColumn bandedGridColumn = gridColumn as BandedGridColumn;
|
|
if (bandedGridColumn.OwnerBand != null && !string.IsNullOrWhiteSpace(bandedGridColumn.OwnerBand.Caption))
|
|
{
|
|
isBlankHeader = false;
|
|
}
|
|
}
|
|
|
|
// 设置底部合计
|
|
if (gridColumn.VisibleIndex == 0 && isBlankHeader)//只有空白表头才设置 合计xxx行
|
|
{
|
|
if (this.TotalColumn != null)
|
|
{
|
|
this.TotalColumn.Summary.Clear();
|
|
}
|
|
this.TotalColumn = gridColumn;
|
|
|
|
bandedGridView.OptionsView.ShowFooter = true;
|
|
gridColumn.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, TotalFormat) });
|
|
if (SystemInfo.Instance.GroupSpecialMode)
|
|
{
|
|
//bandedGridView.GroupSummary.Add(new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, gridColumn, "合计: {0:#,###}行"));
|
|
bandedGridView.OptionsView.GroupFooterShowMode = GroupFooterShowMode.VisibleAlways;
|
|
}
|
|
else
|
|
{
|
|
bandedGridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, null, TotalFormat) });
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (model.CanSum)
|
|
{
|
|
bandedGridView.OptionsView.ShowFooter = true;
|
|
gridColumn.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem((!string.IsNullOrEmpty(model.sumCalc) || !string.IsNullOrEmpty(model.SumCond) || model.isSumMerge) ? SummaryItemType.Custom : SummaryItemType.Sum, gridColumn.FieldName, model.SumText + "{0:" + model.DataFormat + "}") });
|
|
|
|
if (SystemInfo.Instance.GroupSpecialMode)
|
|
{
|
|
bandedGridView.GroupSummary.Add(new GridGroupSummaryItem((!string.IsNullOrEmpty(model.sumCalc) || !string.IsNullOrEmpty(model.SumCond) || model.isSumMerge) ? SummaryItemType.Custom : SummaryItemType.Sum, gridColumn.FieldName, gridColumn, model.SumText + "{0:" + model.DataFormat + "}"));
|
|
bandedGridView.OptionsView.GroupFooterShowMode = GroupFooterShowMode.VisibleAlways;
|
|
}
|
|
else
|
|
{
|
|
bandedGridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem((!string.IsNullOrEmpty(model.sumCalc) || !string.IsNullOrEmpty(model.SumCond) || model.isSumMerge) ? SummaryItemType.Custom : SummaryItemType.Sum, gridColumn.FieldName, null, model.SumText + "{0:" + model.DataFormat + "}") });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <para>说明:表格列求和触发事件</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2021-04-16 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="gridColumn">The grid column.</param>
|
|
/// <param name="model">The model.</param>
|
|
protected override void OnGridViewSummaryCalculate(object sender, CustomSummaryEventArgs e)
|
|
{
|
|
bool isSum = false;
|
|
var gridView = sender as DevExpress.XtraGrid.Views.BandedGrid.BandedGridView;
|
|
GridSummaryItem gridSummaryItem = e.Item as GridSummaryItem;
|
|
GridColumn gridColumn = gridView.Columns[gridSummaryItem.FieldName] as GridColumn;
|
|
GridColumnModel model = gridColumn.Tag as GridColumnModel;
|
|
GridViewInfo info = gridView.GetViewInfo() as GridViewInfo;
|
|
switch (e.SummaryProcess)
|
|
{
|
|
//calculation entry point 计算开始时
|
|
case DevExpress.Data.CustomSummaryProcess.Start:
|
|
customSum = 0;
|
|
SumText = model.sumCalc;
|
|
sumdr = null;
|
|
if (!string.IsNullOrEmpty(model.sumCalc))
|
|
{
|
|
DataTable SumTab = new DataTable();
|
|
List<string> condition = ReplaceHelper.GetParamFields(model.sumCalc);
|
|
foreach (string item in condition)
|
|
{
|
|
string field = item.Replace("{", "").Replace("}", "");
|
|
SumTab.Columns.Add(field);
|
|
}
|
|
sumdr = SumTab.NewRow();
|
|
}
|
|
break;
|
|
//consequent calculations 计算中自定义计算方法
|
|
case CustomSummaryProcess.Calculate:
|
|
DataRow gridRow = gridView.GetDataRow(e.RowHandle);
|
|
isSum = !string.IsNullOrWhiteSpace(model.SumCond) ? "true".Equals(EvalHelper.Eval(ReplaceHelper.ReplaceEvalCond(ReplaceHelper.ReplaceRowParam(gridRow, model.SumCond))) + "", StringComparison.OrdinalIgnoreCase) : true;
|
|
if (!string.IsNullOrEmpty(model.sumCalc))
|
|
{
|
|
foreach (DataColumn col in sumdr.Table.Columns)
|
|
{
|
|
sumdr[col.ColumnName] = Convert.ToDecimal(string.IsNullOrEmpty(sumdr[col.ColumnName] + "") ? "0" :
|
|
sumdr[col.ColumnName] + "") + Convert.ToDecimal(string.IsNullOrEmpty(gridRow[col.ColumnName] + "") ? "0" : gridRow[col.ColumnName] + "");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (model.isSumMerge && !string.IsNullOrEmpty(e.FieldValue + ""))
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(model.MergeGroup))
|
|
{
|
|
string currentGroupName = GetMergeGroupValue(model, gridRow);
|
|
bool isMergrGroup = !string.IsNullOrEmpty(currentGroupName) && e.RowHandle != 0 ? currentGroupName.Equals(BeforeGroupName) : false;
|
|
if (model.CanMerge && BeforeClass == Convert.ToDecimal(e.FieldValue) && isMergrGroup)
|
|
{
|
|
BeforeClass = Convert.ToDecimal(e.FieldValue);
|
|
BeforeGroupName = currentGroupName;
|
|
}
|
|
else
|
|
{
|
|
BeforeClass = Convert.ToDecimal(e.FieldValue);
|
|
BeforeGroupName = currentGroupName;
|
|
if (isSum || String.IsNullOrEmpty(model.SumCond)) customSum += Convert.ToDecimal(e.FieldValue);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (model.CanMerge && BeforeClass == Convert.ToDecimal(e.FieldValue))
|
|
{
|
|
BeforeClass = Convert.ToDecimal(e.FieldValue);
|
|
}
|
|
else
|
|
{
|
|
BeforeClass = Convert.ToDecimal(e.FieldValue);
|
|
if (isSum || String.IsNullOrEmpty(model.SumCond)) customSum += Convert.ToDecimal(e.FieldValue);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
if (isSum)
|
|
{
|
|
if (BeforeClass != Convert.ToDecimal(e.FieldValue))
|
|
{
|
|
customSum += Convert.ToDecimal(e.FieldValue);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
//final summary value 计算结束
|
|
case CustomSummaryProcess.Finalize:
|
|
if (gridView.GridControl.DataSourceTable().Rows.Count == 0) break;
|
|
if (sumdr != null)
|
|
{
|
|
foreach (DataColumn col in sumdr.Table.Columns)
|
|
{
|
|
string newresult = sumdr[col.ColumnName] + "";
|
|
GridColumn newColumn = gridView.Columns[col.ColumnName] as GridColumn;
|
|
GridColumnModel newModel = newColumn.Tag as GridColumnModel;
|
|
if (!string.IsNullOrEmpty(newModel.DataFormat))
|
|
{
|
|
//计算后先执行保存小数位数
|
|
if (!model.sumCalc.StartsWith("@"))
|
|
{
|
|
newresult = string.Format("{0:" + newModel.DataFormat + "}", Convert.ToDecimal(string.IsNullOrEmpty(newresult) ? "0" : newresult));
|
|
}
|
|
}
|
|
sumdr[col.ColumnName] = newresult + "";
|
|
}
|
|
if (this.ParentControl != null)
|
|
SumText = ParentControl.ReplaceParentControlValue(model.sumCalc);
|
|
SumText = ReplaceHelper.ReplaceRowParam(sumdr, SumText);
|
|
string result = string.Empty;
|
|
if (SumText.StartsWith("@"))
|
|
{
|
|
result = MainImpl.GetResult(SumText.Replace("@", "")) + "";
|
|
}
|
|
else
|
|
{
|
|
result = EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(SumText)) + "";
|
|
}
|
|
if (result.Equals("NaN") || string.IsNullOrWhiteSpace(result)) result = "0";
|
|
if (string.IsNullOrEmpty(model.DataFormat))
|
|
{
|
|
result = Math.Round(Convert.ToDouble(2), model.Decimals, MidpointRounding.AwayFromZero) + "";
|
|
}
|
|
else
|
|
{
|
|
//计算后先执行保存小数位数
|
|
result = string.Format("{0:" + model.DataFormat + "}", Convert.ToDecimal(result));
|
|
}
|
|
//如果是数值类型,就去掉百分号
|
|
//if (model.FieldType == 7 && result.Contains('%'))
|
|
//{
|
|
// result = (double.Parse(result.Replace("%", "")) * 0.01).ToString();
|
|
//}
|
|
e.TotalValue = result;
|
|
}
|
|
else
|
|
{
|
|
e.TotalValue = customSum;
|
|
BeforeClass = 0;
|
|
BeforeGroupName = "";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:多表头设置动态列</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2021-02-07 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
protected override void SetAutoColumns()
|
|
{
|
|
bool isShowFooter = false;
|
|
if (this.ColumnList == null || this.ColumnList.Count == 0)
|
|
{
|
|
this.SuspendLayout();
|
|
this.ResumeLayout();
|
|
List<String> bandEmptyRows = new List<String>();
|
|
List<String> bandFields = new List<String>();
|
|
DataRow dr = MainImpl.GetSystemdllTab(this.Model.ModuleCode);
|
|
bool isEdit = false;//是否可操作
|
|
if (dr != null && !(this.Model is DynamicReportModel))
|
|
{
|
|
ModuleModel SysModel = new ModuleModel(dr);
|
|
isEdit = SysModel.CanEdit;
|
|
}
|
|
if (this is BandedGridControlEx)
|
|
{
|
|
|
|
frozenColumnGridBands.Clear();
|
|
frozenGridBands.Clear();
|
|
GridBand gridBandEmpty = new GridBand();
|
|
List<BandedGridColumn> autoFixColumns = new List<BandedGridColumn>();
|
|
bool hasVisibleBandEmptyRow = false;
|
|
foreach (GridColumn item in bandedGridView.Columns)
|
|
{
|
|
if (item.FieldName.Contains("|"))
|
|
{
|
|
int index = item.FieldName.LastIndexOf("|");
|
|
string bandField = item.FieldName.Substring(0, index);
|
|
if (!bandFields.Contains(bandField)) bandFields.Add(bandField);
|
|
}
|
|
else
|
|
{
|
|
bandEmptyRows.Add(item.FieldName);
|
|
bool emptyColumnVisible = true;
|
|
if (item.FieldName.Contains("_"))
|
|
{
|
|
string[] colparame = item.FieldName.Split('_');
|
|
int width = 0;
|
|
if (colparame.Length >= 2 && Int32.TryParse(colparame[1], out width))
|
|
{
|
|
emptyColumnVisible = width > 0;
|
|
}
|
|
}
|
|
if (emptyColumnVisible)
|
|
{
|
|
hasVisibleBandEmptyRow = true;
|
|
}
|
|
}
|
|
}
|
|
foreach (string bandName in bandFields)
|
|
{
|
|
GridBand gridBand = new GridBand();
|
|
gridBand.Caption = bandName;
|
|
gridBand.AppearanceHeader.Options.UseFont = true;
|
|
gridBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold);
|
|
gridBand.AppearanceHeader.Options.UseTextOptions = true;
|
|
gridBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
|
|
bandedGridView.Bands.AddRange(new GridBand[] { gridBand });
|
|
//bandFields += "|" + item.BandFields;
|
|
}
|
|
if (bandEmptyRows != null && bandEmptyRows.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;
|
|
gridBandEmpty.Visible = hasVisibleBandEmptyRow;
|
|
bandedGridView.Bands.Insert(0, gridBandEmpty);
|
|
}
|
|
bandedGridView.BeginDataUpdate();
|
|
// 创建列
|
|
for (int i = 0; i < bandedGridView.Columns.Count; i++)
|
|
{
|
|
BandedGridColumn col = bandedGridView.Columns[i];
|
|
int vsNum = 0; bool isNum = false; string FieldName = col.FieldName; string bandTitle = string.Empty;
|
|
bool isFixColumn = false;//是否有冻结列
|
|
col.VisibleIndex = i;
|
|
if (col.FieldName.Contains("|"))
|
|
{
|
|
string[] colSplit = col.FieldName.Split('|');
|
|
if (colSplit.Length >= 2)
|
|
{
|
|
FieldName = colSplit[1];
|
|
bandTitle = colSplit[0];
|
|
}
|
|
}
|
|
if (col.VisibleIndex == 0)
|
|
{
|
|
col.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, TotalFormat) });
|
|
|
|
if (SystemInfo.Instance.GroupSpecialMode)
|
|
{
|
|
//bandedGridView.GroupSummary.Add(new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, col, "合计: {0:#,###}行"));
|
|
bandedGridView.OptionsView.GroupFooterShowMode = GroupFooterShowMode.VisibleAlways;
|
|
}
|
|
else
|
|
{
|
|
GridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, null, TotalFormat) });
|
|
}
|
|
|
|
}
|
|
if (FieldName.Contains("_"))
|
|
{
|
|
string[] colparame = FieldName.Split('_');
|
|
if (colparame.Length >= 2)
|
|
{
|
|
FieldName = colparame[0];
|
|
isNum = Int32.TryParse(colparame[1], out vsNum);
|
|
if (vsNum == 0)
|
|
col.Visible = false;
|
|
if (colparame.Length > 2)
|
|
{
|
|
bool visible = "1".Equals(colparame[2]);
|
|
// 设置底部合计
|
|
if (visible)
|
|
{
|
|
isShowFooter = true;
|
|
string dataFormat = colparame.Length > 3 ? colparame[3] : "";
|
|
col.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(SummaryItemType.Sum, col.FieldName, "{0:" + dataFormat + "}") });
|
|
|
|
if (SystemInfo.Instance.GroupSpecialMode)
|
|
{
|
|
bandedGridView.GroupSummary.Add(new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, col.FieldName, col, "{0:" + dataFormat + "}"));
|
|
bandedGridView.OptionsView.GroupFooterShowMode = GroupFooterShowMode.VisibleAlways;
|
|
}
|
|
else
|
|
{
|
|
GridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(SummaryItemType.Sum, col.FieldName, null, "{0:" + dataFormat + "}") });
|
|
}
|
|
}
|
|
if (colparame.Length > 3)
|
|
{
|
|
string dataFormat = colparame[3];
|
|
if (!string.IsNullOrWhiteSpace(dataFormat))
|
|
{
|
|
col.DisplayFormat.FormatType = FormatType.Custom;
|
|
col.DisplayFormat.FormatString = dataFormat;
|
|
}
|
|
}
|
|
if (colparame.Length > 4)
|
|
{
|
|
//冻结列
|
|
isFixColumn = "1".Equals(colparame[4]);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(bandTitle))
|
|
{
|
|
// 绑定了多表头显示
|
|
GridBand gridBand = bandedGridView.Bands.Cast<GridBand>().FirstOrDefault(x => x.Caption == bandTitle);
|
|
if (gridBand != null)
|
|
{
|
|
gridBand.Columns.Add(col);//
|
|
GridBandColumnCollection gcc = gridBand.Columns;
|
|
}
|
|
bandedGridView.Columns.Add(col);
|
|
}
|
|
else
|
|
{
|
|
// 未绑定多表头则直接显示
|
|
if (bandEmptyRows != null && bandEmptyRows.Contains(col.FieldName))
|
|
{
|
|
gridBandEmpty.Columns.Add(col);
|
|
}
|
|
bandedGridView.Columns.Add(col);
|
|
}
|
|
if (isFixColumn && col.OwnerBand != null)
|
|
{
|
|
autoFixColumns.Add(col);
|
|
}
|
|
|
|
if (isNum) col.Width = vsNum;
|
|
|
|
col.OptionsColumn.AllowEdit = isEdit;
|
|
//col.FieldName = FieldName;
|
|
//col.Name = FieldName;
|
|
col.Caption = FieldName;
|
|
col.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains;
|
|
col.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList;
|
|
col.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
|
bandedGridView.OptionsView.ShowFooter = isShowFooter;
|
|
}
|
|
|
|
|
|
foreach (IGrouping<GridBand, BandedGridColumn> group in autoFixColumns.GroupBy(x => x.OwnerBand).ToList())
|
|
{
|
|
GridBand gridBand = group.Key;
|
|
List<BandedGridColumn> fixColumns = group.ToList();
|
|
List<BandedGridColumn> visibleColumns = gridBand.Columns.Cast<BandedGridColumn>().Where(x => x.Visible && x.Width > 0).ToList();
|
|
if (visibleColumns.Count > 0 && visibleColumns.All(x => fixColumns.Contains(x)))
|
|
{
|
|
if (!frozenGridBands.Contains(gridBand)) frozenGridBands.Add(gridBand);
|
|
gridBand.Fixed = FixedStyle.Left;
|
|
}
|
|
else
|
|
{
|
|
foreach (BandedGridColumn fixColumn in fixColumns)
|
|
{
|
|
if (fixColumn.OwnerBand != null)
|
|
{
|
|
FixLeftItemClick(fixColumn, EventArgs.Empty);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
bandedGridView.EndDataUpdate();
|
|
//this.bandedGridView.DataSource = bandedGridView.DataSource as DataTable;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:重写OnGridViewCellValueChanged</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-09-18 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="KeyEventArgs" /> instance containing the event data.</param>
|
|
//protected void OnGridViewCellValueChanged(object sender, CellValueChangedEventArgs e)
|
|
//{
|
|
// int index = this.GridView.GetFocusedDataSourceRowIndex();
|
|
// string columnName = e.Column.FieldName;
|
|
// if (!modifyThePosition.ContainsKey(index))
|
|
// {
|
|
// modifyThePosition.Add(index, columnName);
|
|
// }
|
|
// else
|
|
// {
|
|
// if (!modifyThePosition[index].Equals(columnName)) modifyThePosition[index] = modifyThePosition[index] + "," + columnName;
|
|
// }
|
|
//}
|
|
|
|
|
|
protected void OnGridViewCellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
GridView gridView = this.gridControl.MainView as GridView;
|
|
DataTable dataTable = this.gridControl.DataSourceTable();
|
|
if (e.Column.Tag == null) return;
|
|
GridColumnModel model = e.Column.Tag as GridColumnModel;
|
|
if (model == null) return;
|
|
//值改变时,如果是验证是否重复的列报错就清除
|
|
if (RepeatedVerificationNames.Count > 0)
|
|
{
|
|
DataColumn[] datas = this.GridView.GetDataRow(e.RowHandle).GetColumnsInError();
|
|
foreach (DataColumn item in datas)
|
|
{
|
|
if (this.GridView.GetDataRow(e.RowHandle).GetColumnError(item.ColumnName).Equals("数据重复"))
|
|
{
|
|
this.GridView.GetDataRow(e.RowHandle).ClearErrors();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
int rowHandle = gridView.GetDataSourceRowIndex(e.RowHandle);
|
|
|
|
//根据某一列的值自动填充对应值
|
|
if (this.AutoPadDataReleColList.Count > 0)
|
|
{
|
|
foreach (GridColumnModel selectColumnModel in AutoPadDataReleColList)
|
|
{
|
|
if (!string.IsNullOrEmpty(selectColumnModel.AutoPadDataReleColName))
|
|
{
|
|
string value = dataTable.Rows[rowHandle][selectColumnModel.FieldName] + "";
|
|
string[] dataReleColNames = selectColumnModel.AutoPadDataReleColName.TrimEnd(',').Split(',');
|
|
if (dataReleColNames.Contains(e.Column.FieldName))
|
|
{
|
|
DataRow[] selectRows = dataTable.Select().Where(n => n[selectColumnModel.FieldName].Equals(value)).ToArray();
|
|
foreach (DataRow selectRow in selectRows)
|
|
{
|
|
int dataSourceIndex = dataTable.Rows.IndexOf(selectRow);
|
|
int index = this.bandedGridView.GetRowHandle(dataSourceIndex);
|
|
selectRow[e.Column.FieldName] = e.Value;
|
|
//关联
|
|
if (!string.IsNullOrEmpty(model.UnionFields))
|
|
{
|
|
this.SetUnionValue(model, e.Value + "", index);
|
|
}
|
|
//计算规则配置在结果字段上,所以无需验证当前操作控件
|
|
this.SetCalcValue(model, e.Value + "", index);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//关联
|
|
if (!string.IsNullOrEmpty(model.UnionFields))
|
|
{
|
|
this.SetUnionValue(model, e.Value + "", e.RowHandle);
|
|
}
|
|
//计算规则配置在结果字段上,所以无需验证当前操作控件
|
|
this.SetCalcValue(model, e.Value + "", rowHandle);
|
|
this.SetUpperValue(model, e.RowHandle, e.Value + "");
|
|
this.SetDisableColumn(model, e.RowHandle, e.Value + "");
|
|
//验证数据长度
|
|
if (model.LimitLength > 0 && e.Value != null)
|
|
{
|
|
DataRow HandleRow = this.bandedGridView.GetDataRow(e.RowHandle);
|
|
int MaxInputLength = System.Text.Encoding.Default.GetBytes(e.Value.ToString()).Length;
|
|
if (model.LimitLength < MaxInputLength)
|
|
HandleRow.SetColumnError(HandleRow.Table.Columns[e.Column.ColumnHandle], "当前输入文本超过设定长度!");//满足条件设置错误信息
|
|
else
|
|
HandleRow.ClearErrors();//清除错误信息
|
|
}
|
|
|
|
int isRepeat = 0;
|
|
var rows = this.gridControl.DataSourceTable().Select().ToList().Where(n => n[e.Column.FieldName].Equals(Convert.ChangeType(e.Value, e.Column.ColumnType)));
|
|
if (isRepeat == 1 && !string.IsNullOrEmpty(e.Value.ToString()) && rows.Count() > 0)
|
|
{
|
|
MessageUtil.Show("不能输入重复值!");
|
|
this.bandedGridView.SetRowCellValue(e.RowHandle, e.Column, string.Empty);
|
|
this.bandedGridView.FocusedRowHandle = e.RowHandle;
|
|
this.bandedGridView.FocusedColumn = e.Column;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:重写BandedGridViewKeyDown</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-09-18 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="KeyEventArgs" /> instance containing the event data.</param>
|
|
protected override void OnGridViewKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
// 替换本列下所有数据为当前单元格数据
|
|
if (e.KeyCode == Keys.F6 || e.KeyCode == Keys.F7)
|
|
{
|
|
GridColumn column = this.bandedGridView.FocusedColumn;
|
|
|
|
if (column != null &&
|
|
column.OptionsColumn.AllowEdit &&
|
|
this.bandedGridView.RowCount > 0 &&
|
|
this.bandedGridView.OptionsBehavior.Editable)
|
|
{
|
|
// 允许操作
|
|
int focusedRowHandle = this.bandedGridView.FocusedRowHandle;
|
|
int totalRowCount = this.bandedGridView.RowCount;
|
|
GridCell[] cells = this.bandedGridView.GetSelectedCells();
|
|
|
|
if (cells.Length == 1 && focusedRowHandle + 1 < totalRowCount)
|
|
{
|
|
DataTable sourceTab = GridView.GridControl.DataSourceTable();
|
|
if (sourceTab.Columns.Contains("PrecomputedMaxDate") && column.Tag == null)
|
|
{
|
|
return;
|
|
}
|
|
if (MessageUtil.Show(e.KeyCode == Keys.F6 ? ResourceKeys.IsReplaceAllEmptyColumn : ResourceKeys.IsReplaceAllColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
|
|
{
|
|
object obj = this.bandedGridView.GetFocusedRowCellValue(column);
|
|
if (obj != null)
|
|
{
|
|
for (int i = focusedRowHandle; i < totalRowCount; i++)
|
|
{
|
|
bandedGridView.FocusedRowHandle = i;
|
|
object obj2 = bandedGridView.GetRowCellValue(i, column);
|
|
if (e.KeyCode == Keys.F6)
|
|
{
|
|
// F6 覆盖当前列下所有为空的列
|
|
if (string.IsNullOrEmpty(obj2 + ""))
|
|
bandedGridView.SetRowCellValue(i, column, obj);
|
|
}
|
|
else
|
|
{
|
|
// F7 覆盖当前列下所有列
|
|
bandedGridView.SetRowCellValue(i, column, obj);
|
|
}
|
|
bandedGridView.PostEditor();
|
|
}
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 已当前列为基准,按顺序生成本列数据
|
|
if (e.KeyCode == Keys.F8)
|
|
{
|
|
GridColumn column = this.bandedGridView.FocusedColumn;
|
|
|
|
if (column != null &&
|
|
column.OptionsColumn.AllowEdit &&
|
|
this.bandedGridView.RowCount > 0 &&
|
|
this.bandedGridView.OptionsBehavior.Editable)
|
|
{
|
|
// 允许操作
|
|
int focusedRowHandle = this.bandedGridView.FocusedRowHandle;
|
|
int totalRowCount = this.bandedGridView.RowCount;
|
|
GridCell[] cells = this.bandedGridView.GetSelectedCells();
|
|
|
|
if (cells.Length == 1 && focusedRowHandle + 1 < totalRowCount)
|
|
{
|
|
if (MessageUtil.Show(ResourceKeys.IsGenerateAllColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
|
|
{
|
|
bool isExec = false;
|
|
long value = 0;
|
|
object obj = this.bandedGridView.GetFocusedRowCellValue(column);
|
|
|
|
if (!string.IsNullOrEmpty(obj + ""))
|
|
{
|
|
isExec = Int64.TryParse(obj + "", out value);
|
|
}
|
|
else
|
|
{
|
|
isExec = MessageUtil.Show(ResourceKeys.SelectColumnValueTypeNotNumber, MessageBoxButtons.YesNo) == DialogResult.Yes;
|
|
value = 1;
|
|
}
|
|
|
|
if (isExec)
|
|
{
|
|
// 继续执行
|
|
for (int i = focusedRowHandle; i <= totalRowCount; i++)
|
|
{
|
|
bandedGridView.FocusedRowHandle = i;
|
|
bandedGridView.SetRowCellValue(i, column, value++);
|
|
bandedGridView.PostEditor();
|
|
}
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
// 复制单元格
|
|
if (e.Control && e.KeyCode == Keys.C)
|
|
{
|
|
GridCell[] cells;
|
|
//复选框状态
|
|
if (GridView.OptionsSelection.MultiSelect == true && GridView.OptionsSelection.MultiSelectMode == GridMultiSelectMode.CheckBoxRowSelect && GridView.OptionsSelection.EnableAppearanceFocusedCell == false && this.GridView.GetSelectedRows().Length == 0)
|
|
{
|
|
//GridViewInfo info = gridView.GetViewInfo() as GridViewInfo;
|
|
//GridCellInfo cellInfo = info.GetGridCellInfo(gridView.FocusedRowHandle, gridView.FocusedColumn);
|
|
GridCell cell = new GridCell(GridView.FocusedRowHandle, GridView.FocusedColumn);
|
|
cells = new GridCell[] { cell };
|
|
}
|
|
else
|
|
cells = this.GridView.GetSelectedCells();
|
|
if (cells.Length == 1 || GridView.OptionsView.AllowCellMerge)
|
|
{
|
|
object obj = GridView.GetFocusedRowCellValue(GridView.FocusedColumn);
|
|
if (obj != null)
|
|
{
|
|
Clipboard.SetDataObject(obj + "");
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GridView.CopyToClipboard();
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
if (e.Modifiers.CompareTo(Keys.Control) == 0 && e.KeyCode == Keys.V)
|
|
{
|
|
// 清除排序
|
|
this.GridView.Columns.ClearAllSort();
|
|
//if (this.gridView.IsFindPanelVisible)
|
|
//{
|
|
// MessageUtil.Show("搜索模式下无法粘贴行.");
|
|
// return;
|
|
//}
|
|
object _objData = null;
|
|
IDataObject dataObj = Clipboard.GetDataObject();
|
|
|
|
if (dataObj.GetDataPresent(DataFormats.Text))
|
|
_objData = dataObj.GetData(DataFormats.Text);
|
|
|
|
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;
|
|
GridColumn focColumn = this.GridView.FocusedColumn;
|
|
focColumn = focColumn == null ? this.GridView.Columns[0] : focColumn;
|
|
if (focColumn != null)
|
|
{
|
|
DataTable table = GridView.GridControl.DataSourceTable();
|
|
int beforeNumber = table.Rows.Count;
|
|
_rowNumber = this.GridView.FocusedRowHandle;
|
|
if (_rowNumber < 0)
|
|
{
|
|
_rowNumber = 0;
|
|
}
|
|
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;
|
|
DataRow newRow = null;
|
|
if (_rowNumber + 1 > table.Rows.Count)
|
|
{
|
|
newRow = table.NewRow();
|
|
//table.Rows.Add(newRow);
|
|
GridColumnCollection gridColumns = this.GridView.Columns;
|
|
this.GridView.FocusedRowHandle = _rowNumber;
|
|
foreach (GridColumn col in gridColumns)
|
|
{
|
|
GridColumnModel model = col.Tag as GridColumnModel;
|
|
string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue);
|
|
|
|
if (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.GridView.FocusedRowHandle = _rowNumber;
|
|
if (_arrayStr2.Length == 0)
|
|
_arrayStr2[0] = _arrayRowStr[i];
|
|
int _colNumber = beforeNumber == 0 && this.GridView.OptionsView.NewItemRowPosition != NewItemRowPosition.Bottom ? 0 : focColumn.VisibleIndex;
|
|
for (int j = 0; j < _arrayStr2.Length; j++)
|
|
{
|
|
GridColumn col = GridView.VisibleColumns[_colNumber];
|
|
GridColumnModel model = col.Tag as GridColumnModel;
|
|
if (DateTime.TryParse(col.FieldName, out _) || (model.CanCopy || ((GridView.OptionsBehavior.Editable) && (GridView.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;
|
|
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)
|
|
{
|
|
GridView.SetRowCellValue(_rowNumber, col, value);
|
|
}
|
|
else
|
|
{
|
|
newRow[col.FieldName] = value;
|
|
}
|
|
//gridView.SetRowCellValue(_rowNumber, col, value);
|
|
}
|
|
_colNumber += 1;
|
|
}
|
|
_rowNumber += 1;
|
|
if (newRow != null)
|
|
{
|
|
// 其它处理(如绑定左侧树结构数据)
|
|
if (OnParseGridDataCallBack != null) this.OnParseGridDataCallBack(newRow);
|
|
table.Rows.Add(newRow);
|
|
}
|
|
else
|
|
{
|
|
GridView.UpdateCurrentRow();
|
|
}
|
|
}
|
|
this.GridView.ShowEditor();
|
|
e.Handled = true;
|
|
//SendKeys.Send("{Esc}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 右键加载
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void OnGridViewPopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
////没有设置右键时,ContextMenuStrip为空。右键菜单可能会必须选中才能关闭,设置空ContextMenuStrip可用解决
|
|
if (this.gridControl.ContextMenuStrip == null)
|
|
{
|
|
ContextMenuStrip MenuStrip = new ContextMenuStrip();
|
|
this.gridControl.ContextMenuStrip = MenuStrip;
|
|
}
|
|
|
|
|
|
if (e.MenuType == GridMenuType.Column)
|
|
{
|
|
GridViewColumnMenu columnMenu = e.Menu as GridViewColumnMenu;
|
|
GridViewColumnMenu BANDMenu = e.Menu as GridViewBandMenu;
|
|
DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", SaveItemClick);
|
|
DXMenuItem itemResetColumn = new DXMenuItem("重置表格属性", ResetItemClick);
|
|
DXMenuItem itemFixLeft = new DXMenuItem("冻结列", FixLeftItemClick);
|
|
DXMenuItem itemFixLeftAll = new DXMenuItem("冻结列(所有列)", FixLeftAllItemClick);
|
|
DXMenuItem itemUnFix = new DXMenuItem("清除冻结", UnFixItemClick);
|
|
DXMenuItem itemUnFixAll = new DXMenuItem("清除冻结(所有列)", itemUnFixAllClick);
|
|
DXMenuItem itemSetExportColumn = new DXMenuItem("设置导出列", SetExportItemClick);
|
|
DXMenuItem itemExportColumn = new DXMenuItem("导出表格数据", ExportItemClick);
|
|
DXMenuItem itemPrintColumn = new DXMenuItem("打印表格数据", PrintItemClick);
|
|
DXMenuItem itemSortColumn = new DXMenuItem("清除全部列排序", ClearSortItemClick);
|
|
DXMenuItem itemMultifunction = new DXMenuItem("多功能设置分组", Multifunction);
|
|
DXMenuItem itemColumnSift = new DXMenuItem("一键设置列筛选条件", InstColumnSift);
|
|
DXMenuItem itemChartColumn = new DXMenuItem("一键图表展示", ChartShowClick);
|
|
DXMenuItem itemBsChartColumn = new DXMenuItem("一键Bs图表展示", BsChartShowClick);
|
|
DXMenuItem itemBsChartShowClick = new DXMenuItem("一键所有列属性设置", InstAllColumn);
|
|
if (columnMenu.Column == null)
|
|
{
|
|
GridBand gridBand = (e.HitInfo as DevExpress.XtraGrid.Views.BandedGrid.ViewInfo.BandedGridHitInfo).Band;
|
|
itemFixLeft.Tag = itemFixLeftAll.Tag = itemUnFix.Tag = gridBand;
|
|
//如果先冻结了二级表头,在准备冻结对应的一级表头,则无法冻结
|
|
if (frozenColumnGridBands.ContainsValue(gridBand))
|
|
{
|
|
columnMenu.Items.AddRange(new DXMenuItem[] { itemUnFix, itemUnFixAll });
|
|
}
|
|
else
|
|
{
|
|
columnMenu.Items.AddRange(new DXMenuItem[] { itemFixLeft, itemUnFix, itemUnFixAll });
|
|
}
|
|
}
|
|
else
|
|
{
|
|
itemColumnSift.Tag = itemFixLeft.Tag = itemFixLeftAll.Tag = itemUnFix.Tag = e.HitInfo.Column as BandedGridColumn;
|
|
GridBand gridBand = (e.HitInfo.Column as BandedGridColumn).OwnerBand;
|
|
if (frozenGridBands.Contains(gridBand))
|
|
{
|
|
columnMenu.Items.AddRange(new DXMenuItem[] { itemSaveColumn, itemResetColumn, itemFixLeft, itemUnFixAll, itemColumnSift });
|
|
}
|
|
else
|
|
{
|
|
columnMenu.Items.AddRange(new DXMenuItem[] { itemSaveColumn, itemResetColumn, itemFixLeft, itemUnFix, itemUnFixAll, itemColumnSift });
|
|
}
|
|
}
|
|
columnMenu.Items.Add(itemSetExportColumn);
|
|
if (ExportPermission) columnMenu.Items.Add(itemExportColumn);
|
|
columnMenu.Items.AddRange(new DXMenuItem[] { itemPrintColumn, itemSortColumn, itemMultifunction, itemBsChartShowClick });
|
|
}
|
|
else if (e.MenuType == GridMenuType.Summary)
|
|
{
|
|
GridHitInfo info;
|
|
Point pt = this.bandedGridView.GridControl.PointToClient(System.Windows.Forms.Control.MousePosition);
|
|
info = this.bandedGridView.CalcHitInfo(pt);
|
|
DXMenuCheckItem menuItemCell = new DXMenuCheckItem();
|
|
menuItemCell.Tag = info;
|
|
menuItemCell.Caption = "复制合计";
|
|
menuItemCell.Click += new EventHandler(OnMenuItem_Click);
|
|
DXMenuCheckItem menuItemRow = new DXMenuCheckItem();
|
|
menuItemRow.Caption = "复制合计行";
|
|
menuItemRow.Tag = info;
|
|
menuItemRow.Click += new EventHandler(OnMenuItem_Click);
|
|
e.Menu.Items.AddRange(new DXMenuCheckItem[] { menuItemCell, menuItemRow });
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///冻结列列名和对应的一级标题
|
|
/// </summary>
|
|
public Dictionary<string, GridBand> frozenColumnGridBands = new Dictionary<string, GridBand>();
|
|
/// <summary>
|
|
///直接冻结的一级标题
|
|
/// </summary>
|
|
public List<GridBand> frozenGridBands = new List<GridBand>();
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:保存多表格属性</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2022-05-19 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
|
protected virtual void SaveItemClick(object sender, EventArgs e)
|
|
{
|
|
if (string.IsNullOrEmpty(this.CustomColumKey))
|
|
{
|
|
MessageUtil.Show(ResourceKeys.NotSettingResetColumn);
|
|
return;
|
|
}
|
|
if (this.ColumnList == null || this.ColumnList.Count == 0)
|
|
{
|
|
MessageUtil.Show("动态列无法保存属性");
|
|
return;
|
|
}
|
|
|
|
DataRow rowItem = null;
|
|
bool success = BaseImpl.HasExistsDataRow(ResourceKeys.SettingTableName, "formKey", CustomColumKey.ToString(), string.Format(" and OperatorId='{0}' ", ERPInfo.Instance.UserId), out rowItem);
|
|
if (!success)
|
|
{
|
|
MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable);
|
|
return;
|
|
}
|
|
|
|
if (MessageUtil.Show(ResourceKeys.IsSaveColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
|
|
{
|
|
try
|
|
{
|
|
if (rowItem == null)
|
|
{
|
|
success = this.bandedGridView.SaveCustomColumnToDatabase(this.CustomColumKey);
|
|
}
|
|
else
|
|
{
|
|
success = this.bandedGridView.UpdateCustomColumnToDatabase(this.CustomColumKey);
|
|
}
|
|
#region old
|
|
if (ERPInfo.Instance.UserName == "管理员")
|
|
{
|
|
string[] keys = CustomColumKey.Split('_');
|
|
if (keys.Count() > 1)
|
|
{
|
|
string ModuleTypes = keys[0];
|
|
string ModuleKey = keys[1];
|
|
int ModelType = ControlType.ModelType(ModuleTypes);
|
|
string tmpsql = string.Empty;
|
|
string colTable = string.Empty;
|
|
string keyField = string.Empty;
|
|
string stepCode = string.Empty;
|
|
int keyOrder = 0;
|
|
//DXMenuItem item = sender as DXMenuItem;
|
|
//GridView grv = item.Tag as GridView;
|
|
//基础档案主表
|
|
if (ModelType == 1 || ModelType == 2)
|
|
{
|
|
colTable = "p_systemwordbooktab";
|
|
tmpsql = "select top 1 orderid from p_systemwordbooktab where formKey='" + ModuleKey + "' order by orderid";
|
|
object obj = SqlHelper.ExecuteScalar(CommandType.Text, tmpsql);
|
|
if (obj != null)
|
|
{
|
|
keyField = "formKey";
|
|
keyOrder = Convert.ToInt32(obj);
|
|
}
|
|
}
|
|
if (ModelType == 2 && string.IsNullOrEmpty(keyField))
|
|
{
|
|
colTable = "p_systemDlltabDetailGrid";
|
|
tmpsql = "select top 1 orderid from p_systemDlltabDetailGrid where detailKey='" + ModuleKey + "' order by orderid";
|
|
object obj = SqlHelper.ExecuteScalar(CommandType.Text, tmpsql);
|
|
if (obj != null)
|
|
{
|
|
keyField = "detailKey";
|
|
keyOrder = Convert.ToInt32(obj);
|
|
}
|
|
}
|
|
////单据明细
|
|
if (ModelType == 3)
|
|
{
|
|
colTable = "p_systembillDetail";
|
|
keyField = "typecode";
|
|
ModuleKey = Model.ModuleCode;
|
|
}
|
|
////单据来源主信息
|
|
if (ModelType == 4)
|
|
{
|
|
colTable = "p_systembillsourcegrid";
|
|
keyField = "sourcekey";
|
|
}
|
|
////单据来源明细信息
|
|
if (ModelType == 5)
|
|
{
|
|
colTable = "p_systembillsourcedetail";
|
|
keyField = "sourcekey";
|
|
}
|
|
//单据审核列表
|
|
if (ModelType == 6)
|
|
{
|
|
colTable = "p_systembillstepgrid";
|
|
keyField = "typeCode";
|
|
if (!string.IsNullOrEmpty(ModuleKey) && keys.Length == 5)
|
|
{
|
|
ModuleKey = keys[2];
|
|
stepCode = keys[3];
|
|
}
|
|
}
|
|
//基础档案审核列表
|
|
if (ModelType == 7)
|
|
{
|
|
colTable = "p_systemdlltabflowstepgrid";
|
|
keyField = "typeCode";
|
|
if (!string.IsNullOrEmpty(ModuleKey) && keys.Length == 5)
|
|
{
|
|
ModuleKey = keys[2];
|
|
stepCode = keys[3];
|
|
}
|
|
}
|
|
// 单据审核附加信息
|
|
if (ModelType == 8)
|
|
{
|
|
colTable = "p_systembillauditAttachDetail";
|
|
keyField = "attachKey";
|
|
}
|
|
tmpsql = "";
|
|
if (ModelType != 0 && !string.IsNullOrEmpty(keyField))
|
|
{
|
|
foreach (GridColumn col in GridView.Columns)
|
|
{
|
|
//+ ((ModelType == 1) && (col.VisibleIndex == -1) ? " ,vislble=1" : "")
|
|
tmpsql = tmpsql + "update " + colTable + " set width=" + col.Width.ToString() + (col.VisibleIndex != -1 ? ",orderid=" + (col.VisibleIndex + keyOrder + (ModelType == 1 ? 1 : 0)).ToString() : "") +
|
|
" where " + keyField + "='" + ModuleKey + "' and fieldname='" + col.FieldName + "'";
|
|
if (ModelType == 1 || ModelType == 2)
|
|
tmpsql = tmpsql + " and orderid<>" + keyOrder.ToString();
|
|
if (ModelType == 7 || ModelType == 6)
|
|
tmpsql = tmpsql + " and stepCode=" + stepCode;
|
|
tmpsql = tmpsql + ";";
|
|
}
|
|
//MessageBox.Show(tmpsql);
|
|
SqlHelper.ExecuteNonQuery(tmpsql);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
MessageUtil.Show(success ? ResourceKeys.SaveSuccess : ResourceKeys.SaveFault);
|
|
}
|
|
catch (SqlException sex)
|
|
{
|
|
if (sex.Message.Contains(ResourceKeys.FieldLenIsShort) &&
|
|
MessageUtil.Show(ResourceKeys.SaveFault + "\r\n" + ResourceKeys.CanUpgradeTable, MessageBoxButtons.YesNo) == DialogResult.Yes &&
|
|
BaseImpl.UpdateTableField(ResourceKeys.SettingTableName, "formKey", "varchar(200)"))
|
|
{
|
|
MessageUtil.Show(ResourceKeys.UpdateSuccess);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Instance.WriteError(ex);
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:验证表格列是否有为空的值</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-12-08 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public override bool VerifyNull()
|
|
{
|
|
DataTable table = this.GridControl.DataSourceTable().TrimEmptyRows();
|
|
List<GridColumnModel> columns = this.ColumnList.FindAll(x => x.CanNull);
|
|
|
|
foreach (DataRow item in table.Rows)
|
|
{
|
|
foreach (GridColumnModel model in columns)
|
|
{
|
|
BandedGridColumn column = this.bandedGridView.Columns[model.FieldName];
|
|
string value = item[model.FieldName] + "";
|
|
string displayText = this.bandedGridView.GetDisplayTextByColumnValue(column, item[model.FieldName]);
|
|
if (string.IsNullOrWhiteSpace(value) || string.IsNullOrWhiteSpace(displayText))
|
|
{
|
|
MessageUtil.Show(string.Format(ResourceKeys.NullField, model.FieldText));
|
|
this.bandedGridView.Focus();
|
|
this.bandedGridView.SelectRowHandler(table.Rows.IndexOf(item));
|
|
this.bandedGridView.FocusedColumn = this.bandedGridView.Columns[model.FieldName];
|
|
this.bandedGridView.SelectCell(bandedGridView.FocusedRowHandle, this.bandedGridView.Columns[model.FieldName]);
|
|
this.bandedGridView.ShowEditorByMouse();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 冻结
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected virtual void FixLeftItemClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DXMenuItem item = sender as DXMenuItem;
|
|
BandedGridColumn bgc = sender is BandedGridColumn ? sender as BandedGridColumn : item.Tag as BandedGridColumn;
|
|
if (bgc != null)
|
|
{
|
|
if (frozenColumnGridBands.ContainsKey(bgc.FieldName)) return;
|
|
if (bgc.OwnerBand.Columns.Count == 1)
|
|
{
|
|
//当前一级目录的子目录全部是冻结状态,就把一级目录冻结了,并合并之前的子目录
|
|
GridBand gridBand = bgc.OwnerBand;
|
|
if (!frozenGridBands.Contains(gridBand)) frozenGridBands.Add(gridBand);
|
|
gridBand.Fixed = FixedStyle.Left;
|
|
|
|
//合并一级标题
|
|
List<string> foundKeys = new List<string>();//对应子目录
|
|
foreach (KeyValuePair<string, GridBand> pair in frozenColumnGridBands)
|
|
{
|
|
if (pair.Value == gridBand)
|
|
{
|
|
BandedGridColumn gridColumn = this.bandedGridView.Columns[pair.Key + ""];
|
|
if (gridColumn != null)
|
|
{
|
|
foundKeys.Add(pair.Key);
|
|
bandedGridView.Bands.Remove(gridColumn.OwnerBand);//删除当前一级目录
|
|
gridColumn.OwnerBand = gridBand;//设置当前的一级目录
|
|
}
|
|
}
|
|
|
|
}
|
|
foreach (string name in foundKeys)
|
|
{
|
|
frozenColumnGridBands.Remove(name);
|
|
}
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
frozenColumnGridBands.Add(bgc.FieldName, bgc.OwnerBand);
|
|
GridBand gb = new GridBand();
|
|
bandedGridView.Bands.Add(gb);
|
|
bgc.OwnerBand = gb;
|
|
gb.Fixed = FixedStyle.Left;
|
|
}
|
|
else
|
|
{
|
|
GridBand gridBand = item.Tag as GridBand;
|
|
if (!frozenGridBands.Contains(gridBand)) frozenGridBands.Add(gridBand);
|
|
gridBand.Fixed = FixedStyle.Left;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清除冻结
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected virtual void UnFixItemClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DXMenuItem item = sender as DXMenuItem;
|
|
BandedGridColumn bgc = item.Tag as BandedGridColumn;
|
|
if (bgc != null)
|
|
{
|
|
if (!frozenColumnGridBands.ContainsKey(bgc.FieldName)) return;
|
|
bandedGridView.Bands.Remove(bgc.OwnerBand);//删除当前一级目录
|
|
bgc.OwnerBand = frozenColumnGridBands[bgc.FieldName];//设置原本记录的一级目录
|
|
frozenColumnGridBands.Remove(bgc.FieldName);
|
|
string[] columnsName = saveGridBandColumn[bgc.OwnerBand].Split('^');
|
|
int index = Array.IndexOf(columnsName, bgc.FieldName);
|
|
int i = 0;
|
|
foreach (string name in columnsName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(name)) continue;
|
|
BandedGridColumn gridColumn = bgc.OwnerBand.Columns[name];
|
|
if (gridColumn != null)
|
|
{
|
|
gridColumn.ColVIndex = i;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
GridBand gridBand = item.Tag as GridBand;
|
|
frozenGridBands.Remove(gridBand);
|
|
gridBand.Fixed = FixedStyle.None;
|
|
int index = saveGridBands.FindIndex(x => x.Caption.Equals(gridBand.Caption));
|
|
this.bandedGridView.Bands.MoveTo(index + 1, gridBand);
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清除冻结(全部列)
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected virtual void itemUnFixAllClick(object sender, EventArgs e)
|
|
{
|
|
|
|
|
|
foreach (string columnName in frozenColumnGridBands.Keys)
|
|
{
|
|
BandedGridColumn bgc = bandedGridView.Columns[columnName];
|
|
GridBand band = bgc.OwnerBand;
|
|
bandedGridView.Bands.Remove(band);
|
|
bgc.OwnerBand = frozenColumnGridBands[bgc.FieldName];
|
|
string[] columnsName = saveGridBandColumn[bgc.OwnerBand].Split('^');
|
|
int index = Array.IndexOf(columnsName, bgc.FieldName);
|
|
int i = 0;
|
|
foreach (string name in columnsName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(name)) continue;
|
|
BandedGridColumn gridColumn = bgc.OwnerBand.Columns[name];
|
|
if (gridColumn != null)
|
|
{
|
|
gridColumn.ColVIndex = i;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
frozenColumnGridBands = new Dictionary<string, GridBand>();
|
|
|
|
|
|
foreach (GridBand gridBand in frozenGridBands)
|
|
{
|
|
gridBand.Fixed = FixedStyle.None;
|
|
int index = saveGridBands.FindIndex(x => x.Caption.Equals(gridBand.Caption));
|
|
this.bandedGridView.Bands.MoveTo(index + 1, gridBand);
|
|
}
|
|
frozenGridBands = new List<GridBand>();
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:重置表格属性</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-02-01 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
|
protected virtual void ResetItemClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (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.bandedGridView.ResetCustomColumnToDatabase(this.CustomColumKey);
|
|
|
|
this.SetCustomColumns(false);
|
|
if (success)
|
|
{
|
|
itemUnFixAllClick(null, null);
|
|
foreach (GridBand band in this.bandedGridView.Bands)
|
|
{
|
|
if (saveGridBandColumn.ContainsKey(band))
|
|
{
|
|
string[] columnsName = saveGridBandColumn[band].Split('^');
|
|
int i = 0;
|
|
foreach (string name in columnsName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(name)) continue;
|
|
BandedGridColumn gridColumn = bandedGridView.Columns[name];
|
|
if (gridColumn != null)
|
|
{
|
|
gridColumn.ColVIndex = i;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//foreach (BandedGridColumn column in this.bandedGridView.Columns)
|
|
//{
|
|
// string[] columnsName = saveGridBandColumn[column.OwnerBand].Split('^');
|
|
// int index = Array.IndexOf(columnsName, column.FieldName);
|
|
// column.VisibleIndex = index;
|
|
//}
|
|
|
|
|
|
}
|
|
MessageUtil.Show(success ? ResourceKeys.ResetSuccess : ResourceKeys.ResetFault);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:清除全部列排序</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-02-01 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
|
protected virtual void ClearSortItemClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
this.bandedGridView.Columns.ClearAllSort();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:多功能设置列条件筛选</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2021-08-02 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
|
protected virtual void Multifunction(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
//DataTable newDt = this.SetDealWithValueTab();
|
|
FrmGridSift frmGridSift = new FrmGridSift();
|
|
frmGridSift.CustomColumKey = this.CustomColumKey;
|
|
//frmGridSift.source = newDt;
|
|
frmGridSift.ParentGridEx = this;
|
|
DllModule module = new DllModule
|
|
{
|
|
DllName = "",
|
|
Id = this.Model.ModuleCode,
|
|
Name = this.Model.FormText,
|
|
BeforePage = ERPInfo.Instance.PageControl.SelectedTabPage
|
|
};
|
|
module.ModuleForm = frmGridSift;
|
|
string guid = Guid.NewGuid().ToString();
|
|
DevExpress.XtraTab.XtraTabPage tp = new DevExpress.XtraTab.XtraTabPage();
|
|
tp.Tag = guid;
|
|
// 这个必须有不然会提示:"不能向tabControl中添加顶级控件"
|
|
frmGridSift.TopLevel = false;
|
|
frmGridSift.Location = new Point(0, 0);
|
|
frmGridSift.Dock = DockStyle.Fill;
|
|
frmGridSift.FormBorderStyle = FormBorderStyle.None;
|
|
tp.Text = this.Model.FormText + "分组统计";
|
|
tp.AutoScroll = true;
|
|
tp.AutoScroll = true;
|
|
tp.Controls.Add(frmGridSift);
|
|
tp.ShowCloseButton = DefaultBoolean.True;
|
|
tp.Dock = DockStyle.Fill;
|
|
ERPInfo.Instance.PageControl.TabPages.Add(tp);
|
|
ERPInfo.Instance.PageControl.SelectedTabPage = tp;
|
|
ERPInfo.Instance.ModuleForms.Add(guid, module);
|
|
frmGridSift.Show();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:设置条件筛选列弹出设置</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2021-08-02 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The sender.</param>
|
|
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
|
protected virtual void InstColumnSift(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DXMenuItem item = sender as DXMenuItem;
|
|
BandedGridColumn gridColumn = item.Tag as BandedGridColumn;
|
|
// 保存流转步骤
|
|
FilterState filterState = new FilterState();
|
|
filterState.LabelObj.Text = string.Format("设置列{0}筛选条件:", gridColumn.Caption);
|
|
if (filterState.ShowDialog() == DialogResult.OK)
|
|
{
|
|
HeaderColumnSift = gridColumn;
|
|
SiftEnumObj = filterState.SiftEnumObj;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
|
|
}
|
|
public void OnShowFilterPopupCheckedListBox(object sender, DevExpress.XtraGrid.Views.Grid.FilterPopupCheckedListBoxEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
|
|
BandedGridView gridView = (BandedGridView)sender;
|
|
|
|
string actStr = this.bandedGridView.ActiveFilterString;//获取筛选条件
|
|
string[] actStr_list = actStr.Split(new string[] { "And" }, StringSplitOptions.None);
|
|
DataTable datatable = new DataTable();
|
|
|
|
|
|
if ((!actStr_list[0].Contains(e.Column.FieldName) || (this.bandedGridView.OptionsView.ShowAutoFilterRow && e.Column.FilterInfo.Type == ColumnFilterType.AutoFilter)) && actStr != "")
|
|
{
|
|
CriteriaOperator criteria_op = this.bandedGridView.ActiveFilterCriteria;
|
|
GroupOperator group_op = new GroupOperator();
|
|
InOperator in_op = new InOperator();
|
|
if (this.bandedGridView.ActiveFilterString != "")
|
|
{
|
|
if (!actStr_list[0].Contains(e.Column.FieldName) && this.bandedGridView.ActiveFilterCriteria.GetType() == typeof(InOperator))
|
|
{
|
|
in_op = this.bandedGridView.ActiveFilterCriteria as InOperator;//获取筛选规则信息
|
|
criteria_op = in_op as CriteriaOperator;
|
|
for (int i = 0; i < in_op.Operands.Count; i++)
|
|
{
|
|
if (in_op.Operands[i].ToString().Contains(e.Column.FieldName))
|
|
{
|
|
in_op.Operands.RemoveRange(i, in_op.Operands.Count - i);
|
|
break;
|
|
}
|
|
else
|
|
continue;
|
|
}
|
|
}
|
|
else if (!actStr_list[0].Contains(e.Column.FieldName) && this.bandedGridView.ActiveFilterCriteria.GetType() == typeof(GroupOperator))
|
|
{
|
|
group_op = this.bandedGridView.ActiveFilterCriteria as GroupOperator;//获取筛选规则信息
|
|
criteria_op = group_op as CriteriaOperator;
|
|
for (int i = 0; i < group_op.Operands.Count; i++)
|
|
{
|
|
if (group_op.Operands[i].ToString().Contains(e.Column.FieldName))
|
|
{
|
|
group_op.Operands.RemoveRange(i, group_op.Operands.Count - i);
|
|
break;
|
|
}
|
|
else
|
|
continue;
|
|
}
|
|
}
|
|
DataView filteredDataView = this.bandedGridView.DataSource as DataView;
|
|
string RowFilter = string.Empty;
|
|
try
|
|
{
|
|
datatable = filteredDataView.Table.Select(DevExpress.Data.Filtering.CriteriaToWhereClauseHelper.GetDataSetWhere(criteria_op)).CopyToDataTable();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
if (RowFilter.Split(new string[] { "And" }, StringSplitOptions.None)[0].Contains(" is null or "))
|
|
{
|
|
if (RowFilter.Contains("And"))
|
|
RowFilter = RowFilter.Substring(0, RowFilter.IndexOf(" or ")) + ")" + RowFilter.Substring(RowFilter.IndexOf(" And "), RowFilter.Length - RowFilter.IndexOf(" And "));
|
|
else if (actStr_list.Length == 1)
|
|
RowFilter = RowFilter.Substring(0, RowFilter.IndexOf(" or ")) + ")";
|
|
else if (actStr_list.Length > 1)
|
|
RowFilter = RowFilter.Substring(0, RowFilter.IndexOf(" or ")) + "))";
|
|
}
|
|
datatable = filteredDataView.Table.Select(RowFilter).CopyToDataTable();
|
|
}
|
|
//List<Object> list = datatable.AsEnumerable().Select(r => r[e.Column.FieldName]).ToList();//获取筛选后的值
|
|
List<Object> list = new List<object>();
|
|
foreach (DataRow row in datatable.Rows)
|
|
{
|
|
if (row[e.Column.FieldName].GetType() == typeof(DateTime))
|
|
list.Add(((DateTime)row[e.Column.FieldName]).ToShortDateString());
|
|
else
|
|
list.Add(row[e.Column.FieldName]);
|
|
}
|
|
DevExpress.XtraEditors.Controls.CheckedListBoxItemCollection _Items = new DevExpress.XtraEditors.Controls.CheckedListBoxItemCollection();
|
|
|
|
for (int i = 0; i < e.CheckedComboBox.Items.Count; i++)
|
|
{
|
|
var Item_value = e.CheckedComboBox.Items[i].Value as FilterItem;
|
|
if (Item_value.Value != null)
|
|
{
|
|
if (Item_value.Value.GetType() == typeof(DateTime) && list.Contains(((DateTime)Item_value.Value).ToShortDateString()))
|
|
_Items.Add(e.CheckedComboBox.Items[i]);
|
|
else if (list.Contains(Item_value.Value))
|
|
_Items.Add(e.CheckedComboBox.Items[i]);
|
|
}
|
|
else if (Item_value.Value == null)
|
|
{
|
|
if (list.Contains(null) || list.Contains("") || list.Contains(DBNull.Value))
|
|
_Items.Add(e.CheckedComboBox.Items[i]);
|
|
}
|
|
//if (Item_value.Value != null && Item_value.Value.GetType() == typeof(DateTime))
|
|
//{
|
|
// if (list.Contains(((DateTime)Item_value.Value).ToShortDateString()))
|
|
// {
|
|
// _Items.Add(e.CheckedComboBox.Items[i]);
|
|
// }
|
|
//}
|
|
//else if (list.Contains(Item_value.Value) && Item_value.Value != null)
|
|
//{
|
|
// _Items.Add(e.CheckedComboBox.Items[i]);
|
|
//}
|
|
//else if (list.Contains(null) && Item_value.Value == null || list.Contains("") && Item_value.Value == null)
|
|
//{
|
|
// _Items.Add(e.CheckedComboBox.Items[i]);
|
|
//}
|
|
}
|
|
e.CheckedComboBox.Items.Clear();
|
|
for (int i = 0; i < _Items.Count; i++)
|
|
{
|
|
e.CheckedComboBox.Items.Add(_Items[i]);
|
|
}
|
|
e.CheckedComboBox.HighlightedItemStyle = HighlightStyle.Skinned;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!SystemInfo.Instance.DisableFilteringQuantity)
|
|
{
|
|
DataTable filterTable = gridView.GetGridViewFilteredAndSortedDataToDataTable();
|
|
DataRow[] dataRowArray = filterTable.Select();
|
|
DevExpress.XtraEditors.Controls.CheckedListBoxItemCollection _Items = new DevExpress.XtraEditors.Controls.CheckedListBoxItemCollection();
|
|
|
|
for (int i = 0; i < e.CheckedComboBox.Items.Count(); i++)
|
|
{
|
|
try
|
|
{
|
|
CheckedListBoxItem checkedListBoxItem = e.CheckedComboBox.Items[i];
|
|
if (checkedListBoxItem.Value is FilterItem)
|
|
{
|
|
FilterItem filterItem = (FilterItem)checkedListBoxItem.Value;
|
|
string text = filterItem.Text;
|
|
object value = filterItem.Value;
|
|
int count = dataRowArray.Where(n => (n[e.Column.FieldName] + "").Equals(value + "")).Count();
|
|
checkedListBoxItem.Description = $"{text} ({count})";
|
|
if (count > 0) _Items.Add(checkedListBoxItem);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
}
|
|
}
|
|
//多表头在使用自带的搜索功能时(ctrl+f),筛选框无法过滤搜索后的内容,根据判断是否有搜索值去手动过滤
|
|
bool isSearch = !string.IsNullOrWhiteSpace(gridView.FindFilterText);
|
|
if (isSearch)
|
|
{
|
|
e.CheckedComboBox.Items.Clear();
|
|
for (int i = 0; i < _Items.Count; i++)
|
|
{
|
|
e.CheckedComboBox.Items.Add(_Items[i]);
|
|
}
|
|
e.CheckedComboBox.HighlightedItemStyle = HighlightStyle.Skinned;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 合计行数据复制
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DXMenuCheckItem menuItemCell = (DXMenuCheckItem)sender;
|
|
if (menuItemCell.Caption.Equals("复制合计行"))
|
|
{
|
|
string copyFooterRowStr = string.Empty;
|
|
foreach (GridColumn col in this.bandedGridView.VisibleColumns)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(copyFooterRowStr) && !string.IsNullOrWhiteSpace(col.SummaryText))
|
|
{
|
|
copyFooterRowStr += string.Format("\t{0}", col.SummaryText);
|
|
}
|
|
else if (string.IsNullOrWhiteSpace(copyFooterRowStr) && !string.IsNullOrWhiteSpace(col.SummaryText))
|
|
{
|
|
copyFooterRowStr += col.SummaryText;
|
|
}
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(copyFooterRowStr)) Clipboard.SetText(copyFooterRowStr);
|
|
}
|
|
else
|
|
{
|
|
GridHitInfo info = menuItemCell.Tag as GridHitInfo;
|
|
if (info != null)
|
|
{
|
|
DevExpress.XtraGrid.Drawing.GridFooterCellInfoArgs footerCell = info.GetType().GetProperty("FooterCell").GetValue(info, null) as DevExpress.XtraGrid.Drawing.GridFooterCellInfoArgs;
|
|
if (footerCell != null)
|
|
{
|
|
string value = footerCell.DisplayText;
|
|
if (!string.IsNullOrWhiteSpace(value)) Clipboard.SetText(value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageUtil.Show(ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 点击Footer单元格复制信息
|
|
/// <para>创建人:tdx</para>
|
|
/// <para>创建日期:2022/9/26 </para>
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnBandedGridView_Click(object sender, EventArgs e)
|
|
{
|
|
GridHitInfo info;
|
|
Point pt = this.bandedGridView.GridControl.PointToClient(System.Windows.Forms.Control.MousePosition);
|
|
info = this.bandedGridView.CalcHitInfo(pt);
|
|
if (info != null)
|
|
{
|
|
DevExpress.XtraGrid.Drawing.GridFooterCellInfoArgs footerCell = info.GetType().GetProperty("FooterCell").GetValue(info, null) as DevExpress.XtraGrid.Drawing.GridFooterCellInfoArgs;
|
|
if (footerCell != null)
|
|
{
|
|
string value = footerCell.DisplayText;
|
|
if (!string.IsNullOrWhiteSpace(value)) Clipboard.SetText(value);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:表格双击打开模块配置</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-08-13 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void OnBandedGridViewDoubleClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DataRow mSelectRow = this.bandedGridView.GetFocusedDataRow();
|
|
if (this.gridControl.ContextMenuStrip != null)
|
|
{
|
|
Dictionary<ToolStripItem, GridRightMenuModel> DbClickItemDic = new Dictionary<ToolStripItem, GridRightMenuModel>();
|
|
foreach (ToolStripItem cms in this.gridControl.ContextMenuStrip.Items)
|
|
{
|
|
GridRightMenuModel model = cms.Tag as GridRightMenuModel;
|
|
if (model != null && model.DbClick)
|
|
{
|
|
DbClickItemDic.Add(cms, model);
|
|
}
|
|
}
|
|
// 判断右键菜单是否可用
|
|
foreach (ToolStripItem cms in DbClickItemDic.Keys)
|
|
{
|
|
GridRightMenuModel model = DbClickItemDic[cms];
|
|
if (model != null && model.DbClick)
|
|
{
|
|
if (model.PrivilegeOper.Length > 1 && !model.PrivilegeOper.Contains(ERPInfo.Instance.UserName + ","))
|
|
{
|
|
cms.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(model.MenuCond))
|
|
{
|
|
try
|
|
{
|
|
string cond = ReplaceHelper.ReplaceRowParam(mSelectRow, model.MenuCond);
|
|
if (ParentControl != null)
|
|
cond = ParentControl.ReplaceParentControlValue(cond);
|
|
cms.Enabled = ReplaceHelper.EvalCond(cond);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
MessageUtil.Show(ResourceKeys.SetRightMenuCondFault);
|
|
}
|
|
}
|
|
}
|
|
if (cms.Enabled)
|
|
{
|
|
cms.PerformClick();
|
|
}
|
|
else
|
|
{
|
|
//MessageUtil.Show(ResourceKeys.CondtionNotSatisfiable);
|
|
continue;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:单元格</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-03-22 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="sender">The source of the event.</param>
|
|
/// <param name="e">The <see cref="SelectionChangedEventArgs"/> instance containing the event data.</param>
|
|
protected void OnGridViewSelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
GridCell[] cells = this.bandedGridView.GetSelectedCells();
|
|
int[] rows = this.bandedGridView.GetSelectedRows();
|
|
|
|
// 只判断单元格数目,允许同行多单元格选中
|
|
this.pl_buttom.Visible = cells.Length > 1 && rows.Length > 1;
|
|
|
|
if (this.pl_buttom.Visible)
|
|
{
|
|
double sum = 0, avg = 0, max = double.MinValue, min = double.MaxValue;
|
|
int count = 0;
|
|
|
|
foreach (GridCell cell in cells)
|
|
{
|
|
string cellValue = this.bandedGridView.GetRowCellValue(cell.RowHandle, cell.Column)?.ToString();
|
|
if (double.TryParse(cellValue, out double cellNumber))
|
|
{
|
|
max = Math.Max(max, cellNumber);
|
|
min = Math.Min(min, cellNumber);
|
|
|
|
count++;
|
|
sum += cellNumber;
|
|
}
|
|
}
|
|
|
|
avg = count == 0 ? 0 : sum / count;
|
|
|
|
this.lblTotal.Text = string.Format(ResourceKeys.GridTotalDisplayText,
|
|
count,
|
|
Math.Round(sum, 2),
|
|
Math.Round(avg, 2),
|
|
Math.Round(max, 2),
|
|
Math.Round(min, 2));
|
|
if (this.TotalQuantity) this.lblTotal.Text = string.Format("已选中 {0} 行", rows.Length);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
|
|
this.SelectedRows = this.bandedGridView.GetSelectedRows();
|
|
|
|
if (bandedGridView.OptionsSelection.MultiSelect == true &&
|
|
bandedGridView.OptionsSelection.MultiSelectMode == GridMultiSelectMode.CheckBoxRowSelect &&
|
|
bandedGridView.OptionsSelection.EnableAppearanceFocusedCell == false)
|
|
{
|
|
this.bandedGridView.UpdateSummary();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:计算列关联字段</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-12-18 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="model">The model.</param>
|
|
/// <param name="fieldValue">The field value.</param>
|
|
protected virtual void SetUnionValue(GridColumnModel model, string fieldValue, int RowHandle)
|
|
{
|
|
DataTable table = this.gridControl.DataSourceTable();
|
|
//DataRow rowItem = this.gridView.FocusedRowHandle == RowHandle || RowHandle < 0 ? this.gridView.GetFocusedDataRow() : table.Rows[RowHandle];
|
|
DataRow rowItem = table.Rows.Count == 0 || this.bandedGridView.FocusedRowHandle < 0 ? this.bandedGridView.GetFocusedDataRow() : this.bandedGridView.FocusedRowHandle == RowHandle || RowHandle < 0 ? this.bandedGridView.GetFocusedDataRow() : table.Rows[RowHandle];
|
|
|
|
|
|
//DataRow rowItem = this.gridView.GetFocusedDataRow();
|
|
string unionValues = model.UnionValues;
|
|
if (rowItem != null && model != null)
|
|
{
|
|
unionValues = ReplaceHelper.ReplaceRowParam(rowItem, unionValues.Replace("{" + model.FieldName + "}", fieldValue));
|
|
if (this.ParentControl != null)
|
|
unionValues = ParentControl.ReplaceParentControlValue(unionValues);
|
|
try
|
|
{
|
|
string[] fields = model.UnionFields.Trim().Trim(',').Split(',');
|
|
DataRow rowResult = BaseImpl.GetDataRowResult(unionValues);
|
|
if (rowResult != null)
|
|
{
|
|
for (int i = 0; i < fields.Length; i++)
|
|
{
|
|
string field = fields[i];
|
|
string value = rowResult.Table.Columns.Contains(field) ? rowResult[field] + "" : null;
|
|
rowItem[field] = value;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 设置为空
|
|
for (int i = 0; i < fields.Length; i++)
|
|
{
|
|
string field = fields[i];
|
|
rowItem[field] = DBNull.Value;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Instance.WriteError(ex);
|
|
LogUtil.WriteError("计算列关联字段--错误-->" + unionValues, ex);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:计算列计算公式</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-12-18 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="model">The model.</param>
|
|
/// <param name="fieldValue">The field value.</param>
|
|
protected virtual void SetCalcValue(GridColumnModel model, string fieldValue, int RowHandle)
|
|
{
|
|
if (this.GridSumming) return;
|
|
this.GridSumming = true;
|
|
try
|
|
{
|
|
DataTable table = this.gridControl.DataSourceTable();//this.gridView.FocusedRowHandle == RowHandle || RowHandle < 0 ? this.gridView.GetFocusedDataRow() : table.Rows[RowHandle];
|
|
DataRow rowItem = table.Rows.Count == 0 || this.bandedGridView.FocusedRowHandle < 0 ? this.bandedGridView.GetFocusedDataRow() : this.bandedGridView.FocusedRowHandle == RowHandle || RowHandle < 0 ? this.bandedGridView.GetFocusedDataRow() : table.Rows[RowHandle];
|
|
|
|
|
|
if (rowItem != null && model != null)
|
|
{
|
|
foreach (GridColumn col in this.bandedGridView.Columns)
|
|
{
|
|
GridColumnModel colModel = col.Tag as GridColumnModel;
|
|
if (colModel == null) continue;
|
|
string defultValue = colModel.DefaultValue;
|
|
if (colModel.FieldType == 7 && rowItem.Table.Columns.Contains(col.FieldName) && string.IsNullOrEmpty(rowItem[col.FieldName] + "") && !string.IsNullOrEmpty(colModel.DefaultValue))
|
|
{
|
|
defultValue = ReplaceHelper.ReplaceUserInfo(colModel.DefaultValue);
|
|
if (ParentControl != null) defultValue = ParentControl.ReplaceParentControlValue(defultValue);
|
|
if (defultValue.StartsWith("@"))
|
|
{
|
|
defultValue = BaseImpl.GetDefaultValue(ReplaceHelper.ReplaceRowParam(rowItem, defultValue));
|
|
}
|
|
|
|
if (IsNumberic(defultValue)) rowItem[col.FieldName] = defultValue;//colModel.DefaultValue;
|
|
|
|
}
|
|
}
|
|
List<GridColumnModel> calcModels = this.ColumnList.FindAll(x => !string.IsNullOrEmpty(x.CalcExpr)).OrderBy(y => y.CalcOrder).ToList();
|
|
foreach (GridColumnModel gridModel in calcModels)
|
|
{
|
|
// 计算顺序小于当前控件则不计算
|
|
if (gridModel.CalcOrder < model.CalcOrder) continue;
|
|
|
|
if (!gridModel.FieldName.Equals(model.FieldName, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
bool isTruncate = false;
|
|
string calcExpr = gridModel.CalcExpr;
|
|
if (calcExpr.StartsWith("@truncate:"))
|
|
{
|
|
calcExpr = calcExpr.Substring(10);
|
|
isTruncate = true;
|
|
}
|
|
|
|
try
|
|
{
|
|
if (this.ParentControl != null)
|
|
calcExpr = ParentControl.ReplaceParentControlValue(calcExpr);
|
|
|
|
string result = string.Empty;
|
|
if (calcExpr.StartsWith("@"))
|
|
{
|
|
result = BaseImpl.GetDefaultValue(ReplaceHelper.ReplaceRowParam(rowItem, calcExpr));
|
|
}
|
|
else
|
|
{
|
|
foreach (GridColumnModel item in ColumnList)
|
|
{
|
|
if (calcExpr.Contains("{" + item.FieldName + "}"))
|
|
{
|
|
if (model.FieldType == ControlType.LabTextInt || model.FieldType == ControlType.LabCalcText || model.FieldType == ControlType.LabAccount)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(rowItem[item.FieldName] + "")) rowItem[item.FieldName] = 0;
|
|
}
|
|
}
|
|
//if (!string.IsNullOrEmpty(item.DataFormat))
|
|
//{
|
|
// if (model.FieldType == ControlType.LabTextInt || model.FieldType == ControlType.LabCalcText || model.FieldType == ControlType.LabAccount)
|
|
// {
|
|
// if (string.IsNullOrWhiteSpace(rowItem[item.FieldName] + "")) rowItem[item.FieldName] = 0;
|
|
// }
|
|
//}
|
|
}
|
|
|
|
calcExpr = ReplaceHelper.ReplaceRowParam(rowItem, calcExpr);
|
|
//EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + ""
|
|
|
|
|
|
result = EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + "";
|
|
|
|
|
|
if (result.Contains("E") || result.Contains("e"))
|
|
{
|
|
|
|
result = ChangeDataToD(result).ToString("0.########");
|
|
}
|
|
}
|
|
if (isTruncate)
|
|
{
|
|
result += result.Contains(".") ? "0000000000" : ".0000000000";
|
|
rowItem[gridModel.FieldName] = result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1);
|
|
//this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1));
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
double d = 0;
|
|
if (!string.IsNullOrEmpty(result) &&
|
|
!"NaN".Equals(result, StringComparison.OrdinalIgnoreCase) &&
|
|
!"非数字".Equals(result, StringComparison.OrdinalIgnoreCase) &&
|
|
!"undefined".Equals(result, StringComparison.OrdinalIgnoreCase) &&
|
|
result != "∞" && result != "-∞" &&
|
|
!"正无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) &&
|
|
!"负无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) &&
|
|
double.TryParse(result, out d))
|
|
{
|
|
if (string.IsNullOrEmpty(gridModel.DataFormat))
|
|
{
|
|
result = Math.Round(Convert.ToDouble(d), model.Decimals, MidpointRounding.AwayFromZero) + "";
|
|
}
|
|
else
|
|
{
|
|
//计算后先执行保存小数位数
|
|
result = string.Format("{0:" + gridModel.DataFormat + "}", Convert.ToDecimal(result));
|
|
}
|
|
if (model.FieldType == 7 && result.Contains('%'))
|
|
{
|
|
result = (double.Parse(result.Replace("%", "")) * 0.01).ToString();
|
|
}
|
|
rowItem[gridModel.FieldName] = result;
|
|
// 判断计算列有无关联值
|
|
GridColumnModel UnionModel = calcModels.FirstOrDefault(x => x.FieldName == gridModel.FieldName);
|
|
if (!string.IsNullOrEmpty(UnionModel.UnionFields))
|
|
{
|
|
this.SetUnionValue(UnionModel, rowItem[gridModel.FieldName] + "", RowHandle);
|
|
}
|
|
//this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result);
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Instance.WriteError(ex);
|
|
LogUtil.WriteError("计算列计算公式--错误-->" + rowItem[gridModel.FieldName], ex);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Instance.WriteError(ex);
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
// MessageUtil.Show(Message,ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
this.GridSumming = false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:禁用控件条件</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2019-01-22 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="model">The model.</param>
|
|
/// <param name="fieldValue">The field value.</param>
|
|
protected virtual void SetDisableColumn(GridColumnModel model, int rowHandler, string fieldValue)
|
|
{
|
|
|
|
if (model.EnableCond != string.Empty)
|
|
{
|
|
GridColumnModel[] columns = this.ColumnList.Where(x => x.EnableCond.Contains("{" + model.FieldName + "}")).ToArray();
|
|
DataRow rowItem = this.bandedGridView.GetDataRow(rowHandler);
|
|
foreach (GridColumnModel item in columns)
|
|
{
|
|
try
|
|
{
|
|
string disableCond = ReplaceHelper.ReplaceRowParam(rowItem, item.EnableCond.Replace("{" + model.FieldName + "}", fieldValue));
|
|
string diaableType = item.DisableType;
|
|
//this.gridView.Columns.ColumnByFieldName(model.FieldName).Visible = ("true".Equals(EvalHelper.Eval(ReplaceHelper.ReplaceEvalCond(disableCond)) + "", StringComparison.OrdinalIgnoreCase));
|
|
this.bandedGridView.Columns.ColumnByFieldName(model.FieldName).Visible = ("true".Equals(ValidateCond(disableCond, null) + "", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:把科学计数转换为小数格式</para>
|
|
/// <para>创建人:曹屹峰</para>
|
|
/// <para>创建日期:2021-10-14 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private Decimal ChangeDataToD(string strData)
|
|
{
|
|
Decimal dData = 0.0M;
|
|
if (strData.Contains("E"))
|
|
{
|
|
dData = Decimal.Parse(strData, System.Globalization.NumberStyles.Float);
|
|
}
|
|
return dData;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <para>说明:检查可用条件</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-11-09 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="cond">The cond.</param>
|
|
/// <param name="dataRow">The data row.</param>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
private bool ValidateCond(string cond, DataRow dataRow)
|
|
{
|
|
bool result = false;
|
|
cond = ReplaceHelper.ReplaceRowParam(dataRow, cond);
|
|
if (cond.StartsWith("@") || cond.StartsWith("!"))
|
|
{
|
|
result = "1".Equals(BaseImpl.GetDefaultValue(cond));
|
|
}
|
|
else if (dataRow == null)
|
|
{
|
|
result = ReplaceHelper.EvalCond(cond);
|
|
}
|
|
else
|
|
{
|
|
result = ReplaceHelper.ReplaceRowParamCond(dataRow, cond);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 分组列获取数据
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnGridCustomDrawGroupRow(object sender, RowObjectCustomDrawEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
GridGroupRowInfo GridGroupRowInfo = e.Info as GridGroupRowInfo;
|
|
BandedGridColumn gridColumn = GridGroupRowInfo.Column as BandedGridColumn;
|
|
|
|
if (gridColumn.Tag == null)
|
|
{
|
|
//动态列没有设置tag
|
|
string ColumnSiftValue = string.Empty;
|
|
int startindex = GridGroupRowInfo.GroupText.LastIndexOf(":");
|
|
string[] GroupText = GridGroupRowInfo.GroupText.Substring(startindex + 1).Trim().Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries);
|
|
string newGroupText = GroupText[0] + ", ";
|
|
GridGroupRowInfo.GroupText = GridGroupRowInfo.GroupText.Substring(0, startindex + 1) + newGroupText.TrimEnd(' ').TrimEnd(',');
|
|
}
|
|
else
|
|
{
|
|
GridColumnModel model = gridColumn.Tag as GridColumnModel;
|
|
if (model == null) return;
|
|
string ColumnSiftValue = string.Empty;
|
|
string editValue = ControlType.IsValue(model.FieldType) ? GridGroupRowInfo.GroupValueText : GridGroupRowInfo.EditValue + "";
|
|
int startindex = GridGroupRowInfo.GroupText.LastIndexOf(":");
|
|
string[] GroupText = GridGroupRowInfo.GroupText.Substring(startindex + 1).Trim().Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries);
|
|
int i = 0; string newGroupText = GroupText[0] + ", ";
|
|
foreach (BandedGridColumn newColumn in this.bandedGridView.Columns)
|
|
{
|
|
GridColumnModel Newmodel = newColumn.Tag as GridColumnModel;
|
|
if (Newmodel == null) continue;
|
|
if (Newmodel.Visible && Newmodel.CanSum && !SystemInfo.Instance.GroupSpecialMode)
|
|
{
|
|
|
|
if (i != GroupText.Count() - 1) i++;
|
|
string newGroupValue = GroupText[i].Replace(newColumn.Caption, "");
|
|
if (newColumn == HeaderColumnSift)
|
|
{
|
|
ColumnSiftValue = newGroupValue.Replace(",", "");
|
|
}
|
|
newGroupText += newColumn.Caption + newGroupValue + ", ";
|
|
}
|
|
}
|
|
GridGroupRowInfo.GroupText = GridGroupRowInfo.GroupText.Substring(0, startindex + 1) + newGroupText.TrimEnd(' ').TrimEnd(',');
|
|
if (!string.IsNullOrWhiteSpace(editValue) && ChartTable.Columns.Count > 0)
|
|
{
|
|
string groupText = GridGroupRowInfo.GroupText;
|
|
int endindex = groupText.LastIndexOf("行");
|
|
if (!SystemInfo.Instance.GroupSpecialMode) groupText = groupText.Substring(startindex + 1, endindex - startindex - 1).Trim();
|
|
if (!(this.ChartTable.Rows.Cast<DataRow>().FirstOrDefault(x => x["key"] == GridGroupRowInfo.EditValue + "") != null))
|
|
{
|
|
if (BaseImpl.HasExistsTable(ResourceKeys.SettingGrouprptab))
|
|
{
|
|
float vsNum = 0;
|
|
bool isNum = float.TryParse(ColumnSiftValue, out vsNum);
|
|
ChartTable.Rows.Add(GridGroupRowInfo.EditValue + "", groupText);
|
|
if (isNum)
|
|
{
|
|
if (SiftEnumObj == HeaderSiftEnum.Sum)
|
|
{
|
|
groupText = vsNum.ToString();
|
|
}
|
|
if (SiftEnumObj == HeaderSiftEnum.Avg)
|
|
{
|
|
groupText = (vsNum / float.Parse(groupText)) + "";
|
|
}
|
|
if (SiftEnumObj == HeaderSiftEnum.Max)
|
|
{
|
|
|
|
//gridView.GroupSummary.Add(DevExpress.Data.SummaryItemType.Max, "数据", HeaderColumnSift, "组计:{0}");
|
|
|
|
}
|
|
if (SiftEnumObj == HeaderSiftEnum.Min)
|
|
{
|
|
|
|
}
|
|
}
|
|
string tempSql = string.Format(@"insert into {3}(GroupName,GroupAmount,OperAtorId) values('{0}','{1}','{2}');", editValue, groupText, ERPInfo.Instance.UserId, ResourceKeys.SettingGrouprptab);
|
|
SqlHelper.ExecuteNonQuery(tempSql);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击标题行排序后,默认选中第一行
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void BandedGridView_EndSorting(object sender, EventArgs e)
|
|
{
|
|
this.bandedGridView.MoveFirst(); // 将焦点行移动到第一行
|
|
this.bandedGridView.FocusedRowHandle = 0;// 确保第一行被聚焦
|
|
}
|
|
|
|
/// <summary>
|
|
/// 水平滚动条位置改变
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnBandedLeftCoordChanged(object sender, EventArgs e)
|
|
{
|
|
if (OnLeftCoordCallback != null)
|
|
{
|
|
OnLeftCoordCallback(sender, e);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置数值的编辑格式
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void GridView_ShowingEditor(object sender, CancelEventArgs e)
|
|
{
|
|
GridColumn gridColumn = bandedGridView.FocusedColumn;
|
|
if (gridColumn != null && gridColumn.Tag != null)
|
|
{
|
|
GridColumnModel model = (GridColumnModel)gridColumn.Tag;
|
|
if (model.FormatEditBox && (model.FieldType == ControlType.LabTextInt || model.FieldType == ControlType.LabCalcText || model.FieldType == ControlType.LabAccount) && gridColumn.RealColumnEdit != null && !gridColumn.RealColumnEdit.EditFormat.FormatString.Equals(model.DataFormat))
|
|
{
|
|
gridColumn.RealColumnEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
|
|
gridColumn.RealColumnEdit.EditFormat.FormatString = model.DataFormat;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|