/******************************
* 说明:带操作表格的自定义控件
* 创建人:龚宇超
* 创建日期:2017-09-01
* 修改人:
* 修改日期:
* 修改备注:
* 版本: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 DevExpress.XtraGrid;
using Lskj.Control;
using Lskj.Data;
using Lskj.Business.Impl;
using Lskj.Control.Model;
using DevExpress.XtraBars;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Columns;
using System.Collections;
using Lskj.Business;
using Lskj.Util;
using Lskj.Model;
using System.Data.SqlClient;
using System.IO;
using DevExpress.XtraGrid.Views.Layout;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraTab;
using DevExpress.XtraEditors;
using System.Text.RegularExpressions;
using System.Diagnostics;
using Lskj.Core;
using Lskj.Util.HttpUtil;
using Lskj.WebErp.Core.BLL.Abstract;
using Lskj.Data.Api.BLL;
using DevExpress.XtraGrid.Views.Base;
using System.Threading.Tasks;
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraTreeList.Nodes;
namespace Lskj.Control
{
///
/// 带操作表格的自定义控件
///
public partial class ModuleGridEx : UserControl
{
#region private property
///
/// 常用打印对象,用于加载时暂时获取焦点
///
/// The title label object.
public DevExpress.XtraEditors.DropDownButton ddbOperObj { get { return ddbOper; } }
///
/// 扫码控件
///
private LabelTextEdit _scanEdit;
///
/// 设置操作按钮是否可用(包含添加、删除、保存、导入)
///
private bool _visibleOperPanel = true;
///
/// 设置查询面板是否显示
///
private bool _visibleSearchPanel = true;
///
/// mrp模式下查询面板显示
///
private bool _visibleMrpSearchPanel;
///
/// 底部操作按钮是否显示简短模式,默认为简短模式
///
private bool _operShortMode = true;
///
/// 是否直接打印
///
private bool _isExcPrint;
///
/// 主打印Sql
///
private string _mainPrintSql;
///
/// 打印主sql中关联打印次数返回条件
///
private string _printModeCond;
///
/// 无需更新的列
///
private string[] _disUpdateColumns = { "id" };
///
/// 主键
///
private string _parmaryKey = string.Empty;
///
/// 树结构、表格、配置字段
///
private string _parentKey = string.Empty;
///
/// 打印完成后添加数据用到的参数
///
private List _printSaveParams;
///
/// The bbi_import
///
private BarButtonItem bbi_import, bbi_export, bbi_word, bbi_print, bbi_detail_export, bbi_Allexport;
///
/// 左侧表格列字段
///
private DataRow _leftGridField;
///
/// 必须录入字段
///
private DataRow[] _nullFields = new DataRow[] { };
///
/// 查询条件
///
private DataTable _queryTable = new DataTable();
///
/// 固定查询条件
///
private DataTable _fixedQueryTable = new DataTable();
///
/// 表格列
///
private DataTable _gridColumns = new DataTable();
///
/// The _grid all columns
///
private DataTable _gridAllColumns = new DataTable();
///
/// 高级查询条件设置
///
private DataTable _schemesTable = new DataTable();
///
/// 保存验证条件表
///
public DataTable SaveCondTab = new DataTable();
///
/// 判断明细是否是拖拽中
///
private bool isSortDrag;
///
/// 按钮形式展示的右键信息
///
private List ButtonModeRightMenus = new List();
///
/// 按钮形式展示的右键
///
private List RightButtons = new List();
///
/// 附加右键菜单集合
///
public List itemCommonList = new List();
///
/// 排序关联值
///
private string DetailOrderField = string.Empty;
private Point m_mouseDownLocation;
private int m_dragHandle;
private int[] dragRowsIndex;
private DragForm m_dragRowShadow;
///
/// Occurs when [on Save Grid call back].
///
public event EventHandler OnSaveGridCallBack;
///
/// 删除按钮点击后
///
public event EventHandler AfterDeleteGridCallBack;
///
/// 右键执行后回调
///
public event EventHandler RightGridCallBack;
///
/// 下面明细表右键执行后回调
///
public event EventHandler DetailRightGridCallBack;
///
/// Occurs when [on close callback].
///
public event EventHandler OnCloseCallback;
///
/// 点击刷新按钮后执行后回调
///
public event EventHandler AfterRefreshingCallBack;
///
/// 初始数据源对应
///
public Dictionary LineStatus = new Dictionary();
///
/// 拖拽模式
///
public bool isDrag = false;
///
/// 是否保存成功(Lskj.PubBillSpecial点击保存后,先执行右上方表格保存)
///
public bool isSuccessfullySaved;
///
/// 扫码添加行
///
public DataRow SweepCodeRow = null;
///
/// 浏览器添加行是否成功
///
public bool BrowserAddRow = false;
#endregion
#region public set property
///
/// 公有化下标签
///
public PanelControl ObjPanel
{
get
{
return this.pl_buttom;
}
}
///
/// 搜索界面
///
public Panel TipsobjPanel
{
get { return this.TipsPanel; }
}
public SimpleButton BtnSave
{
get { return this.btnSave; }
}
///
/// 搜索界面
///
public PanelControl SearchPanel
{
get { return this.pl_top_search; }
}
[Description("设置操作按钮是否可用(包含添加、删除、保存、导入)")]
public bool VisibleOperPanel
{
get
{
return this._visibleOperPanel;
}
set
{
this._visibleOperPanel = value;
this.pl_buttom.Visible = value;
}
}
[Description("设置查询面板是否显示")]
public bool VisibleSearchPanel
{
get
{
return this._visibleSearchPanel;
}
set
{
this._visibleSearchPanel = value;
this.pl_top.Visible = value;
if (!value)
{
this.pl_top_search.Visible = value;
this.pl_top_fix_search.Visible = value;
}
}
}
///
/// mrp状态下查询控件显示
///
public bool VisibleMrpSearchPanel
{
get
{
return this._visibleMrpSearchPanel;
}
set
{
this._visibleMrpSearchPanel = value;
if (value)
{
this.pl_top.Visible = value;
this.pl_top_search.Visible = value;
this.pl_top_right.Visible = false;
}
//this.pl_top_fix_search.Visible = false;
}
}
///
/// 底部操作按钮是否显示简短模式,默认为简短模式
///
/// true if [oper short mode]; otherwise, false.
[Description("底部操作按钮是否显示简短模式,默认为简短模式")]
public bool OperShortMode
{
get { return _operShortMode; }
set
{
int width = 72, whiteSpace = 6;
if (value)
{
int left = this.Width - 232;
this.btnAdd.Left = left;
this.btnDel.Left = this.btnAdd.Left + width + whiteSpace;
this.btnSave.Left = this.btnDel.Left + width + whiteSpace;
}
else
{
int left = this.Width - 544;
this.btnAdd.Left = left;
this.btnDel.Left = this.btnAdd.Left + width + whiteSpace;
this.btnUpdate.Left = this.btnDel.Left + width + whiteSpace;
this.btnSave.Left = this.btnUpdate.Left + width + whiteSpace;
this.btnImport.Left = this.btnSave.Left + width + whiteSpace;
this.btnExport.Left = this.btnImport.Left + width + whiteSpace;
this.btnPrint.Left = this.btnExport.Left + width + whiteSpace;
}
this.btnUpdate.Visible = this.btnImport.Visible = this.btnExport.Visible = this.btnPrint.Visible = !value;
this._operShortMode = value;
}
}
#endregion
#region public property
///
/// 是否为明细表格
///
public bool IsDetail;
///
/// 主键
///
public string ParmaryKey;
///
/// 左侧树结构、表格主键
///
public string ParentKeyField;
///
/// 特殊情况带入关联值,比如右键菜单调用
///
public string ParentKeyValue;
///
/// 左侧树结构、表格主键关联右侧数据字段
///
public string ParentUnionField;
///
/// 取底部数据字段
///
public string DetailKeyField;
///
/// 关联Key
///
public string UnionKey;
///
/// 关联Value
///
public string UnionValue;
///
/// 添加时给控件赋值
///
public string ControlSql;
///
/// 查询控件赋值
///
public string SearchControlSql;
///
/// 系统模块实体对象
///
/// The system model.
public ModuleModel SysModel { get; private set; }
///
/// 调用动态链接库默认传递参数
///
public DynamicModel Model { get; private set; }
///
/// 左侧树结构
///
public TreeViewEx LeftTreeViewEx;
///
/// 左侧表格
///
public GridControlEx LeftGridEx;
///
///特殊左侧表
///
public GridControlEx SpecialLeftTable;
///
/// 主表查询时,左侧树表格是否为精确查询(like改成=)
///
public bool TreeExactQuery = false;
///
/// 父容器表格
///
public GridControlEx ParentGridEx;
///
/// 用于随工单
///
/// 标签添加数据
///
public MyControl ParentControlEx;
///
/// 自定义查询条件
///
public MyControl SearchObj { get; private set; }
///
/// 左查询条件
///
public MyControl _leftGridSearchObj;
///
/// 表格对象
///
/// The grid view object.
public GridControlEx GridControlObj
{
get { return this.gcMain; }
set { this.gcMain = value; }
}
///
/// 底部多标签控件
///
public XtraTabControl TabObj;
public event SaveEventHander SaveEvent;
///
/// 保存完成事件
///
/// The sender.
public delegate void SaveEventHander(string where = "");
/// 所有导出程序的回调函数
///
public event EventHandler OnExportCallBack;
///
/// 注册设置公共事件私有类
///
private static PubEvenImpl _eventHandler;
///
/// 注册设置公共事件类
///
private static PubEvenImpl eventHandler;
///
/// 父级条件控件,子控件的值替换父控件的值
///
public MyControl ParentControlObj;
///
/// 保存结果
///
private bool SaveResults = false;
///
/// 作为明细时对应的标签名
///
public string TagName;
///
/// 上方提示框是否创建
///
public bool CreatePromptBox = false;
///
/// 上方提示框
///
public LabelRichEdit PromptBox = null;
///
/// 上方高度
///
public int TopHeight = 0;
///
/// 附加模块关联主表的树型模式
///
public bool AdditionalAssociatedMain = false;
///
/// 点击搜索时,判断当前表的明细是否有修改或新增状态的行
///
/// The sender.
public event VerifyDetailsTab verifyDetailsTab;
public delegate void VerifyDetailsTab();
#endregion
#region private method
///
/// 说明:初始化查询条件(查询条件不自动查询)
/// 创建人:龚宇超
/// 创建日期:2017-09-05
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
private void InitializeQueryCondition(bool ProcessExists = false)
{
bool fixedQuery = _queryTable == null || _queryTable.Rows.Count == 0;
if (!Model.DataCaches.GetValue(this, "SearchObj", out MyControl searchObj))
{
searchObj = new MyControl(ReplaceBmpField(this.SysModel.MenuSql), gcMain, LeftTreeViewEx, LeftGridEx, _leftGridSearchObj);//替换sql语句中的bmp字段
searchObj.SpecialLeftTable = this.SpecialLeftTable;
searchObj.Model = Model;
}
this.SearchObj = searchObj;
if (this._leftGridField != null)
{
this.SearchObj.ParentKey = this._parentKey = this._leftGridField["fieldname"] + "";
}
this.SearchObj.ModuleId = Model.ModuleId;
this.SearchObj.ParentKeyField = this.ParentKeyField;
this.SearchObj.ParentUnionField = this.ParentUnionField;
//this.SearchObj.preSearchVerification += new PreSearchVerification(OnPreSearchVerification);// 查询条件执行前
this.SearchObj.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchBeforeCallBack);// 查询条件执行前
this.SearchObj.OnSearchAfterCallBack += new EventHandler(OnSearchAfterCallBack);// 查询条件执行后
this.SearchObj.TreeExactQuery = this.TreeExactQuery;
// 明细表格默认不查询
this.SearchObj.OnDataSourceBindCallBack += new EventHandler(OnMainSearchDataSourceBindCallBack);// 数据源绑定完成触发
if (!string.IsNullOrEmpty(ParentKeyValue) && !string.IsNullOrEmpty(DetailKeyField))
this.SearchObj.WhereCond = string.Format(" and {0}='{1}'", DetailKeyField, ParentKeyValue);
if (fixedQuery)
{
this.pl_top_fix_search.Visible = true;
// 加载固定查询条件
if (!Model.DataCaches.GetValue(this, "FixedQueryFields", out DataTable table))
{
table = BaseModuleImpl.GetFixedQueryFields(this.Model.ModuleCode);//加载固定查询条件
}
if (Business.Impl.LanguageTranslation.Translatable)
{
table = Business.Impl.LanguageTranslation.TranslationTableColumn(table, "fieldText");
}
// DataTable
this.cbField.DisplayMember = "fieldText";
this.cbField.ValueMember = "fieldName";
this.cbField.DataSource = table;
if (this.VisibleMrpSearchPanel)
this.SearchObj.InitDefaultSearchControl(table, this.pl_top_fix_search, false);
else
this.SearchObj.InitDefaultSearchControl(table, this.pl_top_fix_search);
//固定条件不显示,隐藏上方。(只显示表格)
if (SystemInfo.Instance.HideFixedConditions)
{
this.pl_top.Visible = false;
}
}
else
{
this.gcMain.gridControl.Tag = pl_top_search;
// 加载配置查询条件
this.pl_top_fix_search.Visible = false;
this.SearchObj.OtherParams = Model.OtherParams();
if (this.VisibleMrpSearchPanel)
this.pl_top.Height = this.SearchObj.InitSearchControl(_queryTable, this.pl_top_search, false, this._schemesTable, Model);
else
this.pl_top.Height = this.SearchObj.InitSearchControl(_queryTable, this.pl_top_search, this._schemesTable, Model);
}
}
///
/// 说明:初始化常用操作
/// 创建人:龚宇超
/// 创建日期:2017-09-05
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
private void InitializeCommonOperation()
{
// 常用操作
bbi_import = new BarButtonItem();
bbi_import.Caption = "数据导入";
bbi_import.ItemClick += new ItemClickEventHandler(OnImportItemClick);
bbi_export = new BarButtonItem();
bbi_export.Caption = "数据导出";
bbi_export.ItemClick += new ItemClickEventHandler(OnExportItemClick);
bbi_Allexport = new BarButtonItem();
bbi_Allexport.Caption = "所有数据导出";
bbi_Allexport.ItemClick += new ItemClickEventHandler(OnAllExportItemClick);
bbi_detail_export = new BarButtonItem();
bbi_detail_export.Caption = "明细导出";
bbi_detail_export.ItemClick += new ItemClickEventHandler(btnExportInfo_Click);
bbi_print = new BarButtonItem();
bbi_print.Caption = "常规打印";
bbi_print.ItemClick += new ItemClickEventHandler(OnNormalPrintItemClick);
bbi_word = new BarButtonItem();
bbi_word.Caption = "帮助文档";
bbi_word.ItemClick += new ItemClickEventHandler(OnWordItemClick);
//string[] authorizedPersonnel = SysModel.ImportPermissions.Split(',');//有导入权限的人员
//if (string.IsNullOrWhiteSpace(SysModel.ImportPermissions) || Array.IndexOf(authorizedPersonnel, ERPInfo.Instance.UserName) != -1 || ERPInfo.Instance.UserName.Equals("管理员"))
//{
// pm_oper.AddItem(bbi_import);
//}
DataRow dr = null;
// 判断导入权限
if (this.SysModel.ImportEnable && this.ValidateCond(this.SysModel.ImportCond, dr, "P_SystemDllTab", "importCond"))
{
pm_oper.AddItem(bbi_import);
}
// 判断导出权限
this.gcMain.ExportPermission = false;
if (this.SysModel.ExportEnable && this.ValidateCond(this.SysModel.ExportCond, dr, "P_SystemDllTab", "exportCond") && this.SysModel.ExportPermission)
{
bbi_export.Tag = SysModel;
pm_oper.AddItem(bbi_export);
this.gcMain.ExportPermission = true; //this.SysModel.ExportPermission;
}
if (this.SysModel.ExportPermission && SystemInfo.Instance.DetailExportDisplay)
{
pm_oper.AddItem(bbi_detail_export);
}
//判断帮助文档
if (!SystemInfo.Instance.HideHelpDocument)
{
pm_oper.AddItem(bbi_word);
}
//pm_oper.AddItem(bbi_export);
//pm_oper.AddItem(bbi_Allexport);
// pm_oper.AddItem(bbi_detail_export);
if (SystemInfo.Instance.ConventionalPrintingDisplay)
{
pm_oper.AddItem(bbi_print);
}
//pm_oper.AddItem(bbi_word);
}
///
/// 说明:初始化常用工具
/// 创建人:龚宇超
/// 创建日期:2018-04-09
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
private void InitializeCommonTool()
{
Dictionary