Files
lserp_cs_5.0/插件库/Lskj.PubModuleDetailBrp/FrmMain.cs
T
2026-07-10 15:25:05 +08:00

2535 lines
110 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Common;
using System.Data.Linq;
using System.Linq;
using System.Diagnostics;
using System.Collections;
using System.Text.RegularExpressions;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Columns;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.Controls;
using ExcelPlus;
using CommonLib;
using CommonLib.utils;
using Lskj.Common;
using CommonLib.data;
using System.Reflection;
using Lskj.MyControl;
using DevExpress.XtraTab;
using DevExpress.XtraBars;
namespace Lskj.PubModuleDetailBrp
{
public partial class FrmMain : FormBase
{
private bool inSummary = false;
private DataTable dtSum = new DataTable();//统计列
private MySearchCreateControl mcc = new MySearchCreateControl();
private MySearchCreateControl mccTop = new MySearchCreateControl();
private int bottomHeight = 50;
private int ModulePriv = 0;
private bool IsSelected = false; //模版选择
private const string mBrpField = "brpid"; // bmp固定ID
private string typeName = string.Empty;//单据类型名称
public DataTable baseDtFiled = new DataTable();
#region 私有属性
/// <summary>
/// 左边显示类型
/// </summary>
private int LeftType { get; set; }
/// <summary>
/// 树控件表名
/// </summary>
private string TreeSql { get; set; }
/// <summary>
/// DbDataAdapter
/// </summary>
private SqlDataAdapter da { get; set; }
/// <summary>
/// 操作Dataset
/// </summary>
private DataSet ds { get; set; }
/// <summary>
/// 调用方案
/// </summary>
private int n { get; set; }
/// <summary>
/// 系统配置表
/// </summary>
private DataRow dtSystemDlltab;
/// <summary>
/// 数据库字段配置
/// </summary>
private DataRow dtSystemwordbooktabTag3;
/// <summary>
///
/// </summary>
private List<ToolStripMenuItem> tsmMenuList = new List<ToolStripMenuItem>();
/// <summary>
/// 条件颜色
/// </summary>
private DataTable dtSysColorList;
/// <summary>
/// 搜索字段
/// </summary>
private DataTable cbSearchFiled;
private DataTable dtColumns;
/// <summary>
/// 必须录入字段
/// </summary>
private DataRow[] nullableFields;
// 不包含图片SQL,暂时解决方案:查询的时候,假如配置了bmp图片,则替换bmp字段,用于表格查询,双击显示数据则使用配置的字段
private string MyNotBmpSql;
private bool isSearch = true; // 是否为点击查询按钮获取数据
//表格编辑
private Boolean gridEdited;
private string addCond; // 添加条件
private string modifyCond; //修改条件
private string deleteCond; //删除条件
private string dragCond; // 拖动条件
private string printCond=string.Empty;
private string exportCond=string.Empty;
private string mParmaryKey;
private bool needModified;
private bool isOpen = true; // 右侧数据是否打开
private bool mInitFinish = false;
private string basePrintType, baseModuleFile, basePrintSQL, basePrintSQL1, basePrintSQL2;
private BarButtonItem bbi_import, bbi_export, bbi_print, bbi_word;
private int searchHide;//是否显示搜索
private int leftWidth; //宽度
private int mRightGridMode; // 右边参数模式,1.面板模式,2.标签模式
private int mRightGridDataMode; // 右边表格模式,1.明细列表数据,2.报表明细模式
private int mSeearchMode; // 查询模式,1.查询条件,2.下拉列表查询
private string beforeSearchSQL;
private GridView gridViewLeft;
public string ModuleDllId { get; set; }
public string LeftCond;
public string[] Params;
private int mEnterOrder; // 0.默认列跳转,1为行跳转
#endregion
#region 缓存数据
/// <summary>
/// 基础档案、报表明细列表数据
/// </summary>
private DataTable moduleDetailTable = new DataTable();
private DataTable moduleDetailBottomTable = new DataTable();
#endregion
#region 构造函数
public FrmMain()
{
//DevExpress.XtraGrid.Localization.GridResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraGridCHS();
//DevExpress.XtraEditors.Controls.Localizer.Active = new Dxper.LocalizationCHS.Win.XtraEditorsCHS();
//DevExpress.XtraLayout.Localization.LayoutLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraLayoutCHS();
//DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraPrintingCHS();
InitializeComponent();
tvLeft.GetTreeView.AfterCheck += new TreeViewEventHandler(tvLeft_AfterCheck);
tvLeft.GetTreeView.AfterSelect += new TreeViewEventHandler(tvLeft_AfterSelect);
ds = new DataSet();
gcMain.gridView.IndicatorWidth = 40;
gcMain.gridView.DoubleClick += new EventHandler(GridViewpub_DoubleClick);
gcMain.gridView.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(gridView_SelectionChanged);
gcMain.gridView.ShowingEditor+=new CancelEventHandler(gridView_ShowingEditor);
//gcMain.gridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(gridView1_FocusedRowChanged);
//gcMain.gridView.RowStyle += new RowStyleEventHandler(gvList_RowCellStyle);
gcMain.gridView.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridBillInfo_CellValueChanged);
}
#endregion
#region 选择树
protected void tvLeft_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.ByMouse)
{
isSearch = false; // 设置当前查询模式为部分数据查询
string strWhere = " and " + dtSystemwordbooktabTag3["fieldname"] + " like '" + e.Node.Name + "%'";
string sql = PubClass.ReplaceWhereCond(MyNotBmpSql) + strWhere;
// 替换查询条件
List<string> list = PubClass.GetParamValue(sql);
foreach (string item in list)
{
string fileName = item.Replace("{", "").Replace("}", "");
Control[] ctrs = pl_search.Controls.Find("txt_" + fileName, true);
if (ctrs.Length > 0)
{
sql = MySearchCreateControl.SetReplaceSql(sql, item, ctrs);
}
}
InitData(sql);
}
}
#endregion
#region 生成行号
protected void GridViewpub_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
e.Appearance.TextOptions.HAlignment = HorzAlignment.Center;
if (e.Info.IsRowIndicator)
{
if (e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
}
#endregion
#region 绑定树
protected void tvLeft_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.ByMouse)
{
//取消节点选中状态之后,取消所有父节点的选中状态
if (e.Node.Checked)
{
setChildNodeCheckedState(e.Node, true);
}
else
{
//取消节点选中状态之后,取消所有父节点的选中状态
setChildNodeCheckedState(e.Node, false);
//如果节点存在父节点,取消父节点的选中状态
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
}
/// <summary>
/// 取消节点选中状态之后,取消所有父节点的选中状态
/// </summary>
/// <param name="currNode"></param>
/// <param name="state"></param>
private void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent;
parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
}
/// <summary>
/// 选中节点之后,选中节点的所有子节点
/// </summary>
/// <param name="currNode"></param>
/// <param name="state"></param>
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
foreach (TreeNode tn in nodes)
{
tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
}
#endregion
#region 初始化数据
private void FrmGridTree_Load(object sender, EventArgs e)
{
string moduleName = System.IO.Path.GetFileName(this.GetType().Assembly.Location);
gridViewLeft = gridLeft.gridView;
gridViewLeft.FocusedRowChanged+=new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(gridViewLeft_FocusedRowChanged);
this.Text = FormText;
DLLCoid = string.IsNullOrEmpty(ModuleDllId) ? DLLCoid : ModuleDllId;
//ModulePriv = PubClass.GetPrivModule(DLLCoid, moduleName, OperatorId, OperatorName);
if (!string.IsNullOrEmpty(ModuleId) && ModuleId != "0")
{
ModulePriv = PubClass.GetPrivModuleByMenuid(ModuleId, moduleName, OperatorId, OperatorName);
}
else
{
ModulePriv = PubClass.GetPrivModule(DLLCoid, moduleName, OperatorId, OperatorName);
}
gcMain.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
dtSystemDlltab = SqlHelper.ExecuteDataSet("select * from P_systemDlltab where DLLCoid='" + DLLCoid + "'").Tables[0].Rows[0];
bottomHeight = 50;
if (dtSystemDlltab.Table.Columns.Contains("bottomheight"))
bottomHeight = Convert.ToInt32("0"+dtSystemDlltab["bottomHeight"]);
dtSystemDlltab["SQL"] = PubClass.ReqSqlParam(dtSystemDlltab["SQL"] + "", OperatorId, OperatorName);
LeftType = Convert.ToInt32(dtSystemDlltab["dllType"]);
HandleBmp(dtSystemDlltab["SQL"].ToString());
gridEdited = (string.IsNullOrEmpty(dtSystemDlltab["selfEdit"] + "") || dtSystemDlltab["selfEdit"] + "" == "0" || dtSystemDlltab["selfEdit"] + "" == "False") ? false : true;
gcMain.gridView.OptionsBehavior.Editable = gridEdited;
btnSave.Enabled = gridEdited;
addCond = dtSystemDlltab["addCond"].ToString().Trim();
modifyCond = dtSystemDlltab["modifyCond"].ToString().Trim();
deleteCond = dtSystemDlltab["deleteCond"].ToString().Trim();
dragCond = dtSystemDlltab["dragCond"].ToString().Trim();
if (dtSystemDlltab.Table.Columns.Contains("exportCond"))
exportCond = dtSystemDlltab["exportCond"].ToString();
if (dtSystemDlltab.Table.Columns.Contains("printCond"))
printCond = dtSystemDlltab["printCond"].ToString();
if (dtSystemDlltab.Table.Columns.Contains("printType"))
basePrintType = dtSystemDlltab["printType"] + "";
if (dtSystemDlltab.Table.Columns.Contains("baseModuleFile"))
baseModuleFile = dtSystemDlltab["baseModuleFile"] + "";
if (dtSystemDlltab.Table.Columns.Contains("basePrintSQL"))
basePrintSQL = dtSystemDlltab["basePrintSQL"] + "";
if (dtSystemDlltab.Table.Columns.Contains("basePrintSQL1"))
basePrintSQL1 = dtSystemDlltab["basePrintSQL1"] + "";
if (dtSystemDlltab.Table.Columns.Contains("basePrintSQL2"))
basePrintSQL2 = dtSystemDlltab["basePrintSQL2"] + "";
if (dtSystemDlltab.Table.Columns.Contains("EnterOrder"))
mEnterOrder = string.IsNullOrEmpty(dtSystemDlltab["EnterOrder"] + "") ? 0 : Convert.ToInt32(dtSystemDlltab["EnterOrder"] + "");
InitPrintMenu();
InitOperMenu();
if (ModulePriv != 1)
{
gridEdited = false;
gcMain.gridView.OptionsBehavior.Editable = false;
addCond = addCond == "" ? " 1<>1 " : addCond + " and 1<>1";
modifyCond = modifyCond == "" ? "1<>1" : modifyCond + " and 1<>1";
deleteCond = deleteCond == "" ? "1<>1" : deleteCond + " and 1<>1";
dragCond = dragCond == "" ? "1<>1" : dragCond + " and 1<>1 ";
printCond = printCond == "" ? "1<>1" : printCond + " and 1<>1";
exportCond = exportCond == "" ? "1<>1" : exportCond + " and 1<>1";
BtnAdd.Visible = false;
btnSave.Visible = false;
BtnDel.Visible = false;
BtnAdd.Enabled = false;
btnSave.Enabled = false;
BtnDel.Enabled = false;
if (bbi_import != null) bbi_import.Enabled = false;
if (bbi_export != null) bbi_export.Enabled = false;
if (bbi_print != null) bbi_print.Enabled = false;
}
searchHide = Convert.ToInt32(dtSystemDlltab["searchHide"].ToString());
leftWidth = Convert.ToInt32(dtSystemDlltab["leftWidth"].ToString());
DataTable dtTag3 = SqlHelper.ExecuteDataSet("select * from P_systemwordbooktab where tab='" + DLLCoid + "' and fieldsqlTag=3").Tables[0];
if (dtTag3 != null && dtTag3.Rows.Count > 0)
dtSystemwordbooktabTag3 = dtTag3.Rows[0];
DataRow drRow = SqlHelper.ExecuteDataSet("select top 1 * from P_systemwordbooktab where tab='" + DLLCoid + "' order by orderid").Tables[0].Rows[0];
dtSysColorList = SqlHelper.ExecuteDataSet("select * from P_systemwordbookcolor where tab='" + DLLCoid + "' and isnull(useflag,0)=0 order by orderid").Tables[0];
mParmaryKey = drRow["fieldname"] + "";
//加载表格
InitColumns();
//初始化菜单
if (ModulePriv==1)
InitMenu();
cbSearchFiled = SqlHelper.ExecuteDataSet("select * from P_systemwordbooktab where tab='" + DLLCoid + "' and ifSearch =0 and isnull(username1,'')<>''").Tables[0];
//加载筛选框
cbField.DataSource = cbSearchFiled;
cbField.DisplayMember = "username1";
cbField.ValueMember = "fieldname";
if (searchHide == 1)
{
pl_search.Visible = false;
}
if (leftWidth > 0)
{
plLeft.Width = leftWidth;
}
//左边树结构
if (LeftType == 1)
{
tvLeft.Visible = true;
gridLeft.Visible = panel1.Visible = pl_right_where.Visible = false;
PubClass.BindTree(dtSystemwordbooktabTag3["fieldsql"] + "", tvLeft.GetTreeView);
gcMain.gridView.OptionsSelection.MultiSelect = true;
GridDragTree gridDragTree = null;
if (ModulePriv==1)
gridDragTree = new GridDragTree(this, gcMain.gridControl, tvLeft.GetTreeView, Drag_EventHandler, dtSystemwordbooktabTag3, dtSystemDlltab["SQLDT1"] + "", mParmaryKey);
}
else if (LeftType == 2)
{
tvLeft.Visible = false;
gridLeft.Visible = true;
gridLeft.RowColorCondtion = SqlHelper.ExecuteDataSet(string.Format("select * from p_systemwordbookcolor where tab='{0}' and isnull(useflag,0)=0 order by orderid", dtSystemwordbooktabTag3["fieldKey"] + "")).Tables[0];
string sql = "select * from p_systemwordbookgrid where fieldid=" + dtSystemwordbooktabTag3["id"] + " order by orderid";
DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
GridColumn gridColumn = new GridColumn();
gridColumn.FieldName = row["fieldname"] + "";
gridColumn.Name = row["fieldname"] + "";
gridColumn.VisibleIndex = i;
gridColumn.Caption = row["username"].ToString();
gridColumn.Width = Convert.ToInt32(row["width"]);
gridColumn.Visible = Convert.ToInt32(row["visible"]) == 0;
gridColumn.OptionsColumn.AllowEdit = false;
if (Convert.ToInt32(row["width"]) <= 0)
gridColumn.Visible = false;
gridViewLeft.Columns.Add(gridColumn);
}
SearchCraeteControl();
gcMain.gridView.OptionsSelection.MultiSelect = true;
GridDrag2GridUpdate g2g = null;
if (ModulePriv==1)
g2g = new GridDrag2GridUpdate(gcMain.gridControl, gridLeft.gridControl, DragGridCallBack);
string width = Lskj.PubUtils.INIHelper.Read("base_width_" + DLLCoid);
if (!string.IsNullOrEmpty(width))
{
panel1.Width = Convert.ToInt32(width);
splitterControl1.SplitPosition = Convert.ToInt32(width);
}
mInitFinish = true;
}
else
{
plLeft.Visible = false;
splitterControl1.Visible = false;
}
SearchCreateTopControl();
//模板添加删除修改导入导出
BtnAdd.Enabled = dtSystemDlltab["addEnable"].ToString() == "1";
BtnDel.Enabled = dtSystemDlltab["deleteEnable"].ToString() == "1";
btnSave.Enabled = dtSystemDlltab["modifyEnable"].ToString() == "1" && gridEdited;
gcMain.gridView.OptionsBehavior.Editable = dtSystemDlltab["modifyEnable"].ToString() == "1" && gridEdited;
if (bbi_import != null) bbi_import.Enabled = dtSystemDlltab["importEnable"] + "" == "1";
if (bbi_export != null) bbi_export.Enabled = dtSystemDlltab["exportEnable"] + "" == "1";
needModified = dtSystemDlltab["modifyEnable"].ToString() == "1";
btnCondSearch_1.Enabled = dtSystemDlltab["searchEnable"].ToString() == "1";
cbField.Enabled = dtSystemDlltab["searchEnable"].ToString() == "1";
txtKey.Enabled = dtSystemDlltab["searchEnable"].ToString() == "1";
// 隐藏操作条
if (!BtnAdd.Enabled && !BtnDel.Enabled && !btnSave.Enabled)
{
panel6.Visible = false;
}
if (ModulePriv != 1)
needModified = false;
HandleAddButtonState();
//查询统计列
string isSumSql = "select * from p_systemwordbooktab where tab='" + DLLCoid + "' and isnull(vislble,0)=0 and isnull(calcExpr,'')<>''order by calcOrder asc";
dtSum = SqlHelper.ExecuteDataSet(isSumSql).Tables[0];
gcMain.SumFieldsTable = dtSum;
// 加载右侧多标签,默认加载为上下结构的表格
LoadDllDetailWithPanelPage();
// 加载底部多标签
LoadDllDeatilWithBottomTabPage();
SetDetailData();
LoadBillBrpTemplate();
}
/// <summary>
/// 创建查询条件
/// </summary>
public void SearchCraeteControl()
{
string sql = string.Format("exec p_getControlLocation '{0}','{1}','{2}'", dtSystemwordbooktabTag3["fieldKey"], DLLCoid, OperatorName);
string SearchSql = PubClass.ReqSqlParam(dtSystemwordbooktabTag3["fieldsql"] + " " + LeftCond, OperatorId, OperatorName);
DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
string condSql = string.Format("select * from p_systembillsourcecond where formKey='{0}'", dtSystemwordbooktabTag3["fieldKey"]);
mcc.LoginId = OperatorId;
mcc.LoginName = OperatorName;
mcc.SearchSql = PubClass.ReplaceWhereCond(SearchSql);
mcc.ctr = pl_right_where;
mcc.gce = gridLeft.gridControl;
mcc.dllType = LeftType;
mcc.otherParams = Params;
mcc.condDt = SqlHelper.ExecuteDataSet(condSql).Tables[0];
CreateControlModel cm = new CreateControlModel();
cm.dt = dt;
cm.ctr = pl_right_where;
cm.loginid = OperatorId;
cm.loginname = OperatorName;
int height = mcc.CreateControlByModel(cm);
pl_right_where.Height = height;
Control[] ctl = pl_right_where.Controls.Find("btnCondSearch", true);
if ((ctl != null) && (ctl.Length > 0))
{
(ctl[0] as SimpleButton).Width = 72;
}
mcc.runQuery();
}
else
{
gridLeft.gridControl.DataSource = SqlHelper.ExecuteDataSet(dtSystemwordbooktabTag3["fieldsql"] + "").Tables[0];
pl_right_where.Visible = false;
}
}
/// <summary>
/// 顶部查询条件(保留之前的按列查询)
/// </summary>
public void SearchCreateTopControl()
{
string sql = string.Format("exec p_getControlLocation '{0}','{1}','{2}'", dtSystemDlltab["condKey"], DLLCoid, OperatorName);
DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
mSeearchMode = 1;
string condSql = string.Format("select * from p_systembillsourcecond where formKey='{0}'", dtSystemDlltab["condKey"]);
mccTop.LoginId = OperatorId;
mccTop.ModuleId = ModuleId;
mccTop.LoginName = OperatorName;
mccTop.SearchSql = PubClass.ReplaceWhereCond(MyNotBmpSql);
mccTop.ctr = pl_search;
mccTop.tvLeft = tvLeft;
mccTop.tvLeftDataRow = dtSystemwordbooktabTag3;
mccTop.gce = gcMain.gridControl;
mccTop.RememberRow = true;
mccTop.dllType = LeftType;
mccTop.otherParams = Params;
mccTop.onSearchClick += new EventHandler(mSearch_onSearchClick);
mccTop.condDt = SqlHelper.ExecuteDataSet(condSql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
CreateControlModel cm = new CreateControlModel();
cm.dt = dt;
cm.ctr = pl_search;
cm.loginid = OperatorId;
cm.loginname = OperatorName;
int height = mccTop.CreateControlByModel(cm);
pl_search.Height = height;
Control[] ctl = pl_search.Controls.Find("btnCondSearch", true);
if ((ctl != null) && (ctl.Length > 0))
{
(ctl[0] as SimpleButton).Width = 72;
}
}
if (dtSystemDlltab["searchEnable"].ToString() == "1")
{
string sqlValue = mccTop.SetSearchSqlValue();
if (!string.IsNullOrEmpty(sqlValue))
{
InitData(sqlValue);
}
}
}
else
{
mSeearchMode = 2;
// 假如未配置查询条件,则显示之前的下拉查询条件
label1.Visible = true;
cbField.Visible = true;
txtKey.Visible = true;
btnCondSearch_1.Visible = true;
if (dtSystemDlltab["searchEnable"].ToString() == "1")
btnSearch_Click(null, null);
}
}
public void mSearch_onSearchClick(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(mccTop.ActionSql))
{
this.beforeSearchSQL = mccTop.ActionSql;
}
}
/// <summary>
///
/// </summary>
public void InitMenu()
{
GridMenu gm = new GridMenu(FormText, OperatorId, OperatorName, Privilege, DLLCoid, "", gcMain.gridControl);
gm.DirId = dtSystemDlltab["dirid"] + "";
gm.filedKey = mParmaryKey;
gm.BindGridMenuWQ(DLLCoid);
gm.OnGridMenuClickRefreshData += new EventHandler(gm_OnGridMenuClickRefreshData);
if (dtSystemwordbooktabTag3 == null)
return;
string DllCoidLeft = dtSystemwordbooktabTag3["fieldkey"].ToString();
GridMenu gm1 = new GridMenu(FormText, OperatorId, OperatorName, Privilege, DllCoidLeft, "", gridLeft.gridControl);
gm1.DirId = dtSystemDlltab["dirid"] + "";
//gm1.filedKey = dtSystemwordbooktaNo["fieldname"].ToString();
gm1.BindGridMenuWQ(DllCoidLeft);
}
/// <summary>
/// 初始常用工具
/// </summary>
public void InitPrintMenu()
{
if (!string.IsNullOrEmpty(baseModuleFile))
{
String[] strs = baseModuleFile.Split('|');
for (int i = 0; i < strs.Length; i++)
{
BarButtonItem bbi = new BarButtonItem();
int index = i + 1;
bbi.Caption = strs[i].Replace(".rmf", "");
bbi.Tag = strs[i];
bbi.ItemClick += new ItemClickEventHandler(print_ItemClick);
pm_print.AddItem(bbi);
}
}
}
/// <summary>
/// 初始化常用功能
/// </summary>
public void InitOperMenu()
{
bbi_import = new BarButtonItem();
bbi_import.Caption = "数据导入";
bbi_import.ItemClick += new ItemClickEventHandler(btnImprt_Click);
bbi_export = new BarButtonItem();
bbi_export.Caption = "数据导出";
bbi_export.ItemClick += new ItemClickEventHandler(btnExport_Click);
bbi_print = new BarButtonItem();
bbi_print.Caption = "常规打印";
bbi_print.ItemClick += new ItemClickEventHandler(BtnPrint_Click);
bbi_word = new BarButtonItem();
bbi_word.Caption = "帮助文档";
bbi_word.ItemClick += new ItemClickEventHandler(btnHelp_Click);
pm_oper.AddItem(bbi_import);
pm_oper.AddItem(bbi_export);
pm_oper.AddItem(bbi_print);
pm_oper.AddItem(bbi_word);
}
/// <summary>
/// 打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void print_ItemClick(object sender, ItemClickEventArgs e)
{
try
{
if (e.Item != null && string.IsNullOrWhiteSpace(e.Item.Tag + "")) return;
string tmpSql = string.IsNullOrEmpty(basePrintSQL) ? beforeSearchSQL : basePrintSQL;
string tmpSql1 = basePrintSQL1;
string tmpSql2 = basePrintSQL2;
string path = PubUtil.AbsolutelyPath + "lib/P_PubPrint.lsp";
string printFile = e.Item.Tag + "";
if (string.IsNullOrEmpty(basePrintType))
{
basePrintType = "1";
}
//tmpSql = "select " + OperatorId + " as OperatorId,'" + OperatorName + "' OperatorName,getdate() as CreateTime";
//tmpSql1 = mcc.ActionSql;
//tmpSql2 = mcc.ActionSql;
DataRow row = gcMain.gridView.GetFocusedDataRow();
tmpSql = PubClass.ReqSql(row, PubClass.ReqSqlParam(tmpSql, OperatorId, OperatorName));
tmpSql1 = PubClass.ReqSql(row, PubClass.ReqSqlParam(tmpSql1, OperatorId, OperatorName));
tmpSql2 = PubClass.ReqSql(row, PubClass.ReqSqlParam(tmpSql2, OperatorId, OperatorName));
PubUtil.LoadDelphiDll(path, path, printFile, tmpSql, tmpSql1, Convert.ToInt32(basePrintType), tmpSql2);
}
catch (Exception ex)
{
XtraMessageBox.Show("打印出错" + ex.Message);
}
}
/// <summary>
/// 执行右键菜单后刷新表格数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gm_OnGridMenuClickRefreshData(object sender, EventArgs e)
{
//MessageBox.Show(beforeSearchSQL);
if (string.IsNullOrEmpty(beforeSearchSQL))
{
if (mSeearchMode == 1)
{
string sqlValue = mccTop.SetSearchSqlValue();
if (!string.IsNullOrEmpty(sqlValue))
{
InitData(sqlValue);
}
}
else
{
btnSearch_Click(null, null);
}
}
else
InitData(beforeSearchSQL);
}
public void Drag_EventHandler(object sender, DragEventArgs e)
{
MessageBox.Show("类别修改成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
/// <summary>
/// 处理图片
/// </summary>
/// <param name="sql"></param>
private void HandleBmp(string sql)
{
this.MyNotBmpSql = sql;
DataTable dtBmps = SqlHelper.ExecuteDataSet("select fieldname from P_systemwordbooktab where tab='" + DLLCoid + "' and fieldSqlTag=99").Tables[0];
foreach (DataRow row in dtBmps.Rows)
{
string fieldName = row["fieldname"] + "";
MyNotBmpSql = MyNotBmpSql.Replace(" ", "-").Replace("-", "").Replace(", ", ",").Replace(" ,", ",");
MyNotBmpSql = MyNotBmpSql.Replace(","+fieldName + ",", ",").Replace("," + fieldName, " ");
}
}
#endregion
#region 表格拖动
/// <summary>
/// 拖动权限
/// </summary>
/// <param name="dr"></param>
/// <returns></returns>
private bool CanDragRowState(DataRow dr)
{
try
{
string tempCond = dragCond;
bool canDrag = string.IsNullOrEmpty(dragCond);
if (!string.IsNullOrEmpty(tempCond))
{
tempCond = PubClass.ReqSqlWhere(dr, PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName));
canDrag = Convert.ToBoolean(Evaluator.Eval(tempCond));
}
return canDrag;
}
catch (Exception)
{
return false;
}
}
public void DragGridCallBack(object sender)
{
if (XtraMessageBox.Show("您确定要拖动选中记录?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
GridView targetGridView = (sender as GridControl).FocusedView as GridView;
string tableName = dtSystemDlltab["SQLDT1"] + "";
string unionField = dtSystemwordbooktabTag3["fieldsqlid"] + "";
string parmaryKey = mParmaryKey;
int[] sourceSelectRows = gcMain.gridView.GetSelectedRows();
int[] targetSelectRows = targetGridView.GetSelectedRows();
try
{
// 拖动结果
int dragSuccess = 0, dragError = 0, result = 0;
string ids = string.Empty;
foreach (int item in sourceSelectRows)
{
DataRow dr = gcMain.gridView.GetDataRow(item);
if (CanDragRowState(dr))
{
ids += "'" + dr[parmaryKey] + "',";
dragSuccess++;
}
else
{
dragError++;
}
}
if (!string.IsNullOrEmpty(ids) && targetSelectRows.Count() > 0)
{
DataRow drTarget = targetGridView.GetDataRow(targetSelectRows[0]);
string sqlValue = string.Format("UPDATE {0} SET {1}='{2}' WHERE {3} IN ({4})",
tableName, unionField, drTarget[unionField], parmaryKey, ids.Trim(','));
result = SqlHelper.ExecuteNonQuery(sqlValue);
// 刷新左侧表格数据
//mcc.runQuery();
// 刷新主表格数据
if (dtSystemDlltab["searchEnable"].ToString() == "1")
{
if (mSeearchMode == 1)
{
sqlValue = mccTop.SetSearchSqlValue();
if (!string.IsNullOrEmpty(sqlValue))
{
InitData(sqlValue);
}
}
else
{
btnSearch_Click(null, null);
}
}
}
XtraMessageBox.Show("拖动成功 " + dragSuccess + " 条," + "失败 " + dragError + " 条", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
}
}
}
#endregion
#region 绑定数据
public void InitData(string sql)
{
int oldRowHandle = (gcMain.gridControl.MainView as GridView).FocusedRowHandle;
beforeSearchSQL = sql;
//这个绑定数据源
da = SqlHelper.ExecuteAdapter(CommandType.Text, sql);
if (ds != null && ds.Tables.Count > 0)
ds.Clear();
da.Fill(ds);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
gcMain.gridControl.DataSource = ds.Tables[0];
(gcMain.gridControl.MainView as GridView).ClearSelection();
(gcMain.gridControl.MainView as GridView).FocusedRowHandle = oldRowHandle;
(gcMain.gridControl.MainView as GridView).SelectRow(oldRowHandle);
SetDetailData();
}
#endregion
#region 加载表格列
/// <summary>
/// 加载表格列头
/// </summary>
/// <param name="tab"></param>
public void InitColumns()
{
SqlParameter[] p =
{
new SqlParameter("@modid",SqlDbType.VarChar,20),
new SqlParameter("@operatorname",SqlDbType.VarChar,20)
};
p[0].Value = DLLCoid;
p[1].Value = OperatorName;
dtColumns = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "[p_getBaseModuleField]", "temp", p).Tables[0];
nullableFields = dtColumns.Rows.OfType<DataRow>().Where(x => x["tagid"] + "" == "1").ToArray();
gcMain.ModuleKey = DLLCoid;
gcMain.ModuleType = 1;
gcMain.FormKey = dtSystemDlltab["formkey"] + "";
gcMain.IsSaveColumn = false;
gcMain.EnterOrder = mEnterOrder;
//列存储
baseDtFiled = gcMain.ResetColumns(dtColumns);
gcMain.SetColumns2(baseDtFiled);
gcMain.RowColorCondtion = SqlHelper.ExecuteDataSet(string.Format("select * from p_systemwordbookcolor where isnull(useflag,0)=0 and tab ='{0}' order by orderid", DLLCoid)).Tables[0];
}
#endregion
#region 添加数据
/// <summary>
/// 添加数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnAdd_Click(object sender, EventArgs e)
{
string fieldsqlid = string.Empty;
string fieldsqlname = string.Empty;
string strTag = string.Empty;
string jsonData = string.Empty;
if (!string.IsNullOrEmpty(dtSystemDlltab["AddDllName"] + ""))
{
if (LeftType == 1)
{
if (tvLeft.GetTreeView.SelectedNode == null)
{
XtraMessageBox.Show("请选择类别", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (tvLeft.GetTreeView.SelectedNode.Nodes.Count > 0)
{
XtraMessageBox.Show("请选择根级节点", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
String bllNO = PubClass.GetBillNo(tvLeft.GetTreeView.SelectedNode.Name + "", DLLCoid);
if (string.IsNullOrEmpty(bllNO))
{
XtraMessageBox.Show("请修改编码前缀", "提示", MessageBoxButtons.OK, MessageBoxIcon.Question);
return;
}
fieldsqlid = tvLeft.GetTreeView.SelectedNode.Name;
fieldsqlname = tvLeft.GetTreeView.SelectedNode.Text;
strTag = tvLeft.GetTreeView.SelectedNode.Tag + "";
}
else if (LeftType == 2)
{
int[] rows = gridViewLeft.GetSelectedRows();
if (rows.Length == 0)
{
XtraMessageBox.Show("请选择类别", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
DataRow row = gridViewLeft.GetDataRow(rows[0]);
fieldsqlid = row[dtSystemwordbooktabTag3["fieldsqlid"] + ""] + "";
fieldsqlname = row[dtSystemwordbooktabTag3["fieldsqlname"] + ""] + "";
DataTable dtGcHeader = gridLeft.gridControl.DataSource as DataTable;
if (dtGcHeader != null && dtGcHeader.Rows.Count > 0)
{
DataTable dtTemp = dtGcHeader.Clone();
dtTemp.ImportRow(row);
jsonData = dtTemp.ToJson();
}
}
string[] args = {
FormText,
OperatorId,
OperatorName,
Privilege,
DLLCoid,
"",
"0",
"",
fieldsqlid,
fieldsqlname,
strTag,
"",
"",
"",
jsonData
};
IForm form = PubUtil.LoadDllForm(dtSystemDlltab["AddDllName"] + "", args);
DialogResult result = form.SubForm.ShowDialog();
if (result == DialogResult.OK)
{
//string where = string.Empty;
//if (dtSystemwordbooktabTag3 != null) where = " and " + dtSystemwordbooktabTag3["fieldname"] + " like '" + fieldsqlid + "%'";
//if (string.IsNullOrEmpty(beforeSearchSQL))
//{
// InitData(PubClass.ReplaceWhereCond(MyNotBmpSql) + where);
//}
//else
//{
// InitData(PubClass.ReplaceWhereCond(beforeSearchSQL));
//}
if (string.IsNullOrEmpty(beforeSearchSQL))
{
InitData(PubClass.ReplaceWhereCond(beforeSearchSQL));
}
else
{
Control[] ctr = pl_search.Controls.Find("btnCondSearch", true);
if ((ctr == null) || (ctr.Length < 1))
{
if (!string.IsNullOrEmpty(beforeSearchSQL))
InitData(beforeSearchSQL);
}
else
{
(ctr[0] as SimpleButton).PerformClick();
}
}
}
}
else
{
if (LeftType == 1)
{
TreeNode treeNode = tvLeft.GetTreeView.SelectedNode;
if (treeNode != null && treeNode.Nodes.Count > 0)
{
XtraMessageBox.Show("请选中末级节点!");
return;
}
}
AddRow(gcMain.gridView);
}
}
/// <summary>
/// 添加行
/// </summary>
/// <param name="view"></param>
protected void AddRow(DevExpress.XtraGrid.Views.Grid.GridView view)
{
int prevDataRowIndex = view.GetFocusedDataSourceRowIndex();
view.AddNewRow();
//默认值
foreach (GridColumn item in view.Columns)
{
if (item.Tag != null)
{
MyTagModel cmt = item.Tag as MyTagModel;
if (cmt != null)
{
string defaultValue = PubClass.GetDefaultValue(cmt.DefaultValue.ToString(), OperatorId, OperatorName);
if (defaultValue != "")
{
view.SetRowCellValue(view.FocusedRowHandle, item, defaultValue);
}
}
}
}
//关键字段赋值
if (LeftType == 2)
{
int[] rows = gridViewLeft.GetSelectedRows();
if (rows.Length > 0)
{
DataRow row = gridViewLeft.GetDataRow(rows[0]);
GridColumn tmpcol = gcMain.gridView.Columns[dtSystemwordbooktabTag3["fieldname"] + ""];
view.SetRowCellValue(gcMain.gridView.FocusedRowHandle, tmpcol, row[dtSystemwordbooktabTag3["fieldsqlid"] + ""]);
view.UpdateCurrentRow();
view.ShowEditor();
}
}
if (LeftType == 1)
{
TreeNode tn = tvLeft.GetTreeView.SelectedNode;
GridColumn tmpcol = gcMain.gridView.Columns[dtSystemwordbooktabTag3["fieldname"] + ""];
view.SetRowCellValue(gcMain.gridView.FocusedRowHandle, tmpcol, tn.Name);
view.UpdateCurrentRow();
view.ShowEditor();
}
}
#endregion
#region 删除数据
private void BtnDel_Click(object sender, EventArgs e)
{
string noDeleteIds = string.Empty;
int[] rowid = gcMain.gridView.GetSelectedRows();
if (rowid.Length == 0)
{
XtraMessageBox.Show("没有选择要删除数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
if (XtraMessageBox.Show("您确定要删除选中 " + rowid.Length + "条 记录?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
string ids = string.Empty;
foreach (int rid in rowid)
{
DataRow dr = gcMain.gridView.GetDataRow(rid);
//判断删除条件是否符合
Boolean canDelete = string.IsNullOrEmpty(deleteCond);
string tempCond = deleteCond;
if (!canDelete)
{
tempCond = PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName);
tempCond = PubClass.ReqSqlWhere(dr, tempCond);
canDelete = Convert.ToBoolean(Evaluator.Eval(tempCond));
}
if (canDelete)
{
//删除检查
SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000);
pMsg.Direction = ParameterDirection.Output;
SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
SqlParameter[] param =
{
new SqlParameter("@modid",SqlDbType.VarChar,20),
new SqlParameter("@keyvalue",SqlDbType.VarChar,40),
pMsg,
returnValue
};
param[0].Value = DLLCoid;
param[1].Value = dr[mParmaryKey];
DataSet ds = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "p_VerifyCanDelete", "baseSave", param);
string msg = pMsg.Value.ToString();
int rVaule = Convert.ToInt32(returnValue.Value.ToString());
if (rVaule == 1)
{
ids += "'" + dr[mParmaryKey] + "',";
}
else
{
noDeleteIds += dr[mParmaryKey] + " >> " + msg + "\n";
}
}
else
{
noDeleteIds += dr[mParmaryKey] + " >>不符删除合条件\n";
}
}
if (ids != string.Empty)
{
string sql = "delete from " + dtSystemDlltab["SQLDT1"] + " where " + mParmaryKey + " in(" + ids.Trim(',') + ")";
SqlHelper.ExecuteNonQuery(sql);
//InitData(MyNotBmpSql);
// 移除表格选中数据
gcMain.gridView.DeleteSelectedRows();
(gcMain.gridControl.DataSource as DataTable).AcceptChanges();
string strHint = "记录删除成功";
if (!string.IsNullOrEmpty(noDeleteIds))
{
strHint = strHint + ",但是发现如下记录不符合删除条件\n" + noDeleteIds;
XtraMessageBox.Show(strHint, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
SqlHelper.AddLogTab(DLLCoid, FormText + "-->删除", FormText + "[" + ids + "]", FormText, OperatorName);
}
else
{
string strHint = "没有符合删除条件的记录";
if (!string.IsNullOrEmpty(noDeleteIds))
strHint = strHint + ",发现如下记录不符合删除条件\n" + noDeleteIds;
XtraMessageBox.Show(strHint, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
/// <summary>
/// 验证是否可以删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridView_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
{
SetDetailData();
}
#endregion
#region 查询
/// <summary>
/// 查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSearch_Click(object sender, EventArgs e)
{
isSearch = true; // 设置当前查询模式为全部数据查询
SearchData();
}
/// <summary>
/// 查询所有数据
/// </summary>
private void SearchData()
{
string field = cbField.SelectedValue + "";
string strWhere = " ";
treeTags = string.Empty;
if (LeftType == 1)
{
foreach (TreeNode tn in tvLeft.GetTreeView.Nodes)
GetCheckedState(tn);
}
if (!string.IsNullOrEmpty(field))
strWhere += " and (dbo.P_getpy(" + field + ") like '%" + txtKey.Text + "%' or " + field + " like '%" + txtKey.Text + "%')";
if (!string.IsNullOrEmpty(treeTags))
strWhere += " and " + dtSystemwordbooktabTag3["fieldname"] + " in (" + treeTags.Trim(',') + ")";
InitData(PubClass.ReplaceWhereCond(MyNotBmpSql) + strWhere);
}
/// <summary>
/// 查询数据(按当前模式,树点击or表格点击or点击查询按钮)
/// </summary>
private void SearchCondData()
{
// 假如为树形结构,并且为点击树查询数据
if (LeftType == 1 && !isSearch)
{
TreeNode treeNode = tvLeft.GetTreeView.SelectedNode;
if (treeNode != null)
InitData(PubClass.ReplaceWhereCond(MyNotBmpSql) + " and " + dtSystemwordbooktabTag3["fieldname"] + " like '" + treeNode.Name + "%' ");
else
InitData(MyNotBmpSql);
}
// 假如左侧为表格数据,并且为点击表格查询数据
else if (LeftType == 2 && !isSearch)
{
int[] rows = gridViewLeft.GetSelectedRows();
if (rows.Length == 0)
return;
DataRow row = gridViewLeft.GetDataRow(rows[0]);
InitData(PubClass.ReplaceWhereCond(MyNotBmpSql) + " and " + dtSystemwordbooktabTag3["fieldname"] + " like '" + row[dtSystemwordbooktabTag3["fieldsqlid"] + ""] + "%' ");
}
else
{
// 查询所有数据
InitData(MyNotBmpSql);
}
}
#endregion
#region 保存
private void btnSave_Click(object sender, EventArgs e)
{
if (gridRequired())
{
try
{
da.Update(gcMain.gridControl.DataSource as DataTable);
}
catch (InvalidOperationException ioe)
{
// 多表保存失败
gridSave();
return;
}
catch (DBConcurrencyException dce)
{
// 并发异常
XtraMessageBox.Show("数据已更新,请刷新后重试.");
return;
}
catch (Exception ex)
{
if (ex.Message.IndexOf("ix", StringComparison.OrdinalIgnoreCase) != -1)
{
XtraMessageBox.Show("系统检测到录入信息重复,请检查", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
XtraMessageBox.Show(ex.Message);
return;
}
}
XtraMessageBox.Show("修改成功");
}
}
/// <summary>
/// 表格必须录入验证
/// </summary>
/// <returns></returns>
private bool gridRequired()
{
DataTable dtBillItem = gcMain.gridControl.DataSource as DataTable;
DataColumnCollection dtBillRow = dtBillItem.Columns;
GridView gridView = gcMain.gridView;
GridColumnCollection gridColumns = gridView.Columns;
foreach (DataRow drGrid in dtBillItem.Rows)
{
foreach (DataRow dr in nullableFields)
{
string fieldName = dr["fieldName"] + "";
string fieldText = dr["username1"] + "";
if (string.IsNullOrEmpty(drGrid[fieldName] + ""))
{
XtraMessageBox.Show(string.Format("[{0}] 不能为空", fieldText));
gridView.Focus();
gridView.FocusedRowHandle = dtBillItem.Rows.IndexOf(drGrid);
gridView.FocusedColumn = gridColumns[fieldName];
gridView.SelectCell(gridView.FocusedRowHandle, gridColumns[fieldName]);
gridView.ShowEditorByMouse();
return false;
}
}
}
return true;
}
/// <summary>
/// 多表表格修改
/// </summary>
private void gridSave()
{
try
{
string tabName = dtSystemDlltab["SQLDT1"] + "";
if (string.IsNullOrEmpty(tabName))
{
XtraMessageBox.Show("检测到未设置表名");
return;
}
List<string> mList = new List<string>();
StringBuilder mBuilder = new StringBuilder();
DataColumnCollection columns = SqlHelper.ExecuteDataTable(string.Format("select * from {0} where 1<>1", tabName)).Columns;
DataTable dtTable = gcMain.gridControl.DataSource as DataTable;
List<DataRow> modifiedRows = dtTable.Rows.Cast<DataRow>().Where(x => x.RowState == DataRowState.Modified || x.RowState == DataRowState.Added).ToList();
foreach (DataRow row in modifiedRows)
{
string updateSql = "update {0} set {1} where {2}='{3}';";
string insertSql = "insert into {0}({1}) values({2});";
string updateFields = string.Empty;
string insertFields = string.Empty;
string insertValues = string.Empty;
foreach (DataColumn col in columns)
{
DataRow hasContainRow = dtColumns.Rows.Cast<DataRow>().FirstOrDefault(x => x["fieldname"] + "" == col.ColumnName);
if (hasContainRow != null && col.ColumnName != mParmaryKey)
{
if (row.RowState == DataRowState.Modified)
{
updateFields += string.Format("{0}='{1}',", col.ColumnName, row[col.ColumnName]);
}
else if (row.RowState == DataRowState.Added)
{
insertFields += col.ColumnName + ",";
insertValues += "'" + row[col.ColumnName] + "',";
}
}
}
updateFields = updateFields.TrimEnd(',');
insertFields = insertFields.TrimEnd(',');
insertValues = insertValues.TrimEnd(',');
if (!string.IsNullOrEmpty(updateFields))
{
updateSql = string.Format(updateSql, tabName, updateFields, mParmaryKey, row[mParmaryKey]);
mList.Add(updateSql);
}
if (!string.IsNullOrEmpty(insertFields))
{
insertSql = string.Format(insertSql, tabName, insertFields, insertValues);
mList.Add(insertSql);
}
}
// 由于数据sql长度限制,每次只保存10条数据
int resultCount = 0;
for (int i = 0; i < mList.Count; i++)
{
if (i == mList.Count - 1 || (i != 0 && i % 10 == 0))
{
if (i == mList.Count - 1)
mBuilder.Append(mList[i]);
SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000);
pMsg.Direction = ParameterDirection.Output;
SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
SqlParameter[] param =
{
new SqlParameter("@baseSql",SqlDbType.VarChar,8000),
new SqlParameter("@saveType",SqlDbType.Int),
new SqlParameter("@modid",SqlDbType.VarChar,20),
new SqlParameter("@tablename",SqlDbType.VarChar,50),
new SqlParameter("@keyfield",SqlDbType.VarChar,50),
new SqlParameter("@keyvalue",SqlDbType.VarChar,50),
new SqlParameter("@Operatorid",SqlDbType.Int),
new SqlParameter("@operatorname",SqlDbType.VarChar,50),
pMsg,
returnValue
};
param[0].Value = mBuilder.ToString();
param[1].Value = 8;// --8新增保存,9修改保存,10 删除条码
param[2].Value = DLLCoid;
param[3].Value = tabName;
param[4].Value = mParmaryKey;
param[5].Value = "";
param[6].Value = OperatorId;
param[7].Value = OperatorName;
DataSet ds = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "P_BaseSave", "baseSave", param);
string rMsg = pMsg.Value.ToString();
resultCount += Convert.ToInt32(returnValue.Value.ToString());
mBuilder.Clear();
}
mBuilder.Append(mList[i]);
}
if (resultCount > 0)
{
if (resultCount == mList.Count)
{
(gcMain.gridControl.DataSource as DataTable).AcceptChanges();
SearchCondData();
XtraMessageBox.Show("修改成功");
}
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.Message);
}
}
#endregion
#region 打印
private void BtnPrint_Click(object sender, EventArgs e)
{
PubClass.Preview(gcMain.gridControl);
}
#endregion
#region 树选中操作
/// <summary>
///
/// </summary>
/// <returns></returns>
public string GetTreeCheck()
{
treeTags = string.Empty;
foreach (TreeNode item in tvLeft.GetTreeView.Nodes)
{
GetCheckedState(item);
}
return treeTags;
}
/// <summary>
///
/// </summary>
protected string treeTags = string.Empty;
/// <summary>
/// 选中节点之后,选中节点的所有子节点
/// </summary>
/// <param name="currNode"></param>
/// <param name="state"></param>
private void GetCheckedState(TreeNode currNode)
{
if (currNode.Checked)
treeTags += "" + currNode.Name + ",";
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
{
foreach (TreeNode tn in nodes)
{
if (tn.Checked)
treeTags += "'" + tn.Name + "',";
GetCheckedState(tn);
}
}
}
#endregion
#region 修改
private void GridViewpub_DoubleClick(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(dtSystemDlltab["AddDllName"] + ""))
{
bool isReflash = UpdateModel();
if (isReflash)
{
//SearchCondData();
if (!string.IsNullOrEmpty(beforeSearchSQL))
{
InitData(beforeSearchSQL);
}
else
{
Control[] ctr = pl_search.Controls.Find("btnCondSearch", true);
if ((ctr == null) || (ctr.Length < 1))
{
if (string.IsNullOrEmpty(beforeSearchSQL))
{
if (mSeearchMode == 1)
{
string sqlValue = mccTop.SetSearchSqlValue();
if (!string.IsNullOrEmpty(sqlValue))
{
InitData(sqlValue);
}
}
else
{
btnSearch_Click(null, null);
}
}
else
InitData(beforeSearchSQL);
}
else
{
(ctr[0] as SimpleButton).PerformClick();
}
}
}
}
}
public bool UpdateModel()
{
int[] rows = gcMain.gridView.GetSelectedRows();
if (rows.Length > 0)
{
DataRow dr = gcMain.gridView.GetDataRow(rows[0]);
//判断修改条件是否符合
Boolean canModify = string.IsNullOrEmpty(modifyCond);
if (needModified == true)
{
string tempCond = modifyCond;
if (!canModify)
{
tempCond = PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName);
tempCond = PubClass.ReqSqlWhere(dr, tempCond);
canModify = tempCond.Trim() == "" ? true : Convert.ToBoolean(Evaluator.Eval(tempCond));
}
}
else
canModify = false;
string productId = dr[mParmaryKey].ToString();
string[] args = {
FormText,
OperatorId,
OperatorName,
Privilege,
DLLCoid,
"",
Convert.ToInt32( !canModify).ToString(),
productId,
"",
"",
""
};
IForm form = PubUtil.LoadDllForm(dtSystemDlltab["AddDllName"] + "", args);
DialogResult dialogResult = form.SubForm.ShowDialog();
}
return true;
}
#endregion
#region 切换模版相关
/// <summary>
/// 加载默认模版
/// </summary>
public void LoadBillBrpTemplate()
{
try
{
string sqlValue = string.Format("select * from P_pubrpsettab where tab='{0}' and ban=1 order by orderid", DLLCoid);
DataTable dtTable = SqlHelper.ExecuteDataTable(sqlValue);
cbBrp.ValueMember = "id";
cbBrp.DisplayMember = "rpname";
cbBrp.DataSource = dtTable;
}
catch (Exception ex)
{
plBrp.Visible = false;
}
}
/// <summary>
/// 点击控件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cbBrp_Click(object sender, EventArgs e)
{
IsSelected = true;
}
/// <summary>
/// 设置选中下拉
/// </summary>
private void SetSelectedIndex(DataTable table)
{
// 切换明细列名称
if (table.Columns.Contains(mBrpField))
{
string brpid = table.Rows[0][mBrpField] + "";
DataTable dtTable = cbBrp.DataSource as DataTable;
if (dtTable != null && dtTable.Rows.Count > 0)
{
int selectIndex = 0;
try
{
DataRow row = dtTable.Rows.Cast<DataRow>().FirstOrDefault(x => x["id"] + "" == brpid);
for (int i = 0; i < dtTable.Rows.Count; i++)
{
if (dtTable.Rows[i] == row)
{
selectIndex = i;
IsSelected = true;
}
}
}
catch (Exception)
{
}
if (cbBrp.SelectedIndex == selectIndex)
{
cbBrp_SelectedIndexChanged(null, null);
}
else
{
cbBrp.SelectedIndex = selectIndex;
}
}
}
}
/// <summary>
/// 切换模版
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cbBrp_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DataRowView rowView = cbBrp.SelectedItem as DataRowView;
if (rowView != null && IsSelected)
{
DataRow row = rowView.Row;
DialogResult result = XtraMessageBox.Show("确定要切换模版?\r\n注:切换模版会清空明细数据.", "系统提示", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
// 设置标题
this.Text = this.typeName = row["rpname"] + "";
this.Parent.Text = this.Text;
// 清空明细
this.gcMain.gridControl.DataSource = new DataTable();
int id = string.IsNullOrEmpty(row["id"] + "") ? 0 : Convert.ToInt32(row["id"] + "");
string columsSql = string.Format(@"SELECT
isnull(CASE WHEN ISNULL(b.userList,'')='' AND ISNULL(a.PrivilegeView,'')<>'' THEN 0 ELSE width END,0) width,
isnull(CASE WHEN ISNULL(c.userList,'')='' AND ISNULL(a.PrivilegeView,'')<>'' THEN 1 ELSE edited END,0) isEdited,a.*
FROM p_PubRPSetDetailTab a
LEFT JOIN (
SELECT userList,privTypeId from p_systemPrivilege b where modId = '{0}'
AND CHARINDEX('{1}' + ',', userList + ',') > 0
) b on CHARINDEX(CAST(b.privTypeId AS VARCHAR(5)) + ',',a.PrivilegeView + ',') > 0
LEFT JOIN (
SELECT TOP 1 userList,privTypeId FROM p_systemPrivilege WHERE modId = '{0}'
AND CHARINDEX('{1}' + ',', USERLIST + ',') > 0
) c ON CHARINDEX(CAST(c.privTypeId AS VARCHAR(5)) + ',',a.PrivilegeOper + ',') > 0
WHERE modid='{0}' and isnull(isVisible,0)=0 order by a.orderid asc", DLLCoid, OperatorName);
DataTable columns = SqlHelper.ExecuteDataTable(columsSql);
gcMain.SetColumns3(columsSql);
}
}
}
catch (Exception ex)
{
}
}
#endregion
#region 动态加载菜单
/// <summary>
///动态加载菜单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmsGrid_Opening(object sender, CancelEventArgs e)
{
cmsGrid.Items.Clear();
List<ToolStripMenuItem> listQQ = new List<ToolStripMenuItem>();
List<ToolStripMenuItem> listWWW = new List<ToolStripMenuItem>();
int[] rowCount = gcMain.gridView.GetSelectedRows();
if (rowCount.Length > 0)
{
DataRow row = gcMain.gridView.GetDataRow(rowCount[0]);
GridColumnCollection columns = gcMain.gridView.Columns;
for (int i = 0; i < columns.Count; i++)
{
GridColumn gcItem = columns[i];
string tag = gcItem.Tag + "";
if (tag == "qq")
{
if (!string.IsNullOrEmpty(row[gcItem.Name] + ""))
{
ToolStripMenuItem item = new ToolStripMenuItem("(" + gcItem.Caption + ")" + row[gcItem.Name] + "", global::Lskj.PubModuleDetailBrp.Properties.Resources.qq);
item.Tag = row[gcItem.Name];
item.Click += new EventHandler(item_qq_Click);
listQQ.Add(item);
}
}
if (tag == "www")
{
if (!string.IsNullOrEmpty(row[gcItem.Name] + ""))
{
ToolStripMenuItem item = new ToolStripMenuItem("(" + gcItem.Caption + ")" + row[gcItem.Name] + "", global::Lskj.PubModuleDetailBrp.Properties.Resources.www);
item.Tag = row[gcItem.Name];
item.Click += new EventHandler(item_www_Click);
listWWW.Add(item);
}
}
}
}
cmsGrid.Items.AddRange(tsmMenuList.ToArray());
cmsGrid.Items.AddRange(listQQ.ToArray());
cmsGrid.Items.AddRange(listWWW.ToArray());
}
#endregion
#region 打开QQ
protected void item_qq_Click(object sender, EventArgs e)
{
ToolStripMenuItem t = (ToolStripMenuItem)sender;
string text = t.Tag + "";
if (string.IsNullOrEmpty(text))
{
MessageBox.Show("请输入您的QQ号码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
Process p = new Process();
ProcessStartInfo ps = new ProcessStartInfo();
string Url = string.Format(@"tencent://message/?Menu=yes&uin={0}", text);
ps.FileName = @"iexplore.exe";
ps.Arguments = Url;
ps.UseShellExecute = true;
ps.RedirectStandardInput = false;
//ps.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo = ps;
p.Start();
}
#endregion
#region 打开WWW
protected void item_www_Click(object sender, EventArgs e)
{
ToolStripMenuItem t = (ToolStripMenuItem)sender;
string url = t.Tag + "";
if (string.IsNullOrEmpty(url))
{
MessageBox.Show("请输入您要打开网址", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
System.Diagnostics.Process.Start("iexplore.exe", url);
}
#endregion
#region 左边树点击事件
private void gridViewLeft_RowCellClick(object sender, RowCellClickEventArgs e)
{
isSearch = false; // 设置当前查询模式为部分数据查询
DataRow row = gridViewLeft.GetDataRow(e.RowHandle);
string sql = PubClass.ReplaceWhereCond(MyNotBmpSql) + " and " + dtSystemwordbooktabTag3["fieldname"] + " = '" + row[dtSystemwordbooktabTag3["fieldsqlid"] + ""] + "' ";
// 替换查询条件
List<string> list = PubClass.GetParamValue(sql);
foreach (string item in list)
{
string fileName = item.Replace("{", "").Replace("}", "");
Control[] ctrs = pl_search.Controls.Find("txt_" + fileName, true);
if (ctrs.Length > 0)
{
sql = MySearchCreateControl.SetReplaceSql(sql, item, ctrs);
}
}
InitData(sql);
}
#endregion
#region 窗体关闭事件
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (PubUtil.ModuleForms.ContainsKey(ModuleId))
{
DllModule dm = PubUtil.ModuleForms[ModuleId];
if (dm != null)
{
dm.ModuleForm = null;
dm.ModuleInPtr = IntPtr.Zero;
PubUtil.ModuleForms.Remove(ModuleId);
}
}
}
#endregion
#region 帮助手册
private void btnHelp_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(DLLCoid))
{
MessageBox.Show("物料编码不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int id = 0;
object obj = SqlHelper.ExecuteScalar(CommandType.Text, "select dirid from P_fm_DirectoryTab where ParentId=3 and PID='" + DLLCoid + "'");
id = obj == null ? 0 : Convert.ToInt32(obj);
if (id == 0)
{
string sql = "insert into P_fm_DirectoryTab (sName,ParentId,creator,SpeciesNo,relationCode,PID) values('" + DLLCoid + "',3,1,'0201',0,'" + DLLCoid + "');select @@identity";
id = Convert.ToInt32(SqlHelper.ExecuteScalar(CommandType.Text, sql));
}
string[] args =
{
FormText,
OperatorId,
OperatorName,
Privilege,
DLLCoid,
ModuleId,
id.ToString()
};
IForm form = PubUtil.LoadDllForm2("Lskj.Attachment.dll", args);
form.SubForm.ShowDialog();
}
#endregion
#region Execl 操作
/// <summary>
/// 导入操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnImprt_Click(object sender, EventArgs e)
{
string leftField = string.Empty;
string leftValue = string.Empty;
if (LeftType != 3)
{
leftField = dtSystemwordbooktabTag3["fieldname"] + "";
leftValue = tvLeft.GetSelectValue();
}
string columnPrefix = PubClass.GetColumnPrefix(dtSystemDlltab["SQLDT1"].ToString());
frmImport frm = new frmImport(gcMain, dtSystemDlltab["SQLDT1"].ToString(), "", "", OperatorId, OperatorName, columnPrefix, leftField, leftValue);
DialogResult result = frm.ShowDialog();
if (result == DialogResult.OK)
{
InitData(beforeSearchSQL);
}
}
/// <summary>
/// 导出操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExport_Click(object sender, EventArgs e)
{
PubClass.SaveXls(gcMain.gridControl);
}
#endregion
#region 添加、删除、修改按钮处理
/// <summary>
/// 处理删除按钮
/// </summary>
private void HandleDelButtonState(DataRow dr)
{
try
{
string tempCond = deleteCond;
bool canDel = string.IsNullOrEmpty(deleteCond);
if (!string.IsNullOrEmpty(tempCond))
{
tempCond = PubClass.ReqSqlWhere(dr, PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName));
canDel = Convert.ToBoolean(Evaluator.Eval(tempCond));
}
BtnDel.Enabled = canDel && dtSystemDlltab["deleteEnable"].ToString() == "1";
}
catch (Exception)
{
}
}
private void HandleAddButtonState()
{
try
{
string tempCond = addCond;
bool canDel = string.IsNullOrEmpty(addCond);
if (!string.IsNullOrEmpty(tempCond))
{
tempCond = PubClass.SqlToCode( PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName) );
//MessageBox.Show(tempCond);
canDel = Convert.ToBoolean(Evaluator.Eval(tempCond));
}
BtnAdd.Enabled = canDel && (dtSystemDlltab["addEnable"].ToString() == "1") && (ModulePriv==1);
if (bbi_import != null)
{
bbi_import.Enabled = canDel && (dtSystemDlltab["importEnable"].ToString() == "1") && (ModulePriv == 1);
}
tempCond = printCond;
tempCond = PubClass.SqlToCode(PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName));
canDel = Convert.ToBoolean(Evaluator.Eval(tempCond));
if (bbi_print != null) bbi_print.Enabled = canDel && (ModulePriv == 1); ;
tempCond = exportCond;
tempCond = PubClass.SqlToCode(PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName));
canDel = Convert.ToBoolean(Evaluator.Eval(tempCond)) && (dtSystemDlltab["exportEnable"].ToString() == "1") && (ModulePriv==1);
if (bbi_export != null)
{
bbi_export.Enabled = canDel;
}
}
catch (Exception)
{
}
}
/// <summary>
/// 验证是否可以编辑行
/// </summary>
/// <param name="dr"></param>
private void HandleEditRowState(DataRow dr)
{
try
{
string tempCond = modifyCond;
bool canEdit = string.IsNullOrEmpty(modifyCond);
if (!string.IsNullOrEmpty(tempCond))
{
tempCond = PubClass.ReqSqlWhere(dr, PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName));
canEdit = Convert.ToBoolean(Evaluator.Eval(tempCond));
}
btnSave.Enabled = canEdit && dtSystemDlltab["modifyEnable"].ToString() == "1"; ;
}
catch (Exception)
{
}
}
#endregion
#region 行颜色
private void gvList_RowCellStyle(object sender, RowStyleEventArgs e)
{
if (e.RowHandle >= 0)
{
DataRow row = gcMain.gridView.GetDataRow(e.RowHandle);
string cond = string.Empty;
string color = string.Empty;
string forecolor = string.Empty;
foreach (DataRow dr in dtSysColorList.Rows)
{
List<string> condition = PubClass.GetParamValue(dr["condition"].ToString());
cond = dr["condition"].ToString();
foreach (string item in condition)
{
string filedName = item.Replace("{", "").Replace("}", "");
cond = cond.Replace(item, row[filedName].ToString());
}
cond = PubClass.SqlToCode(cond);
color = dr["backcolor"] + "";
forecolor = dr["forcecolor"].ToString() + "";
string obj = Evaluator.Eval(cond) + "";
if (obj.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1)
{
if (!string.IsNullOrEmpty(color))
{
System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml(color);
e.Appearance.BackColor = color1;
}
if (!string.IsNullOrEmpty(forecolor))
{
System.Drawing.Color foreColor = System.Drawing.ColorTranslator.FromHtml(forecolor);
e.Appearance.ForeColor = foreColor;
}
FontStyle fst = new FontStyle();
if (dr["ifBold"].ToString() == "1")
{
fst = fst | FontStyle.Bold;
}
if (dr["ifItalic"].ToString() == "1")
{
fst = fst | FontStyle.Italic;
}
if (dr["ifStrickOut"].ToString() == "1")
{
fst = fst | FontStyle.Strikeout;
}
if (dr["ifUnderLine"].ToString() == "1")
{
fst = fst | FontStyle.Underline;
}
e.Appearance.Font = new Font(e.Appearance.Font, fst);
}
}
}
}
#endregion
#region GridViewpub_KeyDown事件
private void GridViewpub_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control & e.KeyCode == Keys.C)
{
Clipboard.SetDataObject((sender as GridView).GetFocusedRowCellValue((sender as GridView).FocusedColumn));
e.Handled = true;
}
}
#endregion
#region 处理Grid计算
private void gridBillInfo_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
if (inSummary == true)
return;
inSummary = true;
try
{
DataRow gvRow = gcMain.gridView.GetDataRow(e.RowHandle);
foreach (DataRow row in dtSum.Rows)
{
string calcExpr = row["calcExpr"].ToString();
if (e.Column.FieldName != row["fieldName"].ToString())
{
List<string> listParam = PubClass.GetParamValue(calcExpr);
foreach (string str in listParam)
{
string filed = str.Replace("{", "").Replace("}", "");
string filedValue = gvRow[filed].ToString();
if (string.IsNullOrEmpty(filedValue))
filedValue = "0";
calcExpr = calcExpr.Replace(str, filedValue + "");
}
calcExpr = calcExpr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|");
string result = Evaluator.Eval(calcExpr).ToString();
gcMain.gridView.SetRowCellValue(e.RowHandle, gcMain.gridView.Columns[row["fieldName"].ToString()], Math.Round(double.Parse(result), 2, MidpointRounding.AwayFromZero));
}
}
}
catch
{
}
inSummary = false;
}
#endregion
#region 基础档案、报表右侧明细表格
/// <summary>
/// 加载右侧多标签,添加在一个面板上,显示为上下结构的表格,只加载报表表格
/// </summary>
public void LoadDllDetailWithPanelPage()
{
tabMain.Visible = false;
mRightGridMode = 1;
mRightGridDataMode = 1;
// 获取配置明细列表
moduleDetailTable = SqlHelper.ExecuteDataSet("select distinct a.*,b.SQL from p_systemDlltabDetail a inner join p_systemdlltab b on a.UnionModule = b.DllCoid where a.tab='" + DLLCoid + "' and isnull(a.isVisible,0)=0 and a.rightVisible=1 and ISNULL(b.dllcoid,'')<>'' order by a.orderid").Tables[0];
// 明细列表没有数据,则获取报表明细配置,兼容旧版本
if (moduleDetailTable == null || moduleDetailTable.Rows.Count == 0)
{
moduleDetailTable = SqlHelper.ExecuteDataSet("select * from p_systemDlltabDetail where tab='" + DLLCoid + "' and isVisible=0 and rightVisible=1 order by orderid").Tables[0];
mRightGridDataMode = 2;
}
int count = moduleDetailTable.Rows.Count;
int currentHeight = 2;
foreach (DataRow row in moduleDetailTable.Rows)
{
Panel panel = new Panel();
GroupBox gb = new GroupBox();
gb.Text = row["detailName"] + "";
gb.Dock = DockStyle.Fill;
GridControlEx dgv = CreateDetailDgvWithTabPage(row);
GridMenu gm = new GridMenu(FormText, OperatorId, OperatorName, Privilege, DLLCoid, "", dgv.gridControl);
gm.BindGridMenu(row["formKey"] + "");
dgv.Name = "grid";
dgv.Dock = DockStyle.Fill;
dgv.gridView.OptionsView.ShowFooter = true;
dgv.gridView.Tag = moduleDetailTable.Columns.Contains("SQL") ? row["SQL"] : row["detailSql"];
gb.Controls.Add(dgv);
panel.Controls.Add(gb);
panel.Tag = row;
panel.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
panel.Top = currentHeight;
panel.Width = plRightGrid.Width;
currentHeight += panel.Height = plRightGrid.Height / count;
plRightGrid.Controls.Add(panel);
}
if (moduleDetailTable.Rows.Count == 0)
{
tabMain.Visible = plRightGrid.Visible = splitterControl2.Visible = false;
}
}
/// <summary>
/// 加载右侧多标签,添加在多标签上,只加载报表表格
/// </summary>
public void LoadDllDeatilWithTabPage()
{
mRightGridMode = 2;
mRightGridDataMode = 1;
tabMain.TabPages.Clear();
// 获取配置明细列表
moduleDetailTable = SqlHelper.ExecuteDataSet(@"select a.*,b.SQL from p_systemDlltabDetail a
inner join p_systemdlltab b on a.UnionModule = b.DllCoid
where a.tab='" + DLLCoid + @"' and isnull(a.isVisible,0)=0
and isnull(a.rightVisible,0)=1 and ISNULL(b.dllcoid,'')<>'' order by a.orderid").Tables[0];
// 明细列表没有数据,则获取报表明细配置,兼容旧版本
if (moduleDetailTable == null || moduleDetailTable.Rows.Count == 0)
{
moduleDetailTable = SqlHelper.ExecuteDataSet("select * from p_systemDlltabDetail where tab='" + DLLCoid + "' and isVisible=0 and rightVisible=1 order by orderid").Tables[0];
mRightGridDataMode = 2;
}
foreach (DataRow row in moduleDetailTable.Rows)
{
XtraTabPage tabPage = new XtraTabPage();
tabPage.Text = row["detailName"] + "";
GridControlEx dgv = CreateDetailDgvWithTabPage(row);
dgv.Name = "grid" + row["id"];
///
dgv.ModuleType = 2;
dgv.ModuleKey = row["formKey"].ToString();
////
dgv.Tag = row;
GridMenu gm = new GridMenu(FormText, OperatorId, OperatorName, Privilege, DLLCoid, "", dgv.gridControl);
gm.BindGridMenu(row["formKey"].ToString());
tabPage.Controls.Add(dgv);
dgv.gridView.Tag = moduleDetailTable.Columns.Contains("SQL") ? row["SQL"] : row["detailSql"];
dgv.gridView.OptionsView.ShowFooter = true;
dgv.Dock = DockStyle.Fill;
tabPage.Tag = dgv;
tabMain.TabPages.Add(tabPage);
}
if (moduleDetailTable.Rows.Count == 0)
{
tabMain.Visible = plRightGrid.Visible = splitterControl2.Visible = false;
}
}
/// <summary>
/// 创建表格,为了兼容之前版本先取报表配置列,未配置则取报表明细列
/// </summary>
/// <param name="row"></param>
/// <returns></returns>
public GridControlEx CreateDetailDgvWithTabPage(DataRow row)
{
var detailId = Convert.ToInt32(row["Id"]);
var detailSql = Convert.ToString(row["detailSql"]);
var unionModule = row["UnionModule"] + "";
GridControlEx gcEx = new GridControlEx();
// 取报表配置列
SqlParameter[] p =
{
new SqlParameter("@modid",SqlDbType.VarChar,20),
new SqlParameter("@operatorname",SqlDbType.VarChar,20)
};
p[0].Value = row["UnionModule"];
p[1].Value = OperatorName;
DataTable dtFileds = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "[p_getBaseModuleField]", "temp", p).Tables[0];
if (dtFileds != null && dtFileds.Rows.Count == 0)
{
// 取报表明细列
SqlParameter[] p1 =
{
new SqlParameter("@modid",SqlDbType.VarChar,50),
new SqlParameter("@detailid",SqlDbType.Int,4),
new SqlParameter("@operatorname",SqlDbType.VarChar,50)
};
p1[0].Value = DLLCoid;
p1[1].Value = detailId;
p1[2].Value = OperatorName;
dtFileds = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "p_getBaseModuleDetailField", "temp", p1).Tables[0];
gcEx.SetColumns(dtFileds);
gcEx.gridView.RowCellStyle += new RowCellStyleEventHandler(gridView_RowCellStyle);
}
else
{
gcEx.SetColumns2(dtFileds);
}
detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName);
gcEx.gridView.Tag = detailSql;
gcEx.RowColorCondtion = SqlHelper.ExecuteDataSet(string.Format("select * from p_systemwordbookcolor where isnull(useflag,0)=0 and tab ='{0}' order by orderid", row["formkey"])).Tables[0];
return gcEx;
}
/// <summary>
/// 设置右侧表格数据
/// </summary>
private void SetRightGridData(DataRow drRow)
{
switch (mRightGridMode)
{
case 1: // 面板模式
SetRightPanelGridData(drRow);
break;
case 2:// 标签模式
SetRightTabGridData(drRow);
break;
}
}
/// <summary>
/// 设置右侧面板表格数据
/// </summary>
private void SetRightPanelGridData(DataRow row)
{
foreach (Control item in plRightGrid.Controls)
{
if (item.Controls.Count > 0 && item.Controls[0].Controls.Count > 0)
{
GridControlEx gc = item.Controls[0].Controls[0] as GridControlEx;
gc.gridView.OptionsBehavior.Editable = false;
DataRow drRight = item.Tag as DataRow;
string sql = gc.gridView.Tag + "";
string fieldName = mParmaryKey;
string fieldValue = row[fieldName] + "";
string detailSql = sql;
string unionValue = (drRight["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
if (!string.IsNullOrEmpty(detailSql))
{
// sql模式
if (sql.IndexOf("select", StringComparison.OrdinalIgnoreCase) != -1)
{
detailSql = PubClass.ReplaceWhereCond(PubClass.ReqSql(row, sql));
detailSql += " and " + unionValue + " = '" + fieldValue + "'";
}
}
// 列表模式
//if (mRightGridDataMode == 1)
//{
// detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName);
//}
//else
//{ // 报表明细模式
detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName);
List<string> paramList = PubClass.GetParamValue(detailSql);
foreach (string param in paramList)
{
string fileName = param.Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
if (row.Table.Columns.Contains(fieldName))
{
detailSql = detailSql.Replace(param, row[fileName] + "");
}
}
//}
gc.SetDataSource(detailSql);
gc.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
}
}
}
/// <summary>
/// 设置右侧多标签数据
/// </summary>
/// <param name="row"></param>
private void SetRightTabGridData(DataRow row)
{
foreach (XtraTabPage tab in tabMain.TabPages)
{
GridControlEx gc = tab.Tag as GridControlEx;
DataRow drRight = gc.Tag as DataRow;
string sql = gc.gridView.Tag + "";
string fieldName = mParmaryKey;
string fieldValue = row[fieldName] + "";
string detailSql = sql;
string unionValue = (drRight["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
if (!string.IsNullOrEmpty(detailSql))
{
// sql模式
if (sql.IndexOf("select", StringComparison.OrdinalIgnoreCase) != -1)
{
detailSql = PubClass.ReplaceWhereCond(PubClass.ReqSql(row, sql));
detailSql += " and " + unionValue + " = '" + fieldValue + "'";
}
}
// 列表模式
//if (mRightGridDataMode == 1)
//{
// detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName);
//}
//else
//{ // 报表明细模式
detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName);
List<string> paramList = PubClass.GetParamValue(detailSql);
foreach (string param in paramList)
{
string fileName = param.Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
if (row.Table.Columns.Contains(fieldName))
{
detailSql = detailSql.Replace(param, row[fileName] + "");
}
}
//}
gc.SetDataSource(detailSql + " and " + unionValue + " = '" + fieldValue + "'");
gc.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
}
}
/// <summary>
/// 设置行颜色
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gridView_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
if (e.RowHandle >= 0)
{
XtraTabPage tagpage = tabMain.SelectedTabPage;
if (tagpage == null) return;
GridControlEx gce = tagpage.Tag as GridControlEx;
DataRow row = gce.gridView.GetDataRow(e.RowHandle);
//颜色集合
DataTable dt = gce.RowColorCondtion as DataTable;
//选择列
string cond = string.Empty;
string color = string.Empty;
string forecolor = string.Empty;
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
List<string> condition = PubClass.GetParamValue(dr["condition"].ToString());
cond = dr["condition"].ToString();
foreach (string item in condition)
{
string filedName = item.Replace("{", "").Replace("}", "");
cond = cond.Replace(item, row[filedName].ToString());
}
cond = PubClass.SqlToCode(cond);
color = dr["backcolor"] + "";
forecolor = dr["forcecolor"].ToString() + "";
string obj = Evaluator.Eval(cond) + "";
if (obj.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1)
{
if (!string.IsNullOrEmpty(color))
{
System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml(color);
e.Appearance.BackColor = color1;
}
if (!string.IsNullOrEmpty(forecolor))
{
System.Drawing.Color foreColor = System.Drawing.ColorTranslator.FromHtml(forecolor);
e.Appearance.ForeColor = foreColor;
}
FontStyle fst = new FontStyle();
if (dr["ifBold"].ToString() == "1")
{
fst = fst | FontStyle.Bold;
}
if (dr["ifItalic"].ToString() == "1")
{
fst = fst | FontStyle.Italic;
}
if (dr["ifStrickOut"].ToString() == "1")
{
fst = fst | FontStyle.Strikeout;
}
if (dr["ifUnderLine"].ToString() == "1")
{
fst = fst | FontStyle.Underline;
}
e.Appearance.Font = new Font(e.Appearance.Font, fst);
}
}
}
}
}
#endregion
#region 加载底部多标签
/// <summary>
/// 加载底部标签(可支持基础档案和报表)
/// </summary>
private void LoadDllDeatilWithBottomTabPage()
{
if (bottomHeight <= 100)
plBottomMain.Height = this.Height * bottomHeight / 100;
else
plBottomMain.Height = bottomHeight;
tabBottomMain.TabPages.Clear();
// 获取配置明细列表
moduleDetailBottomTable = SqlHelper.ExecuteDataSet("select a.*,b.SQL,isnull(b.isReport,0) isReport from p_systemDlltabDetail a inner join p_systemdlltab b on a.UnionModule = b.DllCoid where a.tab='" + DLLCoid + "' and a.isVisible=0 and isnull(a.rightVisible,0)=0 order by a.orderid").Tables[0];
// 明细列表没有数据,则获取报表明细配置,兼容旧版本
if (moduleDetailBottomTable == null || moduleDetailBottomTable.Rows.Count == 0)
{
moduleDetailBottomTable = SqlHelper.ExecuteDataSet("select * from p_systemDlltabDetail where tab='" + DLLCoid + "' and isVisible=0 and isnull(rightVisible,0)=0 order by orderid").Tables[0];
}
foreach (DataRow row in moduleDetailBottomTable.Rows)
{
var unionModule = row["UnionModule"] + "";
var unionValue = row["UnionValue"] + "";
var detailName = row["detailName"] + "";
var autoRefresh = row["autoRefresh"] + "";
var idFileName = unionValue.Replace("{", "").Replace("}", "");
SqlParameter[] p =
{
new SqlParameter("@modid",SqlDbType.VarChar,20),
new SqlParameter("@operatorname",SqlDbType.VarChar,20)
};
p[0].Value = unionModule;
p[1].Value = OperatorName;
DataTable dtCol = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "[p_getBaseModuleField]", "temp", p).Tables[0];
XtraTabPage tabPage = new XtraTabPage();
tabPage.Text = detailName;
Panel_TabPage p_tabPage = new Panel_TabPage();
p_tabPage.pageText = detailName;
p_tabPage.parentPriv = ModulePriv;
tabPage.Controls.Add(p_tabPage);
p_tabPage.Dock = DockStyle.Fill;
p_tabPage.BringToFront();
if (dtCol.Rows.Count > 0)
{
p_tabPage.dtColumns = dtCol;
}
p_tabPage.gridList.EnterOrder = mEnterOrder;
p_tabPage.gridList.SetColumns2(dtCol);
p_tabPage.Name = "tab";
DataTable dtMain = SqlHelper.ExecuteDataSet("select * from p_systemdlltab where dllcoid='" + unionModule + "'").Tables[0];
if (dtMain != null && dtMain.Rows.Count > 0)
{
p_tabPage.gridList.Sql = dtMain.Rows[0]["SQL"] + "";
p_tabPage.gridList.ModuleKey = unionModule;
p_tabPage.gridList.ModuleType = 1;
}
p_tabPage.DLLCoid = unionModule;
p_tabPage.FormText = detailName;
DataTable dtMainTag3 = SqlHelper.ExecuteDataSet("select top 1 fieldname from p_systemwordbooktab where tab='" + unionModule + "' order by orderid asc").Tables[0];
idFileName = dtMainTag3.Rows[0]["fieldname"] + "";
p_tabPage.objectId = idFileName; //关联字段Key
p_tabPage.OperatorId = OperatorId;
p_tabPage.OperatorName = OperatorName;
p_tabPage.Privilege = "0";
p_tabPage.objectValue = ""; // 关联字段值
p_tabPage.autoRefresh = "0"; // 初始化不刷新数据
p_tabPage.HasReport = moduleDetailBottomTable.Columns.Contains("isReport") ? Convert.ToBoolean(row["isReport"]) : true;
p_tabPage.gridList.gridView.Tag = moduleDetailBottomTable.Columns.Contains("SQL") ? row["SQL"] : row["detailSql"];
p_tabPage.gridList.Tag = row;
tabPage.Tag = p_tabPage;
tabBottomMain.TabPages.Add(tabPage);
}
if (moduleDetailBottomTable.Rows.Count == 0)
{
splitContainerControl1.PanelVisibility = SplitPanelVisibility.Panel1;
//plBottomMain.Visible = false;
}
}
/// <summary>
/// 设置底部表格数据
/// </summary>
/// <param name="row"></param>
private void SetBottomGridData(DataRow row)
{
//判断修改条件是否符合
bool canModify = false;
if (needModified)
{
string tempCond = modifyCond;
if (!canModify)
{
tempCond = PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName);
tempCond = PubClass.ReqSqlWhere(row, tempCond);
canModify = string.IsNullOrEmpty(tempCond) ? true : Convert.ToBoolean(Evaluator.Eval(tempCond));
}
}
foreach (XtraTabPage tab in tabBottomMain.TabPages)
{
Panel_TabPage tabPage = tab.Tag as Panel_TabPage;
GridControlEx gc = tabPage.gridList;
DataRow drBottom = gc.Tag as DataRow;
string sql = gc.gridView.Tag + "";
string fieldName = drBottom.Table.Columns.Contains("unionParentField") && !string.IsNullOrEmpty(drBottom["unionParentField"] + "")
? drBottom["unionParentField"] + ""
: mParmaryKey;
string fieldValue = row[fieldName] + "";
string detailSql = PubClass.ReqSqlParam(sql, OperatorId, OperatorName);
//string unionValue = row[(drBottom["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("", "").Replace("", "").ToString()]+"";
//string unionField = (drBottom["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
string unionValue = row[fieldName] + "";
string unionField = (drBottom["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
tabPage.objectId = unionField;
tabPage.objectValue = unionValue;
DataTable dtMainTag = SqlHelper.ExecuteDataSet("select top 1 fieldname from p_systemwordbooktab where tab='" + drBottom["UnionModule"] + "" + "' and lower(fieldname)='" + unionField.ToLower() + "'").Tables[0];
if (dtMainTag.Rows.Count < 1)
{
unionField = tabPage.objectId;
}
//string unionField = tabPage.objectId;
// 列表模式
//if (mRightGridDataMode == 1)
//{
// detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName);
//}
//else
//{ // 报表明细模式
if (sql.IndexOf("select", StringComparison.OrdinalIgnoreCase) >= 0)
{
detailSql = PubClass.ReplaceWhereCond(PubClass.ReqSql(row, detailSql));
detailSql = detailSql + " and " + unionField + " = '" + unionValue + "'";
}
List<string> paramList = PubClass.GetParamValue(detailSql);
foreach (string param in paramList)
{
string fileName = param.Replace("{", "").Replace("}", "").Replace("", "").Replace("", "");
if (row.Table.Columns.Contains(fieldName))
{
detailSql = detailSql.Replace(param, row[fileName] + "");
}
}
//}
gc.Sql = detailSql;
tabPage.InitData(gc.Sql);
tab.Text = tabPage.pageText + "(" + gc.gridView.DataRowCount.ToString() + ")";
if (gc.gridView.DataRowCount > 0)
{
tab.Appearance.Header.ForeColor = Color.Red;
}
else
{
tab.Appearance.Header.ForeColor = Color.FromArgb(0, 0, 0);
}
gc.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
}
}
#endregion
#region 设置明细数据
private void SetDetailData()
{
int[] rows = gcMain.gridView.GetSelectedRows();
if (rows != null && rows.Length > 0)
{
DataRow row = gcMain.gridView.GetDataRow(rows[0]);
this.HandleDelButtonState(row); // 验证删除按钮是否可以用
this.HandleEditRowState(row);
this.SetRightGridData(row); // 设置右侧表格数据
this.SetBottomGridData(row); // 设置底部表格数据
}
}
//表格编辑
private void gridView_ShowingEditor(object sender, CancelEventArgs e)
{
e.Cancel = !btnSave.Enabled;
}
#endregion
private void txtKey_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
btnCondSearch_1.PerformClick();
}
private void pl_search_Click(object sender, EventArgs e)
{
}
private void gridViewLeft_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
string dragState = gridViewLeft.Tag+"";
if ((dragState == "0") || (dragState == ""))
{
isSearch = false; // 设置当前查询模式为部分数据查询
DataRow row = gridViewLeft.GetDataRow(e.FocusedRowHandle);
InitData(PubClass.ReplaceWhereCond(MyNotBmpSql) + " and " + dtSystemwordbooktabTag3["fieldsqlid"] + " = '" + row[dtSystemwordbooktabTag3["fieldsqlid"] + ""] + "' ");
}
}
private void panel1_Resize(object sender, EventArgs e)
{
if (mInitFinish)
{
Lskj.PubUtils.INIHelper.Write("base_width_" + DLLCoid, panel1.Width + "");
}
}
}
}