/******************************
* 说明:表格树
* 创建人:龚宇超
* 创建日期:2017-12-26
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
******************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Lskj.Control.Model;
using Lskj.Model;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
using DevExpress.Utils;
using DevExpress.XtraGrid;
using DevExpress.XtraTreeList.Menu;
using DevExpress.Utils.Menu;
using Lskj.Data;
using Lskj.Business.Impl;
using System.Data.SqlClient;
using Lskj.Util;
using Lskj.Business;
using DevExpress.XtraTreeList.Nodes;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors;
using System.Reflection;
using DevExpress.Data.Filtering;
using DevExpress.XtraGrid.Drawing;
using Lskj.Control.MultiGridLookUp;
using Lskj.Control.MultiModelLookUp;
using System.Text.RegularExpressions;
using Lskj.Core;
using System.Drawing.Drawing2D;
using System.Collections;
using System.Data.Common;
namespace Lskj.Control
{
///
/// 表格树
///
public partial class TreeGridControlEx : GridControlEx
{
public virtual TreeList TreeListObj { get { return gcMain; } }
///
/// 树表格固定菜单
///
public virtual ContextMenuStrip MenuStrip { get { return contextMenuStrip; } }
///
/// 默认全部展开
///
private string _expansion = "1";
public virtual string Expansion
{
get { return _expansion; }
set { _expansion = value; }
}
//treeList树展开的节点块
private List _treeListNodes = new List();
public virtual List treeListNodes
{
get { return _treeListNodes; }
set { _treeListNodes = value; }
}
///
/// 排序字段
///
public string SortField;
///
/// 是否使用按层级分段的新版节点编号;默认false,保持老版整数节点号规则。
///
public bool UseSegmentedNodeId { get; set; }
///
/// 是否启用单据树表格粘贴;启用后粘贴内容作为新节点添加,不覆盖已有行。
///
public bool BillPaste { get; set; }
// 记录单据粘贴是否应从一级节点开始,避免通过清空TreeList选择状态来表达粘贴位置。
private bool _billPasteAsRoot;
private int _treeNumberNodes = 2;
///
/// 每级节点编号占用的位数,最小为2位。
///
public int TreeNumberNodes
{
get { return _treeNumberNodes; }
set { _treeNumberNodes = value < 2 ? 2 : value; }
}
///
/// 上次选中行
///
private int lastNodeIndex;
///
/// 日期类型控件名称
///
private List DateColumnNames = new List();
///
/// 聚合多表头控件
///
//public TreeBandedGridControlEx CustomGroupTreeBandEx;
///
///单据明细拖拽条件(为树表格时推拽改变父节点和来源明细中推拽内容上去)
///
public string TreeTableDragCondition;
///
/// 下拉框数据源绑定完成后执行
///
public new event EventHandler OnDataSourceBindCallBack;
// 全局标记:是否正在编辑
private bool isEditing = false;
public TreeGridControlEx()
{
InitializeComponent();
this.gcMain.KeyDown += new KeyEventHandler(OnTreeGridViewKeyDown);
this.gcMain.SelectionChanged += new EventHandler(gcMain_SelectionChanged);
this.gcMain.CustomDrawNodeCell += new CustomDrawNodeCellEventHandler(OnCustomDrawNodeCell);
this.gcMain.CustomDrawNodeIndicator += TreeListObj_CustomDrawNodeIndicator;//显示行号
this.gcMain.CellValueChanged += GcMain_CellValueChanged;
this.gcMain.NodesReloaded += OnNodesReloaded;
this.gcMain.ColumnFilterChanged += TreeList1_ColumnFilterChanged;
this.gcMain.CustomDrawFooterCell += GcMain_CustomDrawFooterCell;
// 双击编辑单元格时禁用“双击节点折叠/展开”
this.gcMain.OptionsBehavior.AllowExpandOnDblClick = false;
this.gcMain.MouseDown += GcMain_MouseDown;
this.gcMain.ShownEditor += GcMain_ShownEditor;
this.gcMain.HiddenEditor += GcMain_HiddenEditor;
if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
{
SetGridRowHeightAndFont(this.gcMain);
if (SystemInfo.Instance.ExpandButtonType.Equals("1"))
{
this.gcMain.CustomDrawNodeButton += OnCustomDrawNodeButton;//绘制按钮
}
}
this.gcMain.PopupMenuShowing += new PopupMenuShowingEventHandler(OnPopupMenuShowing);
#region LabPicUrl控件实现事件
LabPicUrlPreview_TreeList.Attach(this.gcMain); // 必须
LabPicUrlPreview_TreeList.AttachPreview(this.gcMain); // 新增(双击预览)
#endregion
//InitializeTreeMethod();
//this.gcMain.OptionsBehavior.EnableFiltering = true;
//this.gcMain.OptionsFind.AlwaysVisible = true;
}
private void GcMain_HiddenEditor(object sender, EventArgs e)
{
isEditing = false;
}
private void GcMain_ShownEditor(object sender, EventArgs e)
{
isEditing = true;
}
private void GcMain_MouseDown(object sender, MouseEventArgs e)
{
TreeList treeList = sender as TreeList;
if (treeList == null)
{
return;
}
if (e.Button == MouseButtons.Left)
{
TreeListHitInfo mouseHitInfo = treeList.CalcHitInfo(e.Location);
if (BillPaste)
{
// 点击空白区域时后续粘贴为一级节点,不改动TreeList内部的选中集合。
_billPasteAsRoot = mouseHitInfo.HitInfoType == HitInfoType.Empty;
}
if (treeList.OptionsSelection.MultiSelect &&
treeList.OptionsSelection.MultiSelectMode == TreeListMultiSelectMode.CellSelect &&
(mouseHitInfo.HitInfoType == HitInfoType.RowIndicator || mouseHitInfo.HitInfoType == HitInfoType.RowIndicatorEdge) &&
treeList.FocusedColumn == null && treeList.VisibleColumns.Count > 0)
{
// DevExpress 15.2在单元格多选模式下重复点击行序号时会清空FocusedColumn,
// 后续点击会将null列传给IsCellSelected并触发“参数名:key”异常。
treeList.FocusedColumn = treeList.VisibleColumns[0];
}
}
if (isEditing) return; // 编辑中不处理折叠
if (e.Clicks != 2 || e.Button != MouseButtons.Left)
return;
TreeListHitInfo hitInfo = treeList.CalcHitInfo(e.Location);
if (hitInfo.Node == null) return;
// 双击可编辑单元格 → 仅编辑,不折叠
if (hitInfo.HitInfoType == HitInfoType.Cell
&& hitInfo.Column != null
&& hitInfo.Column.OptionsColumn.AllowEdit)
{
treeList.ShowEditor();
}
//单击行,或者节点前的按钮,或者不可编辑单元格 就改变折叠状态
else if (hitInfo.HitInfoType == HitInfoType.Row || hitInfo.HitInfoType == HitInfoType.Button||(hitInfo.HitInfoType == HitInfoType.Cell&& !hitInfo.Column.OptionsColumn.AllowEdit))
{
// 15.2切换节点展开状态(原生API)
hitInfo.Node.Expanded = !hitInfo.Node.Expanded;
}
}
private void GcMain_CustomDrawFooterCell(object sender, CustomDrawFooterCellEventArgs e)
{
TreeListColumn listColumn = e.Column;
GridColumnModel columnModel = listColumn.Tag as GridColumnModel;
if (!string.IsNullOrWhiteSpace(columnModel.SumCond))
{
decimal sum = CalculateConditionalSum(columnModel);
e.Text = sum + "";
}
}
///
/// 计算符合条件的合计值
///
private decimal CalculateConditionalSum(GridColumnModel columnModel)
{
decimal total = 0;
List listNodes = this.GetAllNodesOnTheInterface();
// 遍历所有节点(包含子节点)
foreach (TreeListNode node in listNodes)
{
// 跳过空节点
if (node == null) continue;
DataRowView dataRowView = this.TreeListObj.GetDataRecordByNode(node) as DataRowView;
DataRow gridRow = dataRowView != null ? dataRowView.Row : null;
if ("true".Equals(EvalHelper.Eval(ReplaceHelper.ReplaceEvalCond(ReplaceHelper.ReplaceRowParam(gridRow, columnModel.SumCond))) + "", StringComparison.OrdinalIgnoreCase))
{
if (decimal.TryParse(node.GetDisplayText(columnModel.FieldName), out decimal value))
{
total += value;
}
}
}
return total;
}
///
/// 修改筛选框筛选日期类型列的条件(日期=xxx 替换wei 日期>=xxx && 日期
///
///
private void TreeList1_ColumnFilterChanged(object sender, EventArgs e)
{
TreeList treeList = sender as TreeList;
string filter = treeList.ActiveFilterString;
if (string.IsNullOrEmpty(filter))
return;
// 配置需要处理的日期列列表(不含方括号)
//string[] dateColumns = new[] { "mrp_hb_operatedate", "wms_lout_tagiddate", "wms_lout_takedate" };
string[] dateColumns = DateColumnNames.ToArray();
string newFilter = filter;
// 遍历所有日期列,替换精确匹配为范围匹配
foreach (string column in dateColumns)
{
string columnPattern = $@"\[{column}\] = #(\d{{4}}-\d{{2}}-\d{{2}})#";
newFilter = Regex.Replace(newFilter, columnPattern, match =>
{
if (DateTime.TryParse(match.Groups[1].Value, out DateTime date))
{
return $"([{column}] >= #{date:yyyy-MM-dd}# And [{column}] < #{date.AddDays(1):yyyy-MM-dd}#)";
}
return match.Value; // 解析失败则保持原样
});
}
// 应用修改后的筛选表达式
if (newFilter != filter)
{
treeList.ActiveFilterString = newFilter;
}
}
void gcMain_SelectionChanged(object sender, EventArgs e)
{
//try
//{
//List cells = this.TreeListObj.GetSelectedCells();
//DataRow[] rows = GetViewFocusedDataRows();
//this.pl_buttom.Visible = cells.Count > 1 && rows.Length > 1;
//if (this.pl_buttom.Visible)
//{
// // 分别计算求和、平均值、最大值、最小值、计数
// double sum = 0, avg = 0, max = 0, min = 0;
// int count = 0;
// foreach (DataRow row in rows)
// {
// foreach (TreeListCell cell in cells)
// {
// double cellNumber = 0;
// string cellValue = row[cell.Column.Name] + "";
// if (double.TryParse(cellValue, out cellNumber))
// {
// cellNumber = Convert.ToDouble(cellValue);
// if (max < cellNumber)
// max = cellNumber;
// if (min == 0 || min > cellNumber)
// min = cellNumber;
// count++;
// sum += cellNumber;
// }
// }
// }
// avg = count == 0 || count == 0 ? 0 : sum / count;
// lblTotal.Text = string.Format(ResourceKeys.GridTotalDisplayText, count, Math.Round(sum, 2), Math.Round(avg, 2), Math.Round(max, 2), Math.Round(min, 2));
//}
//}
//catch (Exception)
//{
//}
}
///
/// 说明:设置表格颜色
/// 创建人:龚宇超
/// 创建日期:2017-12-12
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The table.
public override void SetGridRowColors(DataTable table)
{
this.GridRowColorsTable = table;
if (table != null && table.Rows.Count > 0)
{
DataRow rowItem = table.Select("1=1").FirstOrDefault(x => (x["condition"] + "").Contains("COLUMN_"));
if (rowItem != null)
this.TreeListObj.CustomDrawNodeCell += new CustomDrawNodeCellEventHandler(OnGridViewRowCellStyle);
else
this.TreeListObj.NodeCellStyle += new GetCustomNodeCellStyleEventHandler(OnGridViewRowStyle);
}
}
///
/// 说明:设置树表格行颜色
/// 创建人:王一帆
/// 创建日期:2019-11-15
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected virtual void OnGridViewRowStyle(object sender, GetCustomNodeCellStyleEventArgs e)
{
if (this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0)
{
// 渲染界面数据量过多界面刷新会很慢
DataRowView dataRowView = this.TreeListObj.GetDataRecordByNode(e.Node) as DataRowView;
DataRow gridRow = dataRowView != null ? dataRowView.Row : null;
foreach (DataRow item in this.GridRowColorsTable.Rows)
{
//string cond = ReplaceHelper.ReplaceRowParam(gridRow, item["condition"] + "");
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 = new FontStyle();
if (model.IsBold) fontStyle = fontStyle | FontStyle.Bold;
if (model.IsItalic) fontStyle = fontStyle | FontStyle.Italic;
if (model.IsStrickOut) fontStyle = fontStyle | FontStyle.Strikeout;
if (model.IsUnderLine) fontStyle = fontStyle | FontStyle.Underline;
e.Appearance.FontStyleDelta = fontStyle;
}
}
catch (Exception)
{
//LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + model.Condition + ";EvalCondtion:" + cond);
}
}
}
}
///
/// 说明:设置树表格单元格颜色
/// 创建人:王一帆
/// 创建日期:2019-11-15
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The source of the event.
/// The instance containing the event data.
///
protected virtual void OnGridViewRowCellStyle(object sender, CustomDrawNodeCellEventArgs e)
{
if (this.GridRowColorsTable != null && this.GridRowColorsTable.Rows.Count > 0 && !string.IsNullOrEmpty(e.CellValue + ""))
{
// 渲染界面数据量过多界面刷新会很慢
DataRowView dataRowView = this.TreeListObj.GetDataRecordByNode(e.Node) as DataRowView;
DataRow gridRow = dataRowView != null ? dataRowView.Row : null;
foreach (DataRow item in this.GridRowColorsTable.Rows)
{
//string cond = ReplaceHelper.ReplaceRowParam(gridRow, item["condition"] + "").ReplaceColumnParam(e.Column.Name, e.Column.Caption, e.CellValue + "");
string cond = ReplaceHelper.ReplaceRowParamEmptyWrapQuote(gridRow, item["condition"] + "").ReplaceColumnParam(e.Column.Name, e.Column.Caption, e.CellValue + "");
try
{
if (!string.IsNullOrWhiteSpace(cond) && ReplaceHelper.EvalCond(cond))
{
GridRowColorModel model = new GridRowColorModel(item);
if (!string.IsNullOrWhiteSpace(model.BackColor))
{
e.Appearance.BackColor = ColorTranslator.FromHtml(model.BackColor);
}
if (!string.IsNullOrWhiteSpace(model.ForceColor))
{
e.Appearance.ForeColor = ColorTranslator.FromHtml(model.ForceColor);
}
FontStyle fontStyle = new FontStyle();
if (model.IsBold) fontStyle = fontStyle | FontStyle.Bold;
if (model.IsItalic) fontStyle = fontStyle | FontStyle.Italic;
if (model.IsStrickOut) fontStyle = fontStyle | FontStyle.Strikeout;
if (model.IsUnderLine) fontStyle = fontStyle | FontStyle.Underline;
e.Appearance.FontStyleDelta = fontStyle;
}
}
catch (Exception)
{
//LogHelper.Instance.WriteLog("GridView RowCellStyle Error. Condition:" + model.Condition + ";EvalCondtion:" + cond);
}
}
}
}
///
/// 绘制按钮
///
///
///
private void OnCustomDrawNodeButton(object sender, CustomDrawNodeButtonEventArgs e)
{
Rectangle rect = Rectangle.Inflate(e.Bounds, 0, 0);
Image img = e.Expanded ? global::Lskj.Control.Properties.Resources.UnExpand : global::Lskj.Control.Properties.Resources.Expand;
float scaleX = (float)rect.Width / img.Width;
float scaleY = (float)rect.Height / img.Height;
float scale = Math.Min(scaleX, scaleY);
int newWidth = (int)(img.Width * scale);
int newHeight = (int)(img.Height * scale);
int offsetX = (rect.Width - newWidth) / 2;
int offsetY = (rect.Height - newHeight) / 2;
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
e.Graphics.DrawImage(img, rect.X + offsetX, rect.Y + offsetY, newWidth, newHeight);
e.Handled = true;
}
///
/// 节点加载完成后
///
///
///
private void OnNodesReloaded(object sender, EventArgs e)
{
//根据记录展开对应节点
foreach (TreeListNode treeListNode in treeListNodes)
{
TreeListNode treeListNode1 = this.TreeListObj.Nodes.TreeList.FindNodeByID(treeListNode.Id);
if (treeListNode1 != null) treeListNode1.Expanded = true;
}
this.TreeListObj.FocusedNode = this.TreeListObj.GetNodeByVisibleIndex(lastNodeIndex);
if ((Expansion + "").Equals("1"))
{
this.TreeListObj.ExpandAll();
}
else if ((Expansion + "").Equals("2"))
{
this.TreeListObj.ExpandToLevel(0);
}
else if ((Expansion + "").Equals("3"))
{
this.TreeListObj.CollapseAll();
}
//if (selectRowHandler)
//{
// this.TreeListObj.FocusedNode = this.TreeListObj.GetNodeByVisibleIndex(lastNodeIndex);
//}
}
///
/// 说明:设置只读列
/// 创建人:龚宇超
/// 创建日期:2018-03-30
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The table.
/// The custom colum key.
public override void SetReadOnlyColumns(DataTable table, string customColumKey = "")
{
if (table == null) return;
Dictionary
/// The grid column.
/// Type of the field.
public virtual void InitDateTimeEdit(TreeListColumn gridColumn, int fieldType)
{
RepositoryItemDateEdit dateEdit = new RepositoryItemDateEdit();
dateEdit.DisplayFormat.FormatString = dateEdit.EditFormat.FormatString = dateEdit.Mask.EditMask = DateFormat.Format(fieldType);
dateEdit.DisplayFormat.FormatType = dateEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom;
if (fieldType == ControlType.LabDateTime)
{
dateEdit.Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;
dateEdit.Properties.VistaEditTime = DevExpress.Utils.DefaultBoolean.True;
}
if (fieldType == ControlType.LabShortDate)
{
dateEdit.Properties.Mask.UseMaskAsDisplayFormat = true;//掩码属性使用掩码作为显示格式
dateEdit.Properties.DisplayFormat.FormatType = dateEdit.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom;
dateEdit.Properties.VistaCalendarInitialViewStyle = DevExpress.XtraEditors.VistaCalendarInitialViewStyle.YearView;
dateEdit.Properties.VistaCalendarViewStyle = DevExpress.XtraEditors.VistaCalendarViewStyle.YearView;
}
//dateEdit.Closed += new ClosedEventHandler(dateEdit_Closed);
gridControl.RepositoryItems.Add(dateEdit);
gridColumn.ColumnEdit = dateEdit;
}
///
/// 说明:创建Time控件
/// 创建人:龚宇超
/// 创建日期:2017-08-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
/// Type of the field.
public virtual void InitTimeEdit(TreeListColumn gridColumn, int fieldType)
{
RepositoryItemTimeEdit timeEdit = new RepositoryItemTimeEdit();
timeEdit.DisplayFormat.FormatString = timeEdit.EditFormat.FormatString = timeEdit.Mask.EditMask = DateFormat.Format(fieldType);
timeEdit.DisplayFormat.FormatType = timeEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom;
gridControl.RepositoryItems.Add(timeEdit);
gridColumn.ColumnEdit = timeEdit;
}
///
/// 说明:创建计算器控件
/// 创建人:龚宇超
/// 创建日期:2017-08-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
public virtual void InitCalcEdit(TreeListColumn gridColumn)
{
RepositoryItemCalcEdit calcEdit = new RepositoryItemCalcEdit();
calcEdit.AllowMouseWheel = false;
gridControl.RepositoryItems.Add(calcEdit);
gridColumn.ColumnEdit = calcEdit;
}
///
/// 说明:创建备注框
/// 创建人:龚宇超
/// 创建日期:2017-08-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
public virtual void InitMemoEdit(TreeListColumn gridColumn)
{
RepositoryItemMemoExEdit memoEdit = new RepositoryItemMemoExEdit();
memoEdit.WordWrap = true;
memoEdit.ShowIcon = false;
if (!gridColumn.OptionsColumn.AllowEdit)
{
gridColumn.OptionsColumn.AllowEdit = true;
//设置只读
memoEdit.ReadOnly = true;
//只读状态允许下拉列表
memoEdit.AllowDropDownWhenReadOnly = DefaultBoolean.True;
}
gridControl.RepositoryItems.Add(memoEdit);
gridColumn.ColumnEdit = memoEdit;
}
///
/// 说明:创建备注框
/// 创建人:王一帆
/// 创建日期:2019-08-15
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
public virtual void InitRemarkEdit(TreeListColumn gridColumn)
{
RepositoryItemMemoEdit memo = new RepositoryItemMemoEdit();
memo.Appearance.TextOptions.WordWrap = WordWrap.Wrap;//自动换行
gridControl.RepositoryItems.Add(memo);
gridColumn.ColumnEdit = memo;
}
///
/// 说明:创建多选框
/// 创建人:龚宇超
/// 创建日期:2017-08-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
public virtual void InitMutilEdit(TreeListColumn gridColumn, GridColumnModel model)
{
FrmLookUp mutilLookUp = new FrmLookUp();
mutilLookUp.ValueField = model.ValueMember;
mutilLookUp.TextField = model.TextMember;
mutilLookUp.SourceSQL = model.SqlSource;
mutilLookUp.IsType = model.FieldType;
mutilLookUp.ValueMember = model.FieldType == ControlType.LabMultiSelectValue || model.FieldType == ControlType.LabMultiSelectValueNew ||
model.FieldType == ControlType.LabMultiSelectValueParam ? model.ValueMember : model.TextMember;
mutilLookUp.Tag = model;
RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
btnEdit.NullText = "";
btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
btnEdit.AllowNullInput = DefaultBoolean.False;
btnEdit.DisplayMember = model.TextMember;
btnEdit.SeparatorChar = ',';
btnEdit.ValueMember = model.FieldType == ControlType.LabMultiSelectValue || model.FieldType == ControlType.LabMultiSelectValueNew ||
model.FieldType == ControlType.LabMultiSelectValueParam ? model.ValueMember : model.TextMember;
btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用.
btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
btnEdit.Tag = model;
btnEdit.Buttons[1].Tag = mutilLookUp;
btnEdit.ButtonClick += new ButtonPressedEventHandler(OnButtonEditClick);
gridControl.RepositoryItems.Add(btnEdit);
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
this.mControlList.Add(model);
}
///
/// 说明:创建树节点自动搜索框
/// 创建人:王一帆
/// 创建日期:2021-03-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
public virtual void InitAutoTreeSearchEdit(TreeListColumn gridColumn, GridColumnModel model, bool isMulitClick = true, bool isRootNode = true)
{
PubTreeLookUp _popup = new PubTreeLookUp();
//_popup.LookUp = gridColumn;
_popup.ValueMember = ControlType.LabTreeLookValue == model.FieldType || ControlType.LabCheckTreeLookValue == model.FieldType || ControlType.LabTreeLastlevelValue == model.FieldType || ControlType.LabCheckTreeLastlevelValue == model.FieldType ? model.ValueMember : model.TextMember;
_popup.ValueField = model.ValueMember;
_popup.TextMember = model.TextMember;
_popup.SourceSQL = model.SqlSource;
_popup.TreeViewObj.CheckBoxes = isMulitClick;
DataTable table = MainImpl.GetDataTableResult(model.SqlSource);
_popup.SetDataSource(table);
_popup.Dock = DockStyle.Fill;
_popup.model = model;
_popup.isRootNode = isRootNode;
RepositoryItemPopupContainerEdit btnEdit = new RepositoryItemPopupContainerEdit();
btnEdit.NullText = "";
btnEdit.Buttons.Clear();
btnEdit.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//文本框可输入
btnEdit.MouseDown += new MouseEventHandler(OnAutoGridLookUpGotFocus);
btnEdit.KeyUp += new KeyEventHandler(OnAutoGridLookUpKeyUp);
btnEdit.PopupControl = new PopupContainerControl();
btnEdit.PopupControl.AllowDrop = true;
btnEdit.PopupControl.Controls.Add(_popup);
if (isMulitClick) _popup.TreeViewExObj.OnGridViewEnter += OnPopupGridViewEnter;
if (!isMulitClick) _popup.TreeViewExObj.OnTreeNodeMouseClick += OnPopupGridMouseClick;
btnEdit.PopupControl.Tag = _popup;
btnEdit.QueryPopUp += OnQueryPopUp;
if (model.FieldType == ControlType.LabTreeLookValue || model.FieldType == ControlType.LabCheckTreeLookValue || ControlType.LabTreeLastlevelValue == model.FieldType || ControlType.LabCheckTreeLastlevelValue == model.FieldType) btnEdit.QueryDisplayText += OnQueryDisplayText;
btnEdit.Tag = model;
gridControl.RepositoryItems.Add(btnEdit);
//gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
this.mControlList.Add(model);
}
///
/// 说明:
/// 创建人:龚宇超
/// 创建日期:
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
/// The model.
public virtual void InitMutilComboxEdit(TreeListColumn gridColumn, GridColumnModel model)
{
RepositoryItemCheckedComboBoxEdit comboxEdit = new RepositoryItemCheckedComboBoxEdit();
comboxEdit.AllowFocused = true;
comboxEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
comboxEdit.DisplayMember = model.TextMember;
comboxEdit.ValueMember = model.FieldType == ControlType.LabComboxCheckListValue ? model.ValueMember : model.TextMember;
comboxEdit.NullText = "";
gridControl.RepositoryItems.Add(comboxEdit);
gridColumn.ColumnEdit = comboxEdit;
this.mControlList.Add(model);
}
///
/// 说明:富文本编辑框
/// 创建人:龚宇超
/// 创建日期:2018-06-01
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
/// The model.
public virtual void InitRichEdit(TreeListColumn gridColumn)
{
RepositoryItemRichTextEdit richEdit = new RepositoryItemRichTextEdit();
richEdit.Encoding = Encoding.UTF8;//乱码问题
gridControl.RepositoryItems.Add(richEdit);
gridColumn.ColumnEdit = richEdit;
}
///
/// 说明:表格图片
/// 创建人:龚宇超
/// 创建日期:2018-08-02
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public virtual void InitPicEdit(TreeListColumn gridColumn)
{
RepositoryItemPictureEdit picEdit = new RepositoryItemPictureEdit();
picEdit.AutoHeight = true;
picEdit.SizeMode = PictureSizeMode.Zoom;
picEdit.BestFitWidth = 16;
picEdit.CustomHeight = 16;
gridColumn.ColumnEdit = picEdit;
}
///
/// 说明:创建 模块返回ID
/// 创建人:曹屹峰
/// 创建日期:2021-08-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
private void InitSelectReturnId(TreeListColumn gridColumn, GridColumnModel model)
{
FrmModelLookUp modelLookUp = new FrmModelLookUp(model.addModuleld, model.IsRadio);
modelLookUp.ValueField = model.ValueMember;
modelLookUp.TextField = model.TextMember;
modelLookUp.SourceSQL = model.SqlSource;
modelLookUp.IsType = model.FieldType;
modelLookUp.ValueMember = model.FieldType == ControlType.LabSelectReturnId ? model.ValueMember : model.TextMember;
modelLookUp.Tag = model;
RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
btnEdit.NullText = "";
btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
btnEdit.AllowNullInput = DefaultBoolean.False;
btnEdit.DisplayMember = model.TextMember;
btnEdit.SeparatorChar = ',';
btnEdit.ValueMember = model.FieldType == ControlType.LabSelectReturnId ? model.ValueMember : model.TextMember;
btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用.
btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
btnEdit.Tag = model;
btnEdit.Buttons[1].Tag = modelLookUp;
btnEdit.ButtonClick += new ButtonPressedEventHandler(OnModuleChoice);
gridControl.RepositoryItems.Add(btnEdit);
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
this.mControlList.Add(model);
}
///
/// 说明:创建 模块返回ID
/// 创建人:曹屹峰
/// 创建日期:2021-08-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
private void InitSelectReturnIdNew(TreeListColumn gridColumn, GridColumnModel model)
{
FrmModelLookUp2 modelLookUp = new FrmModelLookUp2(model.addModuleld, model.IsRadio);
modelLookUp.ValueField = model.ValueMember;
modelLookUp.TextField = model.TextMember;
modelLookUp.SourceSQL = model.SqlSource;
modelLookUp.IsType = model.FieldType;
modelLookUp.ValueMember = model.FieldType == ControlType.LabSelectReturnIdNew ? model.ValueMember : model.TextMember;
modelLookUp.Tag = model;
RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
btnEdit.NullText = "";
btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
btnEdit.AllowNullInput = DefaultBoolean.False;
btnEdit.DisplayMember = model.TextMember;
btnEdit.SeparatorChar = ',';
btnEdit.ValueMember = model.FieldType == ControlType.LabSelectReturnIdNew ? model.ValueMember : model.TextMember;
//btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
if (model.ModuleFrameDisplayText)
{
DataTable dataTable = MainImpl.GetDataTableResult(modelLookUp.SysModel.MenuSql);
btnEdit.DataSource = dataTable;
}
btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用.
btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
btnEdit.Tag = model;
btnEdit.Buttons[1].Tag = modelLookUp;
btnEdit.ButtonClick += new ButtonPressedEventHandler(OnModuleChoiceNew);
gridControl.RepositoryItems.Add(btnEdit);
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
this.mControlList.Add(model);
}
///
/// 说明:创建 模块返回行数据
/// 创建人:唐德馨
/// 创建日期:2022-10-4
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
private void InitSelectReturnRows(TreeListColumn gridColumn, GridColumnModel model)
{
FrmRowsModelLookUp modelLookUp = new FrmRowsModelLookUp();
modelLookUp.UnionModuleCodel = model.addModuleld;
modelLookUp.gridColumnModel = model;
modelLookUp.ValueField = model.ValueMember;
modelLookUp.TextField = model.TextMember;
modelLookUp.SourceSQL = model.SqlSource;
modelLookUp.IsType = model.FieldType;
modelLookUp.ValueMember = model.FieldType == ControlType.LabSelectReturnId ? model.ValueMember : model.TextMember;
modelLookUp.selectField = gridColumn.FieldName;
modelLookUp.Tag = model;
RepositoryItemButtonEdit btnEdit = new RepositoryItemButtonEdit();
btnEdit.NullText = "";
btnEdit.AllowNullInput = DefaultBoolean.False;
//RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
//btnEdit.NullText = "";
//btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
//btnEdit.AllowNullInput = DefaultBoolean.False;
//btnEdit.DisplayMember = model.TextMember;
//btnEdit.SeparatorChar = ',';
//btnEdit.ValueMember = model.FieldType == ControlType.LabSelectReturnId ? model.ValueMember : model.TextMember;
//btnEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用.
btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
btnEdit.Tag = model;
btnEdit.Buttons[1].Tag = modelLookUp;
btnEdit.ButtonClick += new ButtonPressedEventHandler(OnModuleRowsChoice);
gridControl.RepositoryItems.Add(btnEdit);
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
this.mControlList.Add(model);
}
///
/// 说明:创建CheckBoxEdit
/// 创建人:龚宇超
/// 创建日期:2017-08-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
public virtual void InitCheckEdit(TreeListColumn gridColumn)
{
RepositoryItemCheckEdit checkEdit = new RepositoryItemCheckEdit();
checkEdit.ValueChecked = 1;
checkEdit.ValueUnchecked = 0;
gridControl.RepositoryItems.Add(checkEdit);
gridColumn.ColumnEdit = checkEdit;
}
///
/// 说明:列菜单配置
/// 创建人:龚宇超
/// 创建日期:2018-08-09
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
private void OnPopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
{
try
{
if (e.Menu.MenuType == TreeListMenuType.Column)
{
TreeList treeList = sender as TreeList;
TreeListHitInfo hitInfo = treeList.CalcHitInfo(e.Point);
TreeListMenu columnMenu = e.Menu as TreeListMenu;
DXMenuItem itemFixLeft = new DXMenuItem("冻结列", FixLeftItemClick);
DXMenuItem itemFixLeftAll = new DXMenuItem("冻结列(所有列)", FixLeftAllItemClick);
DXMenuItem itemUnFix = new DXMenuItem("清除冻结", UnFixItemClick);
DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", SaveItemClick);
DXMenuItem itemResetColumn = new DXMenuItem("重置表格属性", ResetItemClick);
DXMenuItem itemExportColumn = new DXMenuItem("导出表格数据", ExportItemClick);
DXMenuItem itemPrintColumn = new DXMenuItem("打印表格数据", PrintItemClick);
DXMenuItem itemSortColumn = new DXMenuItem("清除全部列排序", ClearSortItemClick);
DXMenuItem itemBsChartShowClick = new DXMenuItem("一键所有列属性设置", InstAllColumn);
itemSaveColumn.BeginGroup = itemFixLeft.BeginGroup = true;
itemBsChartShowClick.Visible = ERPInfo.Instance.UserName == "管理员" && Model != null;
itemFixLeft.Tag = itemFixLeftAll.Tag = itemUnFix.Tag = hitInfo.Column;
itemSaveColumn.Tag = itemResetColumn.Tag = itemExportColumn.Tag = itemPrintColumn.Tag = itemSortColumn.Tag = itemBsChartShowClick.Tag = hitInfo.Column;
columnMenu.Items.AddRange(new DXMenuItem[] { itemFixLeft, itemFixLeftAll, itemUnFix });
if (!string.IsNullOrEmpty(CustomColumKey)) columnMenu.Items.AddRange(new DXMenuItem[] { itemSaveColumn, itemResetColumn });
columnMenu.Items.AddRange(new DXMenuItem[] { itemExportColumn, itemPrintColumn, itemSortColumn, itemBsChartShowClick });
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:冻结列点击
/// 创建人:龚宇超
/// 创建日期:2018-08-09
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void FixLeftItemClick(object sender, EventArgs e)
{
try
{
DXMenuItem item = sender as DXMenuItem;
TreeListColumn column = item.Tag as TreeListColumn;
column.Fixed = FixedStyle.Left;
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:冻结所有列
/// 创建人:龚宇超
/// 创建日期:2018-08-09
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void FixLeftAllItemClick(object sender, EventArgs e)
{
try
{
DXMenuItem item = sender as DXMenuItem;
TreeListColumn column = item.Tag as TreeListColumn;
TreeList treeList = sender as TreeList;
foreach (TreeListColumn col in treeList.Columns)
{
if (col.AbsoluteIndex <= column.AbsoluteIndex)
{
col.Fixed = FixedStyle.Left;
}
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:取消冻结列
/// 创建人:龚宇超
/// 创建日期:2018-02-01
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void UnFixItemClick(object sender, EventArgs e)
{
try
{
DXMenuItem item = sender as DXMenuItem;
TreeListColumn column = item.Tag as TreeListColumn;
column.Fixed = FixedStyle.None;
column.VisibleIndex = column.AbsoluteIndex;
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:导出表格数据
/// 创建人:龚宇超
/// 创建日期:2018-02-01
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void ExportItemClick(object sender, EventArgs e)
{
try
{
this.TreeListObj.ToExcelTreeList(this.Model.FormText);
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:清除全部列排序
/// 创建人:龚宇超
/// 创建日期:2018-02-01
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void ClearSortItemClick(object sender, EventArgs e)
{
try
{
this.TreeListObj.ClearSorting();
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:设置编辑列
/// 创建人:龚宇超
/// 创建日期:2018-08-09
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The table.
/// The custom colum key.
public override void SetEditColumns(DataTable table, string customColumKey = "")
{
if (table == null) return;
this.CustomColumKey = customColumKey;
for (int i = 0; i < table.Rows.Count; i++)
{
GridColumnModel model = new GridColumnModel(table.Rows[i]);
TreeListColumn gridColumn = new TreeListColumn();
gridColumn.FieldName = model.FieldName;
gridColumn.Name = model.FieldName;
gridColumn.Caption = model.FieldText;
gridColumn.Width = model.Width;
gridColumn.Tag = model;
gridColumn.VisibleIndex = i;
gridColumn.Visible = model.Visible;
gridColumn.OptionsColumn.AllowEdit = model.Edit;
if (!model.Edit)
{
gridColumn.AppearanceHeader.Options.UseForeColor = true;
gridColumn.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(HeaderColor);
}
if (model.CanNull)
{
gridColumn.AppearanceHeader.Options.UseForeColor = true;
gridColumn.AppearanceHeader.ForeColor = RequiredForceColor;
}
gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList;
gridColumn.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
if (!string.IsNullOrEmpty(model.AutoPadDataReleColName))
{
AutoPadDataReleColList.Add(model);
}
// 设置列格式化、汇总
this.SetColumnFormat(gridColumn, model);
this.SetColumnSumming(gridColumn, model);
// 创建列
this.InitEditColumns(gridColumn, model);
this.TreeListObj.Columns.AddRange(new TreeListColumn[] { gridColumn });
this.ColumnList.Add(model);
}
DataTable customTable = this.TreeListObj.GetCustomColumnByDatabase(this.CustomColumKey);
this.SetCustomColumns(customTable);
// 延迟加载数据源
this.mLoading = false;
this.mTimer.Tick += new EventHandler(mTimerTick);
this.mTimer.Start();
}
///
/// 说明:延迟加载数据源
/// 创建人:龚宇超
/// 创建日期:
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected void mTimerTick(object sender, EventArgs e)
{
if (!mLoading)
{
mLoading = true;
try
{
SetColumnsSource();
}
catch (Exception ex)
{
}
finally
{
if (this.OnDataSourceBindCallBack != null) this.OnDataSourceBindCallBack(null, null);
}
}
else
{
this.mTimer.Stop();
this.mTimer.Dispose();
}
}
private void SetColumnsSource()
{
foreach (GridColumnModel item in mControlList)
{
if (ControlType.IsNotLoadData(item.FieldType)) continue;
DataTable dataTable = BaseImpl.GetDataTableResult(item.SqlSource);
Application.DoEvents();
if (!item.Visible) continue;
switch (item.FieldType)
{
case ControlType.LabComboxValue:
case ControlType.LabComboxText:
case ControlType.LabComboxValueParam:
case ControlType.LabComboxTextParam:
case ControlType.LabTreeType:
RepositoryItemLookUpEdit lookUp = this.TreeListObj.Columns[item.FieldName].ColumnEdit as RepositoryItemLookUpEdit;
lookUp.DataSource = dataTable;
break;
case ControlType.LabAutoCompleteValue:
case ControlType.LabAutoCompleteText:
case ControlType.LabAutoCompleteValueParam:
case ControlType.LabAutoCompleteTextParam:
case ControlType.LabAutoGridValue:
case ControlType.LabAutoGridText:
case ControlType.LabAutoGridValueParam:
case ControlType.LabAutoGridTextParam:
int popWidth = 0;
RepositoryItemGridLookUpEdit lookGridUp = this.TreeListObj.Columns[item.FieldName].ColumnEdit as RepositoryItemGridLookUpEdit;
DataTable table = dataTable;
lookGridUp.DataSource = table;
if (table.Columns.Contains("remark") && lookGridUp.View.Columns.FirstOrDefault(x => x.FieldName == "remark") == null)
{
DevExpress.XtraGrid.Columns.GridColumn remarkColumn = new DevExpress.XtraGrid.Columns.GridColumn();
remarkColumn.Caption = "备注";
remarkColumn.Name = remarkColumn.FieldName = "remark";
remarkColumn.Visible = true;
lookGridUp.View.Columns.Add(remarkColumn);
}
foreach (DataColumn dcol in table.Columns)
{
if ((dcol.ColumnName.Substring(0, 1) != "_") && lookGridUp.View.Columns.FirstOrDefault(x => x.FieldName == dcol.ColumnName) == null)
{
if ((dcol.ColumnName.ToLower() != item.ValueMember.ToLower()) && (dcol.ColumnName.ToLower() != item.TextMember.ToLower()) && (dcol.ColumnName.ToLower() != "remark") && ((int)dcol.ColumnName[0] > 127))
{
DevExpress.XtraGrid.Columns.GridColumn otherColumn = new DevExpress.XtraGrid.Columns.GridColumn();
otherColumn.Name = otherColumn.FieldName = otherColumn.Caption = dcol.ColumnName;
otherColumn.Visible = true;
lookGridUp.View.Columns.Add(otherColumn);
}
if (lookGridUp.View.Columns.FirstOrDefault(x => x.FieldName == dcol.ColumnName) != null)
{
DevExpress.XtraGrid.Columns.GridColumn gCol = lookGridUp.View.Columns[dcol.ColumnName];
gCol.Width = CalcMaxColumnWidth(table, gCol.Name);
popWidth += gCol.Width;
}
}
}
lookGridUp.PopupFormSize = new System.Drawing.Size(popWidth, lookGridUp.PopupFormSize.Height);
break;
default:
break;
}
}
}
///
/// 说明:设置编辑列
/// 创建人:龚宇超
/// 创建日期:2018-08-09
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The table.
/// The custom colum key.
public virtual void InitializeTreeMethod()
{
this.TreeListObj.CellValueChanging += new DevExpress.XtraTreeList.CellValueChangedEventHandler(OnCellValueChaning);
}
protected virtual void OnCellValueChaning(object sender, CellValueChangedEventArgs e)
{
try
{
TreeListColumn gridColumn = e.Column;
SetCheckedChildNodes(e.Node, e.Value, gridColumn);
SetCheckedParentNodes(e.Node, e.Value, gridColumn);
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:设置子节点的状态
/// 创建人:龚宇超
/// 创建日期:2020-05-12
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The node.
/// The check.
/// The grid column.
protected virtual void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, Object check, TreeListColumn gridColumn)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
node.Nodes[i].SetValue(gridColumn, check);
SetCheckedChildNodes(node.Nodes[i], check, gridColumn);
}
node.SetValue(gridColumn, check);
SetCheckedParentNodes(node, check, gridColumn);
}
///
/// 说明:设置父节点的状态
/// 创建人:龚宇超
/// 创建日期:2020-05-12
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The node.
/// The check.
/// The grid column.
protected virtual void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, Object check, TreeListColumn gridColumn)
{
if (node.ParentNode != null)
{
bool b = false;
int state;
for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
{
state = (int)(node.ParentNode.Nodes[i].GetValue(gridColumn));
if ((int)check != state)
{
b = !b;
break;
}
}
node.ParentNode.SetValue(gridColumn, b ? CheckState.Indeterminate : check);
SetCheckedParentNodes(node.ParentNode, check, gridColumn);
}
}
///
/// 说明:
/// 创建人:龚宇超
/// 创建日期:2019-11-11
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
protected virtual void SetGridRowHeightAndFont()
{
SetGridRowHeightAndFont(this.TreeListObj);
}
private void SetGridRowHeightAndFont(TreeList treeList)
{
if (treeList == null) return;
if (SystemInfo.Instance.GridRowFontSize > 0)
{
treeList.Appearance.Row.Font = new Font("微软雅黑", SystemInfo.Instance.GridRowFontSize);
treeList.Appearance.HeaderPanel.Font = new Font("微软雅黑", SystemInfo.Instance.GridRowFontSize);
}
if (SystemInfo.Instance.GridRowHeight > 0)
{
treeList.ColumnPanelRowHeight = treeList.RowHeight = SystemInfo.Instance.GridRowHeight;
}
}
///
/// 说明:保存树表格表格属性
/// 创建人:王一帆
/// 创建日期:2019-11-14
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void SaveItemClick(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(this.CustomColumKey))
{
MessageUtil.Show(ResourceKeys.NotSettingResetColumn);
return;
}
DataRow rowItem = null;
bool success = BaseImpl.HasExistsDataRow(ResourceKeys.SettingTableName, "formKey", CustomColumKey.ToString(), string.Format(" and OperatorName='{0}' ", ERPInfo.Instance.UserName), out rowItem);
if (!success)
{
MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable);
return;
}
if (MessageUtil.Show(ResourceKeys.IsSaveColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
if (rowItem == null)
{
success = this.TreeListObj.SaveCustomColumnToDatabase(this.CustomColumKey);
}
else
{
success = this.TreeListObj.UpdateCustomColumnToDatabase(this.CustomColumKey);
}
MessageUtil.Show(success ? ResourceKeys.SaveSuccess : ResourceKeys.SaveFault);
}
catch (SqlException sex)
{
if (sex.Message.Contains(ResourceKeys.FieldLenIsShort) &&
MessageUtil.Show(ResourceKeys.SaveFault + "\r\n" + ResourceKeys.CanUpgradeTable, MessageBoxButtons.YesNo) == DialogResult.Yes &&
BaseImpl.UpdateTableField(ResourceKeys.SettingTableName, "formKey", "varchar(200)"))
{
MessageUtil.Show(ResourceKeys.UpdateSuccess);
}
}
catch (Exception ex)
{
LogUtil.WriteError("保存表格属性出错", ex);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
}
///
/// 说明:重置树表格属性
/// 创建人:王一帆
/// 创建日期:2019-11-14
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
protected override void ResetItemClick(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(this.CustomColumKey))
{
MessageUtil.Show(ResourceKeys.NotSettingResetColumn);
return;
}
if (!BaseImpl.HasExistsTable(ResourceKeys.SettingTableName))
{
MessageUtil.Show(ResourceKeys.NotFoundSettingColumnTable);
return;
}
if (MessageUtil.Show(ResourceKeys.IsResetColumn, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
bool success = this.TreeListObj.ResetCustomColumnToDatabase(this.CustomColumKey);
DataTable customTable = this.TreeListObj.GetCustomColumnByDatabase(this.CustomColumKey);
this.SetCustomColumns(customTable, false);
MessageUtil.Show(success ? ResourceKeys.ResetSuccess : ResourceKeys.ResetFault);
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
///
/// 说明:设置列格式化
/// 创建人:龚宇超
/// 创建日期:2018-03-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
/// The model.
public virtual void SetColumnFormat(TreeListColumn gridColumn, GridColumnModel model)
{
if (gridColumn == null || model == null) return;
// 格式化数字
if (!string.IsNullOrEmpty(model.DataFormat))
{
if (model.FieldType == ControlType.LabTextInt || model.FieldType == ControlType.LabCalcText)
{
gridColumn.Format.FormatType = FormatType.Numeric;
gridColumn.Format.FormatString = model.DataFormat;
}
else
{
gridColumn.Format.FormatType = FormatType.Custom;
gridColumn.Format.FormatString = model.DataFormat;
}
}
// 特殊字段格式化
if (model.CanAccuracy)
{
gridColumn.Format.FormatType = FormatType.Numeric;
gridColumn.Format.FormatString = "F2";
}
}
///
/// 说明:设置列汇总
/// 创建人:龚宇超
/// 创建日期:2018-03-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The grid column.
/// The model.
private void SetColumnSumming(TreeListColumn gridColumn, GridColumnModel model)
{
// 设置底部合计
if (gridColumn.VisibleIndex == 0)
{
TreeListObj.OptionsView.ShowSummaryFooter = true;
gridColumn.AllNodesSummary = true;
gridColumn.SummaryFooter = SummaryItemType.Count;
gridColumn.SummaryFooterStrFormat = "合计:{0:#,###}行";
}
else
{
if (model.CanSum)
{
TreeListObj.OptionsView.ShowSummaryFooter = true;
gridColumn.AllNodesSummary = true;
gridColumn.SummaryFooter = !string.IsNullOrEmpty(model.SumCond) ? DevExpress.XtraTreeList.SummaryItemType.Custom : DevExpress.XtraTreeList.SummaryItemType.Sum;
gridColumn.SummaryFooterStrFormat = "{0:" + model.DataFormat + "}";
}
}
}
///
/// 说明:设置树表格自定义列
/// 创建人:王一帆
/// 创建日期:2019-11-14
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
protected override void SetCustomColumns(DataTable customTable, bool isInit = true)
{
Dictionary