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.Common; using CommonLib; using DevExpress.XtraTab; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Columns; using Lskj.MyControl; using System.Data.SqlClient; using DevExpress.XtraGrid.Views.Grid; using DevExpress.Utils; using DevExpress.Data; using DevExpress.XtraGrid; using CommonLib.utils; using ExcelPlus; namespace Lskj.PubPageModuleDetail { public partial class TabPageContainer : UserControl { #region 需要传入的参数 public string OperatorId, OperatorName, DLLCoid, FormText, Privilege; public Form baseForm; #endregion #region 私有属性 /// /// 左边显示类型 /// private int LeftType; /// /// /// private List tsmMenuList = new List(); private DataTable dtColumns; private string mPrimaryKey; // 主界面主键 private int leftWidth; //宽度 private int mRightGridMode; // 右边参数模式,1.面板模式,2.标签模式 private int mRightGridDataMode; // 右边表格模式,1.明细列表数据,2.报表明细模式 /// /// 表格颜色 /// private DataTable mGridColorList; private DataTable mGridSum; private DataRow mSystemRow; private DataRow[] mNullableFields; private string mAddCond, mModifyCond, mDeleteCond, mDragCond, mTableName; private string mTreeTags; // 选中的数节点数据 private int mSearchHide; private int mSeearchMode; // 查询模式,1.查询条件,2.下拉列表查询 private int mLeftType; /// /// 表格是否可以编辑 /// private bool mGridEdited; private bool mNeedModify; /// /// 是否为点击查询按钮获取数据 /// public bool mIsSearch = true; private bool inSummary = false; public DataRow drLeft; public MySearchCreateControl mcc = new MySearchCreateControl(); public MySearchCreateControl mccTop = new MySearchCreateControl(); public string BeforeSearchSQL; /// /// DbDataAdapter /// private SqlDataAdapter GridAdapter { get; set; } /// /// 操作Dataset /// private DataSet GridDataSet = new DataSet(); public GridControlEx GetGridControl; public GridControl GridLeftEx; #endregion #region 缓存数据 /// /// 基础档案、报表明细列表数据 /// private DataTable moduleDetailTable = new DataTable(); private DataTable moduleDetailBottomTable = new DataTable(); /// /// 缓存底部多标签 /// private Dictionary mButtomTabPages = new Dictionary(); #endregion #region 构造函数 public TabPageContainer(string OperatorId, string OperatorName, string DLLCoid, string FormText, string Privilege) { this.OperatorId = OperatorId; this.OperatorName = OperatorName; this.DLLCoid = DLLCoid; this.FormText = FormText; this.Privilege = Privilege; //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); gcMain.gridView.IndicatorWidth = 40; gcMain.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; gcMain.gridView.RowStyle += new RowStyleEventHandler(gridView_RowStyle); gcMain.gridView.ShowingEditor += new CancelEventHandler(gridView_ShowingEditor); gcMain.gridView.DoubleClick += new EventHandler(gridView_DoubleClick); gcMain.gridView.SelectionChanged +=new SelectionChangedEventHandler(gridView_SelectionChanged); gcMain.gridView.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridView_CellValueChanged); } #endregion #region 初始化 protected override void OnLoad(EventArgs e) { DataTable dtTag3 = SqlHelper.ExecuteDataSet("select * from P_systemwordbooktab where tab='" + DLLCoid + "' and fieldsqlTag=3").Tables[0]; if (dtTag3 != null && dtTag3.Rows.Count > 0) drLeft = dtTag3.Rows[0]; mSystemRow = SqlHelper.ExecuteDataSet(string.Format("select * from P_systemDlltab where DLLCoid='{0}'", DLLCoid)).Tables[0].Rows[0]; mGridColorList = SqlHelper.ExecuteDataSet(string.Format("select * from P_systemwordbookcolor where tab='{0}' and useflag=0 order by orderid", DLLCoid)).Tables[0]; mSystemRow["SQL"] = PubClass.ReqSqlParam(mSystemRow["SQL"] + "", OperatorId, OperatorName); this.LeftType = Convert.ToInt32(mSystemRow["dllType"]); this.leftWidth = Convert.ToInt32(mSystemRow["leftWidth"] + ""); this.mPrimaryKey = getParimaryKey(DLLCoid); this.plLeft.Width = leftWidth > 0 ? leftWidth : plLeft.Width; // 处理表格是否可以编辑 mNeedModify = mSystemRow["modifyEnable"] + "" == "1"; mGridEdited = (string.IsNullOrEmpty(mSystemRow["selfEdit"] + "") || mSystemRow["selfEdit"] + "" == "0" || mSystemRow["selfEdit"] + "" == "False") ? false : true; gcMain.gridView.OptionsBehavior.Editable = mGridEdited; btnSave.Enabled = mGridEdited; mAddCond = mSystemRow["addCond"] + ""; mModifyCond = mSystemRow["modifyCond"] + ""; mDeleteCond = mSystemRow["deleteCond"] + ""; mDragCond = mSystemRow["dragCond"] + ""; mTableName = mSystemRow["SQLDT1"] + ""; mSearchHide = Convert.ToInt32(mSystemRow["searchHide"] + ""); mLeftType = Convert.ToInt32(mSystemRow["dllType"]); pl_search.Visible = mSearchHide != 1; //模板添加删除修改导入导出 btnAdd.Enabled = mSystemRow["addEnable"] + "" == "1"; btnDelete.Enabled = mSystemRow["deleteEnable"] + "" == "1"; btnSave.Enabled = mSystemRow["modifyEnable"] + "" == "1" && mGridEdited; gcMain.gridView.OptionsBehavior.Editable = mSystemRow["modifyEnable"] + "" == "1" && mGridEdited; btnImprt.Enabled = mSystemRow["importEnable"] + "" == "1"; btnExport.Enabled = mSystemRow["exportEnable"] + "" == "1"; btnCondSearch.Enabled = mSystemRow["searchEnable"] + "" == "1"; cbField.Enabled = mSystemRow["searchEnable"] + "" == "1"; txtKey.Enabled = mSystemRow["searchEnable"] + "" == "1"; // 加载默认右侧多标签,默认加载为上下结构的表格 this.LoadDllDetailWithPanelPage(DLLCoid); // 加载默认底部多标签 this.LoadDllDeatilWithBottomTabPage(DLLCoid); if (btnAdd.Enabled && !btnDelete.Enabled && !btnSave.Enabled) { pl_down.Visible = false; } // 加载筛选框 DataTable cbSearchFiled = SqlHelper.ExecuteDataSet("select username1,fieldname from P_systemwordbooktab where tab='" + DLLCoid + "' and ifSearch =0 and isnull(username1,'')<>''").Tables[0]; cbField.DataSource = cbSearchFiled; cbField.DisplayMember = "username1"; cbField.ValueMember = "fieldname"; // 查询统计列 string isSumSql = "select * from p_systemwordbooktab where tab='" + DLLCoid + "' and isnull(vislble,0)=0 and isnull(calcExpr,'')<>''order by calcOrder asc"; mGridSum = SqlHelper.ExecuteDataSet(isSumSql).Tables[0]; //左边树结构 if (LeftType == 1) { tvLeft.Visible = true; gridLeft.Visible = plContainer.Visible = pl_right_where.Visible = false; PubClass.BindTree(drLeft["fieldsql"] + "", tvLeft.GetTreeView); gcMain.gridView.OptionsSelection.MultiSelect = true; GridDragTree gridDragTree = new GridDragTree(baseForm, gcMain.gridControl, tvLeft.GetTreeView, Drag_EventHandler, drLeft, mSystemRow["SQLDT1"] + "", mPrimaryKey); } else if (LeftType == 2) { tvLeft.Visible = false; gridLeft.Visible = true; string sql = "select * from p_systemwordbookgrid where fieldid=" + drLeft["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"] + ""; gridColumn.Width = Convert.ToInt32(row["width"]); gridColumn.Visible = Convert.ToInt32(row["visible"]) == 0; GridViewLeft.Columns.Add(gridColumn); } SearchCraeteControl(); gcMain.gridView.OptionsSelection.MultiSelect = true; GridDrag2GridUpdate g2g = new GridDrag2GridUpdate(gcMain.gridControl, gridLeft, DragGridCallBack); } else { plLeft.Visible = false; splitterControl1.Visible = false; } this.SearchCreateTopControl(); this.InitColumns(); this.InitMenu(); this.SearchData(); // 这个位置怪的很,居然不计算 int x_width = this.pl_down.Location.X + this.pl_down.Width; btnPrint.Location = new Point(x_width - btnPrint.Width - 5, btnPrint.Location.Y); btnSave.Location = new Point(btnPrint.Location.X - btnSave.Width - 5, btnSave.Location.Y); btnDelete.Location = new Point(btnSave.Location.X - btnDelete.Width - 5, btnDelete.Location.Y); btnAdd.Location = new Point(btnDelete.Location.X - btnAdd.Width - 5, btnAdd.Location.Y); } #endregion #region 表格拖动 /// /// 拖动权限 /// /// /// private bool CanDragRowState(DataRow dr) { try { string tempCond = mDragCond; bool canDrag = string.IsNullOrEmpty(mDragCond); 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 = mSystemRow["SQLDT1"] + ""; string unionField = drLeft["fieldsqlid"] + ""; string parmaryKey = mPrimaryKey; 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 (mSystemRow["searchEnable"] + "" == "1") { if (mSeearchMode == 1) { sqlValue = mccTop.SetSearchSqlValue(); if (!string.IsNullOrEmpty(sqlValue)) { InitData(sqlValue); } } else { btnCondSearch_Click(null, null); } } } XtraMessageBox.Show("拖动成功 " + dragSuccess + " 条," + "失败 " + dragError + " 条", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { } } } #endregion #region 搜索条件 /// /// 创建左侧查询条件 /// public void SearchCraeteControl() { string sql = string.Format("exec p_getControlLocation '{0}','{1}','{2}'", drLeft["fieldKey"], DLLCoid, 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}'", drLeft["fieldKey"]); mcc.LoginId = OperatorId; mcc.LoginName = OperatorName; mcc.SearchSql = PubClass.ReplaceWhereCond(drLeft["fieldsql"] + ""); mcc.ctr = pl_right_where; mcc.gce = gridLeft; mcc.dllType = LeftType; 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.DataSource = SqlHelper.ExecuteDataSet(drLeft["fieldsql"] + "").Tables[0]; pl_right_where.Visible = false; } } #endregion #region 中间表格行点击操作 /// /// 表格点击 /// /// /// public void gridView_SelectionChanged(object sender, SelectionChangedEventArgs e) { string primaryKey = getParimaryKey(DLLCoid); SetDetailData(DLLCoid, primaryKey); } #endregion #region 选择树 protected void tvLeft_AfterSelect(object sender, TreeViewEventArgs e) { LeftTreeAfterSelect(sender, e); } #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); } } } } /// /// 取消节点选中状态之后,取消所有父节点的选中状态 /// /// /// private void setParentNodeCheckedState(TreeNode currNode, bool state) { TreeNode parentNode = currNode.Parent; parentNode.Checked = state; if (currNode.Parent.Parent != null) { setParentNodeCheckedState(currNode.Parent, state); } } /// /// 选中节点之后,选中节点的所有子节点 /// /// /// 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 gridViewLeft_RowCellClick(object sender, RowCellClickEventArgs e) { LeftGridCellClick(sender, e); } #endregion #region 基础档案、报表右侧明细表格 /// /// 加载右侧多标签,添加在一个面板上,显示为上下结构的表格,只加载报表表格 /// public void LoadDllDetailWithPanelPage(string menuId) { tabMain.Visible = false; mRightGridMode = 1; mRightGridDataMode = 1; // 获取配置明细列表 moduleDetailTable = SqlHelper.ExecuteDataSet("select a.*,b.SQL from p_systemDlltabDetail a inner join p_systemdlltab b on a.UnionModule = b.DllCoid where a.tab='" + menuId + "' and a.isVisible=0 and a.rightVisible=1 order by a.orderid").Tables[0]; // 明细列表没有数据,则获取报表明细配置,兼容旧版本 if (moduleDetailTable == null || moduleDetailTable.Rows.Count == 0) { moduleDetailTable = SqlHelper.ExecuteDataSet("select * from p_systemDlltabDetail where tab='" + menuId + "' 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; } } /// /// 加载右侧多标签,添加在多标签上,只加载报表表格 /// public void LoadDllDeatilWithTabPage(string menuId) { 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='" + menuId + "' and a.isVisible=0 and a.rightVisible=1 order by a.orderid").Tables[0]; // 明细列表没有数据,则获取报表明细配置,兼容旧版本 if (moduleDetailTable == null || moduleDetailTable.Rows.Count == 0) { moduleDetailTable = SqlHelper.ExecuteDataSet("select * from p_systemDlltabDetail where tab='" + menuId + "' 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; } } /// /// 创建表格,为了兼容之前版本先取报表配置列,未配置则取报表明细列 /// /// /// 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 = unionModule; 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; } /// /// 设置右侧表格数据 /// private void SetRightGridData(string primaryKey, DataRow drRow) { switch (mRightGridMode) { case 1: // 面板模式 SetRightPanelGridData(primaryKey, drRow); break; case 2:// 标签模式 SetRightTabGridData(primaryKey, drRow); break; } } /// /// 设置右侧面板表格数据 /// private void SetRightPanelGridData(string primaryKey, 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 = primaryKey; string fieldValue = row[fieldName] + ""; string detailSql = PubClass.ReplaceWhereCond(PubClass.ReqSql(row, sql)); string unionValue = (drRight["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("{", "").Replace("}", ""); if (!string.IsNullOrEmpty(detailSql)) { detailSql += " and " + unionValue + " = '" + fieldValue + "'"; } // 列表模式 if (mRightGridDataMode == 1) { detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName); } else { // 报表明细模式 detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName); List paramList = PubClass.GetParamValue(detailSql); foreach (string param in paramList) { string fileName = param.Replace("{", "").Replace("}", "").Replace("{", "").Replace("}", ""); if (dtColumns.Columns.Contains(fieldName)) { detailSql = detailSql.Replace(param, row[fileName] + ""); } } } gc.SetDataSource(detailSql); gc.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; } } } /// /// 设置右侧多标签数据 /// /// private void SetRightTabGridData(string primaryKey, 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 = primaryKey; string fieldValue = row[fieldName] + ""; string detailSql = PubClass.ReplaceWhereCond(PubClass.ReqSql(row, sql)); string unionValue = (drRight["unionValue"] + "").Replace("{", "").Replace("}", "").Replace("{", "").Replace("}", ""); if (!string.IsNullOrEmpty(detailSql)) { detailSql += " and " + unionValue + " = '" + fieldValue + "'"; } // 列表模式 if (mRightGridDataMode == 1) { detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName); } else { // 报表明细模式 detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName); List paramList = PubClass.GetParamValue(detailSql); foreach (string param in paramList) { string fileName = param.Replace("{", "").Replace("}", "").Replace("{", "").Replace("}", ""); if (dtColumns.Columns.Contains(fieldName)) { detailSql = detailSql.Replace(param, row[fileName] + ""); } } } gc.SetDataSource(detailSql + " and " + unionValue + " = '" + fieldValue + "'"); gc.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; } } /// /// 设置行颜色 /// /// /// protected void gridView_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { if (e.RowHandle >= 0) { XtraTabPage tagpage = tabMain.SelectedTabPage; 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 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 加载底部多标签 /// /// 加载底部标签(可支持基础档案和报表) /// private void LoadDllDeatilWithBottomTabPage(string menuId) { // 获取配置明细列表 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='" + menuId + "' and a.isVisible=0 order by a.orderid").Tables[0]; // 明细列表没有数据,则获取报表明细配置,兼容旧版本 if (moduleDetailBottomTable == null || moduleDetailBottomTable.Rows.Count == 0) { moduleDetailBottomTable = SqlHelper.ExecuteDataSet("select * from p_systemDlltabDetail where tab='" + menuId + "' and isVisible=0 order by orderid").Tables[0]; } XtraTabControl tabBottomMain = new XtraTabControl(); tabBottomMain.Dock = DockStyle.Fill; 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; //tabPage.PageVisible = menuId != DLLCoid; TabPageDetail p_tabPage = new TabPageDetail(); p_tabPage.pageText = detailName; tabPage.Controls.Add(p_tabPage); p_tabPage.Dock = DockStyle.Fill; p_tabPage.BringToFront(); 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); plBottomMain.Controls.Add(tabBottomMain); } if (menuId == DLLCoid) { plBottomMain.Height = this.Height / 3; // 未设置高度,默认只显示30%高度 plBottomMain.Visible = moduleDetailBottomTable.Rows.Count != 0; } mButtomTabPages.Add(menuId, tabBottomMain); } /// /// 设置底部表格数据 /// /// private void SetBottomGridData(string menuId, string primaryKey, DataRow row) { foreach (XtraTabPage tab in mButtomTabPages[menuId].TabPages) { TabPageDetail tabPage = tab.Tag as TabPageDetail; GridControlEx gc = tabPage.gridList; DataRow drBottom = gc.Tag as DataRow; string sql = gc.gridView.Tag + ""; string fieldName = primaryKey; string fieldValue = row[fieldName] + ""; string detailSql = PubClass.ReqSqlParam(sql, OperatorId, OperatorName); detailSql = PubClass.ReplaceWhereCond(PubClass.ReqSql(row, detailSql)); //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 { // 报表明细模式 detailSql = PubClass.ReqSqlParam(detailSql, OperatorId, OperatorName); List paramList = PubClass.GetParamValue(detailSql); foreach (string param in paramList) { string fileName = param.Replace("{", "").Replace("}", "").Replace("{", "").Replace("}", ""); if (dtColumns.Columns.Contains(fieldName)) { detailSql = detailSql.Replace(param, row[fileName] + ""); } } } gc.Sql = detailSql + " and " + unionField + " = '" + unionValue + "'"; tabPage.InitData(gc.Sql); tab.Text = tabPage.pageText + "(" + gc.gridView.DataRowCount.ToString() + ")"; gc.gridView.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; } } #endregion #region 设置明细数据 private void SetDetailData(string menuId, string primaryKey) { int[] rows = gcMain.gridView.GetSelectedRows(); if (rows != null && rows.Length > 0) { DataRow row = gcMain.gridView.GetDataRow(rows[0]); // 验证按钮权限 this.HandleAddRowState(row); this.HandleDelButtonState(row); this.HandleEditRowState(row); this.SetRightGridData(primaryKey, row); // 设置右侧表格数据 this.SetBottomGridData(menuId, primaryKey, row); // 设置底部表格数据 } } #endregion #region 辅助方法 /// /// 获取主键 /// /// /// private string getParimaryKey(string menuid) { DataRow drRow = SqlHelper.ExecuteDataSet("select top 1 fieldname from P_systemwordbooktab where tab='" + menuid + "' order by orderid").Tables[0].Rows[0]; return drRow["fieldname"] + ""; } #endregion #region 切换Tab页 ///// ///// 切换中 ///// ///// ///// //private void tabTopMain_SelectedPageChanging(object sender, TabPageChangingEventArgs e) //{ // XtraTabPage tabPage = tabTopMain.SelectedTabPage; // if (tabPage != null && mButtomTabPages.Count > 0) // { // XtraTabControl detailTabPage = mButtomTabPages[tabPage.Tag + ""]; // if (detailTabPage != null && detailTabPage.TabPages.Count > 0) // { // detailTabPage.Visible = false; // } // plBottomMain.Visible = false; // } //} ///// ///// 切换后 ///// ///// ///// //private void tabTopMain_SelectedPageChanged(object sender, TabPageChangedEventArgs e) //{ // XtraTabPage tabPage = tabTopMain.SelectedTabPage; // if (tabPage != null && mButtomTabPages.Count > 0) // { // TabPageMaster mTabPage = tabPage.Controls[0] as TabPageMaster; // XtraTabControl detailTabPage = mButtomTabPages[tabPage.Tag + ""]; // if (detailTabPage != null && detailTabPage.TabPages.Count > 0) // { // detailTabPage.Visible = true; // plBottomMain.Visible = true; // plBottomMain.Height = this.Height / 3; // } // else // { // plBottomMain.Visible = false; // } // } //} #endregion #region 拖动回调 public void Drag_EventHandler(object sender, DragEventArgs e) { MessageBox.Show("类别修改成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } #endregion #region 基础操作 /// /// 导入 /// /// /// private void btnImprt_Click(object sender, EventArgs e) { //frmImport frm = new frmImport(gcMain.gridControl, mTableName); string columnPrefix = PubClass.GetColumnPrefix(mTableName); frmImport frm = new frmImport(gcMain, mTableName, "", "", OperatorId, OperatorName, columnPrefix); frm.ShowDialog(); } /// /// 导出 /// /// /// private void btnExport_Click(object sender, EventArgs e) { PubClass.SaveXls(gcMain.gridControl); } /// /// 帮助文档 /// /// /// private void btnHelp_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(DLLCoid)) { XtraMessageBox.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, DLLCoid, id+"" }; IForm form = PubUtil.LoadDllForm2("Lskj.Attachment.dll", args); form.SubForm.ShowDialog(); } /// /// 添加数据 /// /// /// 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(mSystemRow["AddDllName"] + "")) { if (mLeftType == 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.Tag + "", 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 (mLeftType == 2) { int[] rows = GridViewLeft.GetSelectedRows(); if (rows.Length == 0) { XtraMessageBox.Show("请选择类别", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } DataRow row = GridViewLeft.GetDataRow(rows[0]); fieldsqlid = row[drLeft["fieldsqlid"] + ""] + ""; fieldsqlname = row[drLeft["fieldsqlname"] + ""] + ""; DataTable dtGcHeader = GridLeftEx.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, "", "", "", fieldsqlid, fieldsqlname, strTag, "", "", "", jsonData }; IForm form = PubUtil.LoadDllForm(mSystemRow["AddDllName"] + "", args); DialogResult result = form.SubForm.ShowDialog(); if (result == DialogResult.OK) { 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 (mLeftType == 1) { TreeNode treeNode = tvLeft.GetTreeView.SelectedNode; if (treeNode != null && treeNode.Nodes.Count > 0) { XtraMessageBox.Show("请选中末级节点!"); return; } } AddRow(gcMain.gridView); } } /// /// 删除事件 /// /// /// private void btnDelete_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(mDeleteCond); string tempCond = mDeleteCond; 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[mPrimaryKey]; 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[mPrimaryKey] + "',"; } else { noDeleteIds += dr[mPrimaryKey] + " >> " + msg + "\n"; } } else { noDeleteIds += dr[mPrimaryKey] + " >>不符删除合条件\n"; } } if (ids != string.Empty) { string sql = "delete from " + mSystemRow["SQLDT1"] + " where " + mPrimaryKey + " in(" + ids.Trim(',') + ")"; SqlHelper.ExecuteNonQuery(sql); //InitData(MyNotBmpSql); // 移除表格选中数据 gcMain.gridView.DeleteSelectedRows(); 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); } } } } /// /// 保存 /// /// /// private void btnSave_Click(object sender, EventArgs e) { if (gridRequired()) { try { GridAdapter.Update(gcMain.gridControl.DataSource as DataTable); } catch (DBConcurrencyException dce) { // 并发异常 XtraMessageBox.Show("数据已更新,请刷新后重试."); return; } catch (Exception ex) { if (ex.Message.IndexOf("ix", StringComparison.OrdinalIgnoreCase) != -1) { MessageBox.Show("系统检测到录入信息重复,请检查", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { MessageBox.Show(ex.Message); return; } } XtraMessageBox.Show("修改成功"); } } /// /// 打印 /// /// /// private void btnPrint_Click(object sender, EventArgs e) { PubClass.Preview(gcMain.gridControl); } /// /// 查询 /// /// /// private void btnCondSearch_Click(object sender, EventArgs e) { mIsSearch = true; // 设置当前查询模式为全部数据查询 SearchData(); } /// /// 表格颜色 /// /// /// private void gridView_RowStyle(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 mGridColorList.Rows) { List condition = PubClass.GetParamValue(dr["condition"] + ""); cond = dr["condition"] + ""; foreach (string item in condition) { string filedName = item.Replace("{", "").Replace("}", ""); cond = cond.Replace(item, row[filedName] + ""); } cond = PubClass.SqlToCode(cond); color = dr["backcolor"] + ""; forecolor = dr["forcecolor"] + ""; string obj = Evaluator.Eval(cond) + ""; if (obj.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1) { if (!string.IsNullOrEmpty(color)) { Color color1 = ColorTranslator.FromHtml(color); e.Appearance.BackColor = color1; } if (!string.IsNullOrEmpty(forecolor)) { Color foreColor = ColorTranslator.FromHtml(forecolor); e.Appearance.ForeColor = foreColor; } FontStyle fst = new FontStyle(); if (dr["ifBold"] + "" == "1") { fst = fst | FontStyle.Bold; } if (dr["ifItalic"] + "" == "1") { fst = fst | FontStyle.Italic; } if (dr["ifStrickOut"] + "" == "1") { fst = fst | FontStyle.Strikeout; } if (dr["ifUnderLine"] + "" == "1") { fst = fst | FontStyle.Underline; } e.Appearance.Font = new Font(e.Appearance.Font, fst); } } } } /// /// 表格编辑 /// /// /// private void gridView_ShowingEditor(object sender, CancelEventArgs e) { e.Cancel = !btnSave.Enabled; } /// /// 查询 /// /// /// private void txtKey_KeyDown(object sender, KeyEventArgs e) { this.btnCondSearch.PerformClick(); } #endregion #region 左侧树、表格点击加载数据 /// /// 左侧树点击 /// /// /// public void LeftTreeAfterSelect(object sender, TreeViewEventArgs e) { try { if (e.Action == TreeViewAction.ByMouse) { mIsSearch = false; // 设置当前查询模式为部分数据查询 string strWhere = " and " + drLeft["fieldname"] + " like '" + e.Node.Name + "%'"; string sql = PubClass.ReplaceWhereCond(mSystemRow["SQL"] + "") + strWhere; InitData(sql); } } catch (Exception ex) { } } /// /// 左侧表格点击 /// /// /// public void LeftGridCellClick(object sender, RowCellClickEventArgs e) { try { mIsSearch = false; // 设置当前查询模式为部分数据查询 DataRow row = (sender as GridView).GetDataRow(e.RowHandle); string key = drLeft["fieldname"] + ""; string value = row[drLeft["fieldsqlid"] + ""] + ""; InitData(PubClass.ReplaceWhereCond(mSystemRow["SQL"] + "") + " and " + key + " = '" + value + "' "); } catch (Exception ex) { } } #endregion #region 修改数据 private void gridView_DoubleClick(object sender, EventArgs e) { if (!string.IsNullOrEmpty(mSystemRow["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 { btnCondSearch_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(mModifyCond); if (mNeedModify) { string tempCond = mModifyCond; 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[mPrimaryKey].ToString(); string[] args = { FormText, OperatorId, OperatorName, Privilege, DLLCoid, "", Convert.ToInt32( !canModify).ToString(), productId, "", "", "" }; IForm form = PubUtil.LoadDllForm(mSystemRow["AddDllName"] + "", args); DialogResult dialogResult = form.SubForm.ShowDialog(); } return true; } #endregion #region 添加数据 /// /// 添加行 /// /// 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 (mLeftType == 2) { int[] rows = GridViewLeft.GetSelectedRows(); if (rows.Length > 0) { DataRow row = GridViewLeft.GetDataRow(rows[0]); GridColumn tmpcol = gcMain.gridView.Columns[drLeft["fieldname"] + ""]; view.SetRowCellValue(gcMain.gridView.FocusedRowHandle, tmpcol, row[drLeft["fieldsqlid"] + ""]); view.UpdateCurrentRow(); view.ShowEditor(); } } if (mLeftType == 1) { TreeNode tn = tvLeft.GetTreeView.SelectedNode; GridColumn tmpcol = gcMain.gridView.Columns[drLeft["fieldname"] + ""]; view.SetRowCellValue(gcMain.gridView.FocusedRowHandle, tmpcol, tn.Name); view.UpdateCurrentRow(); view.ShowEditor(); } } #endregion #region 保存数据 /// /// 表格必须录入验证 /// /// 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 mNullableFields) { 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; } #endregion #region 查询数据 /// /// 查询所有数据 /// private void SearchData() { string field = cbField.SelectedValue + ""; string strWhere = " "; if (mLeftType == 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(mTreeTags)) strWhere += " and " + drLeft["fieldname"] + " in (" + mTreeTags.Trim(',') + ")"; InitData(PubClass.ReplaceWhereCond(mSystemRow["SQL"] + "") + strWhere); } /// /// 查询数据(按当前模式,树点击or表格点击or点击查询按钮) /// private void SearchCondData() { string sqlValue = mSystemRow["SQL"] + ""; // 假如为树形结构,并且为点击树查询数据 if (mLeftType == 1 && !mIsSearch) { TreeNode treeNode = tvLeft.GetTreeView.SelectedNode; if (treeNode != null) InitData(PubClass.ReplaceWhereCond(sqlValue) + " and " + mPrimaryKey + " like '" + treeNode.Name + "%' "); else InitData(sqlValue); } // 假如左侧为表格数据,并且为点击表格查询数据 else if (mLeftType == 2 && !mIsSearch) { int[] rows = GridViewLeft.GetSelectedRows(); if (rows.Length == 0) return; DataRow row = GridViewLeft.GetDataRow(rows[0]); InitData(PubClass.ReplaceWhereCond(sqlValue) + " and " + mPrimaryKey + " like '" + row[drLeft["fieldsqlid"] + ""] + "%' "); } else { // 查询所有数据 InitData(sqlValue); } } #endregion #region 辅助方法 /// /// 加载表格列头 /// /// 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]; mNullableFields = dtColumns.Rows.OfType().Where(x => x["tagid"] + "" == "1").ToArray(); gcMain.ModuleKey = DLLCoid; gcMain.ModuleType = 1; gcMain.SetColumns2(dtColumns); } /// /// /// public void InitMenu() { GridMenu gm = new GridMenu(FormText, OperatorId, OperatorName, Privilege, DLLCoid, "", gcMain.gridControl); gm.DirId = mSystemRow["dirid"] + ""; gm.filedKey = mPrimaryKey; gm.BindGridMenuWQ(DLLCoid); gm.OnGridMenuClickRefreshData += new EventHandler(gm_OnGridMenuClickRefreshData); } /// /// 初始化数据 /// /// public void InitData(string sqlValue) { HandleBmp(sqlValue); int oldRowHandle = (gcMain.gridControl.MainView as GridView).FocusedRowHandle; BeforeSearchSQL = sqlValue; //这个绑定数据源 GridAdapter = SqlHelper.ExecuteAdapter(CommandType.Text, sqlValue); if (GridDataSet != null && GridDataSet.Tables.Count > 0) GridDataSet.Clear(); GridAdapter.Fill(GridDataSet); SqlCommandBuilder cb = new SqlCommandBuilder(GridAdapter); gcMain.gridControl.DataSource = GridDataSet.Tables[0]; (gcMain.gridControl.MainView as GridView).ClearSelection(); (gcMain.gridControl.MainView as GridView).FocusedRowHandle = oldRowHandle; (gcMain.gridControl.MainView as GridView).SelectRow(oldRowHandle); } /// /// 顶部查询条件(保留之前的按列查询) /// public void SearchCreateTopControl() { string sql = string.Format("exec p_getControlLocation '{0}','{1}','{2}'", mSystemRow["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}'", mSystemRow["condKey"]); mccTop.LoginId = OperatorId; mccTop.LoginName = OperatorName; mccTop.SearchSql = PubClass.ReplaceWhereCond(mSystemRow["SQL"] + ""); mccTop.ctr = pl_search; mccTop.tvLeft = tvLeft; mccTop.tvLeftDataRow = drLeft; mccTop.gce = gcMain.gridControl; mccTop.RememberRow = true; mccTop.dllType = mLeftType; 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 (mSystemRow["searchEnable"] + "" == "1") { string sqlValue = mccTop.SetSearchSqlValue(); if (!string.IsNullOrEmpty(sqlValue)) { //InitData(sqlValue); } } } else { mSeearchMode = 2; // 假如未配置查询条件,则显示之前的下拉查询条件 label1.Visible = true; cbField.Visible = true; txtKey.Visible = true; btnCondSearch.Visible = true; if (mSystemRow["searchEnable"] + "" == "1") btnCondSearch_Click(null, null); } } /// /// 处理图片 /// /// private string HandleBmp(string sql) { string notBmpSql = 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"] + ""; notBmpSql = notBmpSql.Replace(" ", "-").Replace("-", "").Replace(", ", ",").Replace(" ,", ","); notBmpSql = notBmpSql.Replace("," + fieldName + ",", ",").Replace("," + fieldName, " "); } return sql; } /// /// 处理删除按钮 /// private void HandleDelButtonState(DataRow dr) { try { string tempCond = mDeleteCond; bool canDel = string.IsNullOrEmpty(mDeleteCond); if (!string.IsNullOrEmpty(tempCond)) { tempCond = PubClass.ReqSqlWhere(dr, PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName)); canDel = Convert.ToBoolean(Evaluator.Eval(tempCond)); } btnDelete.Enabled = canDel && mSystemRow["deleteEnable"] + "" == "1"; } catch (Exception) { } } /// /// 验证是否可以编辑行 /// /// private void HandleEditRowState(DataRow dr) { try { string tempCond = mModifyCond; bool canEdit = string.IsNullOrEmpty(mModifyCond); if (!string.IsNullOrEmpty(tempCond)) { tempCond = PubClass.ReqSqlWhere(dr, PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName)); canEdit = Convert.ToBoolean(Evaluator.Eval(tempCond)); } btnSave.Enabled = canEdit && mSystemRow["modifyEnable"] + "" == "1"; } catch (Exception) { } } /// /// 验证添加按钮权限 /// /// private void HandleAddRowState(DataRow dr) { try { string tempCond = mAddCond; bool canAdd = string.IsNullOrEmpty(mAddCond); if (!string.IsNullOrEmpty(tempCond)) { tempCond = PubClass.ReqSqlWhere(dr, PubClass.ReqSqlParam(tempCond, OperatorId, OperatorName)); canAdd = Convert.ToBoolean(Evaluator.Eval(tempCond)); } btnAdd.Enabled = canAdd && mSystemRow["addEnable"] + "" == "1"; } catch (Exception) { } } /// /// 处理表格计算 /// /// /// private void gridView_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (inSummary) return; inSummary = true; try { DataRow gvRow = gcMain.gridView.GetDataRow(e.RowHandle); foreach (DataRow row in mGridSum.Rows) { string calcExpr = row["calcExpr"] + ""; if (e.Column.FieldName != row["fieldName"] + "") { List listParam = PubClass.GetParamValue(calcExpr); foreach (string str in listParam) { string filed = str.Replace("{", "").Replace("}", ""); string filedValue = gvRow[filed] + ""; if (string.IsNullOrEmpty(filedValue)) filedValue = "0"; calcExpr = calcExpr.Replace(str, filedValue + ""); } calcExpr = calcExpr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|"); string result = Evaluator.Eval(calcExpr) + ""; gcMain.gridView.SetRowCellValue(e.RowHandle, gcMain.gridView.Columns[row["fieldName"] + ""], Math.Round(double.Parse(result), 2, MidpointRounding.AwayFromZero)); } } } catch { } inSummary = false; } /// /// 获取树选中节点 /// /// private string GetTreeCheck() { mTreeTags = string.Empty; foreach (TreeNode item in tvLeft.GetTreeView.Nodes) { GetCheckedState(item); } return mTreeTags; } /// /// 选中节点之后,选中节点的所有子节点 /// /// /// private void GetCheckedState(TreeNode currNode) { if (currNode.Checked) mTreeTags += "" + currNode.Name + ","; TreeNodeCollection nodes = currNode.Nodes; if (nodes.Count > 0) { foreach (TreeNode tn in nodes) { if (tn.Checked) mTreeTags += "'" + tn.Name + "',"; GetCheckedState(tn); } } } /// /// 执行右键菜单后刷新表格数据 /// /// /// private void gm_OnGridMenuClickRefreshData(object sender, EventArgs e) { if (string.IsNullOrEmpty(BeforeSearchSQL)) { if (mSeearchMode == 1) { string sqlValue = mccTop.SetSearchSqlValue(); if (!string.IsNullOrEmpty(sqlValue)) { InitData(sqlValue); } } else { btnCondSearch_Click(null, null); } } else { InitData(BeforeSearchSQL); } } #endregion } }