private GridColumn CreateGridColumn(GridView gv, DataRow dr, BindingSource ds, string tablename, int index, bool isuseredit) { //******************************特别提示********************************************* //Tip:如果要在Grid中取得自定义添加的控件,例如lkp,cbx,mtxt,btxt,mlkp控件 //lkp控件:用Controls.Find()方法来查找出lkp控件 //其他类型:用GridControl.RepositoryItems集合中查找 //*********************************************************************************** GridColumn cols = new GridColumn(); string sControlType = dr["sControlType"].ToString(); switch (sControlType) { //LookUp查询 case "lkp": { if (!string.IsNullOrEmpty(dr["sLookupNo"].ToString())) { SunriseLookUp lkp = new SunriseLookUp(); lkp.Name = "collkp" + tablename + dr["sFieldName"].ToString(); lkp.DataBindings.Add("EditValue", ds, dr["sFieldName"].ToString()); this.pnlMain.Controls.Add(lkp); lkp.SendToBack(); Base.InitLookup(lkp, dr["sLookupNo"].ToString()); if (!string.IsNullOrEmpty(dr["sLookupAutoSetControl"].ToString())) { string[] sItem = Public.GetSplitString(dr["sLookupAutoSetControl"].ToString(), ","); foreach (var s in sItem) { string[] ss = Public.GetSplitString(s, "="); lkp.AutoSetValue(ss[0], ss[1]); } } RepositoryItemButtonEdit btnRepositoryItem = new RepositoryItemButtonEdit(); btnRepositoryItem.ButtonClick += lkp.LookUpSelfClick; btnRepositoryItem.TextEditStyle = TextEditStyles.DisableTextEditor; //加这句是让了焦点更新,Grid中才会显示新的数据值,其实在后台是已经存在了的,只是在Grid中没有显示出来 //此处设置为查询完成后自动跳转到Grid中的下一列中 lkp.LookUpAfterPost += new SunriseLookUp.SunriseLookUpEvent(lkp_LookUpAfterPost); cols.ColumnEdit = btnRepositoryItem; gv.GridControl.RepositoryItems.Add(btnRepositoryItem); } break; } //下拉框 case "cbx": { if (!string.IsNullOrEmpty(dr["sLookupNo"].ToString())) { RepositoryItemImageComboBox cbxRepositoryItem = new RepositoryItemImageComboBox(); cbxRepositoryItem.Name = "colcbx" + tablename + dr["sFieldName"].ToString(); Base.InitRepositoryItemComboBox(cbxRepositoryItem, dr["sLookupNo"].ToString(), dr["sFieldType"].ToString()); cols.ColumnEdit = cbxRepositoryItem; gv.GridControl.RepositoryItems.Add(cbxRepositoryItem); } break; } //带按钮的文本框 case "btxt": { RepositoryItemButtonEdit btxtRepositoryItem = new RepositoryItemButtonEdit(); btxtRepositoryItem.Name = "colbtxt" + tablename + dr["sFieldName"].ToString(); cols.ColumnEdit = btxtRepositoryItem; gv.GridControl.RepositoryItems.Add(btxtRepositoryItem); break; } //多行文本框 case "mtxt": { RepositoryItemMemoExEdit btxtRepositoryItem = new RepositoryItemMemoExEdit(); btxtRepositoryItem.Name = "colmtxt" + tablename + dr["sFieldName"].ToString(); cols.ColumnEdit = btxtRepositoryItem; gv.GridControl.RepositoryItems.Add(btxtRepositoryItem); break; } case "dett": { RepositoryItemDateEdit dettRespositoryItem = new RepositoryItemDateEdit(); dettRespositoryItem.Name = "coldett" + tablename + dr["sFieldName"].ToString(); dettRespositoryItem.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; dettRespositoryItem.DisplayFormat.FormatString = "g"; dettRespositoryItem.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime; dettRespositoryItem.EditFormat.FormatString = "g"; dettRespositoryItem.EditMask = "g"; cols.ColumnEdit = dettRespositoryItem; gv.GridControl.RepositoryItems.Add(dettRespositoryItem); break; } //MLookUp查询 case "mlkp": { if (!string.IsNullOrEmpty(dr["sLookupNo"].ToString())) { SunriseMLookUp mlkp = new SunriseMLookUp(); mlkp.Name = "colmlkp" + tablename + dr["sFieldName"].ToString(); mlkp.DataBindings.Add("EditValue", ds, dr["sFieldName"].ToString()); mlkp.IsUsedInGrid = true; Base.InitMLookup(mlkp, dr["sLookupNo"].ToString()); if (!string.IsNullOrEmpty(dr["sLookupAutoSetControl"].ToString())) { string[] sItem = Public.GetSplitString(dr["sLookupAutoSetControl"].ToString(), ","); foreach (var s in sItem) { string[] ss = Public.GetSplitString(s, "="); mlkp.AutoSetValue(ss[0], ss[1]); } } RepositoryItemPopupContainerEdit btnRepositoryItem = new RepositoryItemPopupContainerEdit(); btnRepositoryItem.Name = "gridmlkp" + tablename + dr["sFieldName"].ToString(); //原本默认的显示Popup的按钮隐藏掉 btnRepositoryItem.Buttons[0].Visible = false; btnRepositoryItem.Buttons.Add(new EditorButton(ButtonPredefines.Ellipsis)); btnRepositoryItem.ButtonClick += mlkp.LookUpSelfClick; btnRepositoryItem.TextEditStyle = TextEditStyles.Standard; btnRepositoryItem.Popup += mlkp.mlkpDataNo_Popup; btnRepositoryItem.KeyDown += mlkp.mlkpDataNo_KeyDown; btnRepositoryItem.Closed += mlkp.mlkpDataNo_Closed; gv.GridControl.PreviewKeyDown += mlkp.mlkpDataNo_PreviewKeyDown; btnRepositoryItem.PopupControl = mlkp.mlkpPopup; btnRepositoryItem.EditValueChanged += mlkp.mlkpDataNo_TextChanged; //加这句是让了焦点更新,Grid中才会显示新的数据值,其实在后台是已经存在了的,只是在Grid中没有显示出来 //此处设置为查询完成后自动跳转到Grid中的下一列中 mlkp.LookUpAfterPost += new SunriseLookUp.SunriseLookUpEvent(lkp_LookUpAfterPost); cols.ColumnEdit = btnRepositoryItem; gv.GridControl.RepositoryItems.Add(btnRepositoryItem); this.pnlMain.Controls.Add(mlkp); mlkp.SendToBack(); //pnlDynamic.Controls.Add(mlkp); //mlkp.Visible = false; } break; } } cols.Caption = LangCenter.Instance.IsDefaultLanguage ? dr["sCaption"].ToString() : dr["sEngCaption"].ToString(); cols.FieldName = dr["sFieldName"].ToString(); //Grid 列命名为col+表名+列名 cols.Name = "col" + tablename + dr["sFieldName"].ToString(); cols.Width = 120; if (dr["sColumnType"].ToString() == "002") { //检测是否有价格权限 bool HasPrice = SC.CheckAuth(SecurityOperation.Price, FormID); if (!HasPrice) return null; //设置价格数据显示格式 cols.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom; cols.DisplayFormat.FormatString = Base.FormatPrice; } else if (dr["sColumnType"].ToString() == "003") { //检测是否有数量权限 bool HasNum = SC.CheckAuth(SecurityOperation.Num, FormID); if (!HasNum) return null; //设置数量数据显示格式 cols.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom; cols.DisplayFormat.FormatString = Base.FormatQuantity; } else cols.Visible = true; //不需要权限控制的价格数量显示格式化 //无权限控制价格 if (dr["sColumnType"].ToString() == "004") { cols.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom; cols.DisplayFormat.FormatString = Base.FormatNullAuthPrice; } //无权限控制数量 else if (dr["sColumnType"].ToString() == "005") { cols.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom; cols.DisplayFormat.FormatString = Base.FormatNullAuthQuantity; } cols.VisibleIndex = index; //检测窗体字段设置中是否可编辑 //这里检测的时候是先以窗体设置中的权限优先,窗体上设置不可编辑,用户字段设置可编辑,以窗体上设置为准,不可编辑 cols.OptionsColumn.AllowEdit = Convert.ToBoolean(dr["bEdit"]); //先通过数量和价格权限检测后再设置其用户字段权限 if (Convert.ToBoolean(dr["bEdit"])) { cols.OptionsColumn.AllowEdit = isuseredit; } //Grid Footer显示 if (dr["sFooterType"].ToString() != "001") { //001 无 //002 求和 //003 计数 //004 平均值 //005 最大值 //006 最小值 cols.SummaryItem.FieldName = dr["sFieldName"].ToString(); if (dr["sFooterType"].ToString() == "002") cols.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum; else if (dr["sFooterType"].ToString() == "003") cols.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Count; else if (dr["sFooterType"].ToString() == "004") cols.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Average; else if (dr["sFooterType"].ToString() == "005") cols.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Max; else if (dr["sFooterType"].ToString() == "006") cols.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Min; //设置GridFooter汇总格式 //价格 if (dr["sColumnType"].ToString() == "002") cols.SummaryItem.DisplayFormat = Base.FormatPrice; //数量 else if (dr["sColumnType"].ToString() == "003") cols.SummaryItem.DisplayFormat = Base.FormatQuantity; //无权限控制价格 else if (dr["sColumnType"].ToString() == "004") cols.SummaryItem.DisplayFormat = Base.FormatNullAuthPrice; //无权限控制数量 else if (dr["sColumnType"].ToString() == "005") cols.SummaryItem.DisplayFormat = Base.FormatNullAuthQuantity; gv.GroupSummary.Add(DevExpress.Data.SummaryItemType.Sum, dr["sFieldName"].ToString(), cols); } //设置非空字段颜色 if (Convert.ToBoolean(dr["bSaveData"]) && Convert.ToBoolean(dr["bNotNull"])) { cols.AppearanceHeader.ForeColor = Color.FromName(Base.GetSystemParamter("001")); cols.AppearanceHeader.Options.UseForeColor = true; } return cols; }
/// <summary> /// /// </summary> /// <param name="gv"></param> /// <param name="dr"></param> /// <param name="tableName"></param> /// <param name="index"></param> /// <param name="isuseredit"></param> /// <param name="formID"></param> /// <returns></returns> public static GridColumn GridCreateColumn(Form frm, GridView gv, DataRow drConfig, string tableName, int index, bool allowEdit, int formID, object lpkBindSource, SunriseLookUp.SunriseLookUpEvent slookHandler) { GridColumn gc = new GridColumn(); string sControlType = drConfig["sControlType"].ToString(); string sFieldName = drConfig["sFieldName"].ToString(); string sLookupNo = drConfig["sLookupNo"].ToString(); string sColumnType = drConfig["sColumnType"].ToString(); #region 设置ColumnEdit switch (sControlType) { case "lkp": #region LookUp查询 if (!string.IsNullOrEmpty(sLookupNo) && lpkBindSource != null) { SunriseLookUp lkp = new SunriseLookUp(); lkp.Name = string.Format("collkp{0}{1}", tableName, sFieldName); lkp.DataBindings.Add("EditValue", lpkBindSource, sFieldName); Base.InitLookup(lkp, sLookupNo); string sLookupAutoSetControl = drConfig["sLookupAutoSetControl"].ToString(); if (!string.IsNullOrEmpty(sLookupAutoSetControl)) { string[] sItem = Public.GetSplitString(sLookupAutoSetControl, ","); foreach (var s in sItem) { string[] ss = Public.GetSplitString(s, "="); lkp.AutoSetValue(ss[0], ss[1]); } } RepositoryItemButtonEdit btnRepositoryItem = new RepositoryItemButtonEdit(); btnRepositoryItem.ButtonClick += lkp.LookUpSelfClick; btnRepositoryItem.TextEditStyle = TextEditStyles.DisableTextEditor; //加这句是让了焦点更新,Grid中才会显示新的数据值,其实在后台是已经存在了的,只是在Grid中没有显示出来 //此处设置为查询完成后自动跳转到Grid中的下一列中 if (slookHandler != null) lkp.LookUpAfterPost += slookHandler; //if (slookHandler != null) lkp.LookUpAfterPost += new SunriseLookUp.SunriseLookUpEvent(lkp_LookUpAfterPost); gc.ColumnEdit = btnRepositoryItem; gv.GridControl.RepositoryItems.Add(btnRepositoryItem); } break; #endregion case "cbx": #region 下拉框 if (!string.IsNullOrEmpty(sLookupNo)) { RepositoryItemImageComboBox cbxRepositoryItem = new RepositoryItemImageComboBox(); Base.InitRepositoryItemComboBox(cbxRepositoryItem, sLookupNo, (string)drConfig["sFieldType"]); gc.ColumnEdit = cbxRepositoryItem; gv.GridControl.RepositoryItems.Add(cbxRepositoryItem); } break; #endregion case "btxt": #region 带按钮的文本框 RepositoryItemMemoExEdit btxtRepositoryItem = new RepositoryItemMemoExEdit(); gc.ColumnEdit = btxtRepositoryItem; gv.GridControl.RepositoryItems.Add(btxtRepositoryItem); break; #endregion //modify by han #region //多行文本框 case "mtxt": RepositoryItemMemoExEdit mtxtRepositoryItem = new RepositoryItemMemoExEdit(); mtxtRepositoryItem.Name = "colmtxt" + tableName + drConfig["sFieldName"].ToString(); gc.ColumnEdit = mtxtRepositoryItem; gv.GridControl.RepositoryItems.Add(mtxtRepositoryItem); break; case "dett": RepositoryItemDateEdit dettRespositoryItem = new RepositoryItemDateEdit(); dettRespositoryItem.Name = "coldett" + tableName + drConfig["sFieldName"].ToString(); dettRespositoryItem.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; dettRespositoryItem.DisplayFormat.FormatString = "g"; dettRespositoryItem.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime; dettRespositoryItem.EditFormat.FormatString = "g"; dettRespositoryItem.EditMask = "g"; gc.ColumnEdit = dettRespositoryItem; gv.GridControl.RepositoryItems.Add(dettRespositoryItem); break; //MLookUp查询 case "mlkp": { if (!string.IsNullOrEmpty(drConfig["sLookupNo"].ToString())) { SunriseMLookUp mlkp = new SunriseMLookUp(); mlkp.Name = "colmlkp" + tableName + drConfig["sFieldName"].ToString(); mlkp.DataBindings.Add("EditValue", lpkBindSource, drConfig["sFieldName"].ToString()); mlkp.IsUsedInGrid = true; Base.InitMLookup(mlkp, drConfig["sLookupNo"].ToString()); if (!string.IsNullOrEmpty(drConfig["sLookupAutoSetControl"].ToString())) { string[] sItem = Public.GetSplitString(drConfig["sLookupAutoSetControl"].ToString(), ","); foreach (var s in sItem) { string[] ss = Public.GetSplitString(s, "="); mlkp.AutoSetValue(ss[0], ss[1]); } } RepositoryItemPopupContainerEdit btnRepositoryItem = new RepositoryItemPopupContainerEdit(); btnRepositoryItem.Name = "gridmlkp" + tableName + drConfig["sFieldName"].ToString(); //原本默认的显示Popup的按钮隐藏掉 btnRepositoryItem.Buttons[0].Visible = false; btnRepositoryItem.Buttons.Add(new EditorButton(ButtonPredefines.Ellipsis)); btnRepositoryItem.ButtonClick += mlkp.LookUpSelfClick; btnRepositoryItem.TextEditStyle = TextEditStyles.Standard; btnRepositoryItem.Popup += mlkp.mlkpDataNo_Popup; btnRepositoryItem.KeyDown += mlkp.mlkpDataNo_KeyDown; btnRepositoryItem.Closed += mlkp.mlkpDataNo_Closed; gv.GridControl.PreviewKeyDown += mlkp.mlkpDataNo_PreviewKeyDown; btnRepositoryItem.PopupControl = mlkp.mlkpPopup; btnRepositoryItem.EditValueChanged += mlkp.mlkpDataNo_TextChanged; //加这句是让了焦点更新,Grid中才会显示新的数据值,其实在后台是已经存在了的,只是在Grid中没有显示出来 //此处设置为查询完成后自动跳转到Grid中的下一列中 // mlkp.LookUpAfterPost += new SunriseLookUp.SunriseLookUpEvent(lkp_LookUpAfterPost); mlkp.LookUpAfterPost += slookHandler; gc.ColumnEdit = btnRepositoryItem; gv.GridControl.RepositoryItems.Add(btnRepositoryItem); frm.Controls.Add(mlkp); mlkp.Location = new Point(frm.Size.Height / 2, frm.Size.Width / 2); mlkp.SendToBack(); } break; } #endregion } #endregion gc.Caption = LangCenter.Instance.IsDefaultLanguage ? drConfig["sCaption"].ToString() : drConfig["sEngCaption"].ToString(); gc.FieldName = sFieldName; gc.Name = string.Format("col{0}{1}", tableName, sFieldName);//Grid 列命名为col+表名+列名 gc.Width = 120; if (sColumnType == "002" && !SC.CheckAuth(SecurityOperation.Price, formID)) return null;//检测是否有价格权限 if (sColumnType == "003" && !SC.CheckAuth(SecurityOperation.Num, formID)) return null;//检测是否有数量权限 gc.Visible = true; gc.VisibleIndex = index; #region 检测窗体字段设置中是否可编辑 //这里检测的时候是先以窗体设置中的权限优先,窗体上设置不可编辑,用户字段设置可编辑,以窗体上设置为准,不可编辑 bool bEdit = Convert.ToBoolean(drConfig["bEdit"]); //先通过数量和价格权限检测后再设置其用户字段权限 if (bEdit) bEdit = allowEdit; gc.OptionsColumn.AllowEdit = bEdit; #endregion #region Grid Footer显示 string sFooterType = (string)drConfig["sFooterType"]; gc.SummaryItem.FieldName = sFieldName; DevExpress.Data.SummaryItemType sitype = DevExpress.Data.SummaryItemType.None; if (sFooterType == "001") sitype = DevExpress.Data.SummaryItemType.None; //001 无 if (sFooterType == "002") sitype = DevExpress.Data.SummaryItemType.Sum;//002 求和 if (sFooterType == "003") sitype = DevExpress.Data.SummaryItemType.Count;//003 计数 if (sFooterType == "004") sitype = DevExpress.Data.SummaryItemType.Average;//004 平均值 if (sFooterType == "005") sitype = DevExpress.Data.SummaryItemType.Max;//005 最大值 if (sFooterType == "006") sitype = DevExpress.Data.SummaryItemType.Min;//006 最小值 gc.SummaryItem.SummaryType = sitype; if (sitype != DevExpress.Data.SummaryItemType.None) gv.GroupSummary.Add(DevExpress.Data.SummaryItemType.Sum, sFieldName, gc); #endregion //modify by han //设置非空字段颜色 if (Convert.ToBoolean(drConfig["bSaveData"]) && Convert.ToBoolean(drConfig["bNotNull"])) { gc.AppearanceHeader.ForeColor = Color.FromName(Base.GetSystemParamter("001")); gc.AppearanceHeader.Options.UseForeColor = true; } return gc; }