/// <summary> /// ComboBox 控件绑定。 /// </summary> /// <param name="ctl"></param> /// <param name="propertyName"></param> /// <param name="columnEditInfoList"></param> public void FillCombox(Control ctl, string propertyName, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> columnEditInfoList, bool mustInsertNullRow) { if (ctl is ComboBox && columnEditInfoList.ContainsKey(propertyName)) { ComboBox cob = ctl as ComboBox; cob.Items.Clear(); MB.WinBase.Common.ColumnEditCfgInfo cfgInfo = columnEditInfoList[propertyName]; if (cfgInfo.SaveLocalCache) { if (cfgInfo.DataSource == null) { return; } DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(cfgInfo.DataSource, string.Empty); DataRow[] drs = dtData.Select(); if (mustInsertNullRow || cfgInfo.InsertNullItem) { cob.Items.Add(string.Empty); } foreach (DataRow dr in drs) { cob.Items.Add(dr[cfgInfo.TextFieldName].ToString()); } } else { //以后再处理 MB.Util.TraceEx.Write("ColumnEditCfgInfo 配置成 ComboBox 必须把 SaveLocalCache 设置为True,为 False 的情况目前还没有进行处理。"); } } }
/// <summary> /// ComboBox 控件绑定(包含编码和名称的 ComboBox 绑定项) /// </summary> /// <param name="ctl"></param> /// <param name="propertyName"></param> /// <param name="columnEditInfoList"></param> public void FillComboxLookUp(Control ctl, string propertyName, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> editCfgColumns, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> columnEditInfoList, bool mustInsertNullRow) { if (ctl is ComboBox && columnEditInfoList.ContainsKey(propertyName)) { ComboBox cob = ctl as ComboBox; MB.WinBase.Common.ColumnPropertyInfo colCfg = null; if (editCfgColumns != null) { colCfg = editCfgColumns[propertyName]; } MB.WinBase.Common.ColumnEditCfgInfo cfgInfo = columnEditInfoList[propertyName]; if (cfgInfo.SaveLocalCache) { if (cfgInfo.DataSource == null) { return; } cob.DisplayMember = cfgInfo.TextFieldName; cob.ValueMember = cfgInfo.ValueFieldName; DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(cfgInfo.DataSource, string.Empty); DataTable newData = dtData.Copy(); if (mustInsertNullRow || cfgInfo.InsertNullItem) { DataRow newDr = newData.NewRow(); if (colCfg != null) { if (string.Compare(colCfg.DataType, "System.String", true) == 0) { newDr[cfgInfo.ValueFieldName] = ""; } else if (string.Compare(colCfg.DataType, "System.Int32", true) == 0 || string.Compare(colCfg.DataType, "System.Decimal", true) == 0) { newDr[cfgInfo.ValueFieldName] = 0; } } newData.Rows.InsertAt(newDr, 0); } cob.DataSource = newData.DefaultView; } else { //以后再处理 MB.Util.TraceEx.Write("ColumnEditCfgInfo 配置成 ComboBox 必须把 SaveLocalCache 设置为True,为 False 的情况目前还没有进行处理。"); } } }
private void setdatasource(DevExpress.XtraGrid.Views.Grid.GridView gridView, MB.WinBase.Common.ColumnEditCfgInfo editInfo) { if (editInfo.DataSource == null) { return; } int index = 0; if (editInfo.LookUpColumns != null && editInfo.LookUpColumns.Count > 0) { gridView1Popup.OptionsView.ShowGroupPanel = editInfo.LookUpColumns.Count > 1; gridView.Columns.Clear(); for (int i = 0; i < editInfo.LookUpColumns.Count; i++) { MB.WinBase.Common.LookUpColumnInfo cInfo = editInfo.LookUpColumns[i]; DevExpress.XtraGrid.Columns.GridColumn col = gridView.Columns.Add(); col.FieldName = cInfo.FieldName; col.Caption = cInfo.Description; col.VisibleIndex = index++; col.Width = cInfo.ShowWidth; } } else { gridView1Popup.OptionsView.ShowGroupPanel = false; DevExpress.XtraGrid.Columns.GridColumn singleCol = gridView.Columns.Add(); singleCol.FieldName = editInfo.TextFieldName; singleCol.Caption = "请选择"; singleCol.VisibleIndex = 0; singleCol.Width = 100; } _ValueFieldName = editInfo.ValueFieldName; _TextFieldName = editInfo.TextFieldName; DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(editInfo.DataSource, string.Empty); dataViewLookup = dtData.DefaultView; //下面增加不选择的列(不需要增加不选择列,按空格就可以不选择) //createNullCheckRow(dataViewLookup); //通过下拉框来进行选择的目前需要进行约束,只能接受DataSet 的数据集。 gridPopup.DataSource = dtData.DefaultView; _LookUpDatas = new Dictionary <string, string>(); for (int i = 0; i < dataViewLookup.Count; i++) { _LookUpDatas.Add(dataViewLookup[i][_ValueFieldName].ToString(), dataViewLookup[i][_TextFieldName].ToString()); } }
//绑定特殊处理的控件 private void bindingToSpecialEditCtl(Control ctl, MB.WinBase.Common.ColumnEditCfgInfo colEditCfg) { if (ctl is MB.WinBase.Ctls.ucClickButtonInput) { MB.WinBase.Ctls.ucClickButtonInput cbi = ctl as MB.WinBase.Ctls.ucClickButtonInput; cbi.ColumnEditCfgInfo = colEditCfg; } //add by aifang 增加区域编辑控件 begin if (ctl is MB.WinBase.Ctls.ucPopupRegionEdit) { MB.WinBase.Ctls.ucPopupRegionEdit regionEdit = ctl as MB.WinBase.Ctls.ucPopupRegionEdit; regionEdit.ColumnEditCfgInfo = colEditCfg; } //add by aifang 增加区域编辑控件 end }
/// <summary> /// 构造函数... /// </summary> /// <param name="editInfo"></param> public XtraRepositoryItemPopupContainerEdit(MB.WinBase.Common.ColumnEditCfgInfo editInfo, bool allowEdit) { _AllowEdit = allowEdit; this.gridView1Popup = new DevExpress.XtraGrid.Views.Grid.GridView(); this.popupContainerControl = new DevExpress.XtraEditors.PopupContainerControl(); this.gridPopup = new DevExpress.XtraGrid.GridControl(); //gridPopup this.gridPopup.EmbeddedNavigator.Name = ""; this.gridPopup.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { this.gridView1Popup }); this.gridPopup.MainView = this.gridView1Popup; this.gridPopup.BindingContextChanged += new EventHandler(gridPopup_BindingContextChanged); //this.gridPopup.BindingContextChanged += new System.EventHandler(this.gridPopup_BindingContextChanged); this.gridPopup.Dock = System.Windows.Forms.DockStyle.Fill; this.gridView1Popup.GridControl = this.gridPopup; this.gridView1Popup.OptionsBehavior.AllowIncrementalSearch = true; this.gridView1Popup.OptionsBehavior.Editable = false; this.gridView1Popup.OptionsSelection.InvertSelection = true; this.gridView1Popup.OptionsSelection.EnableAppearanceHideSelection = true; setdatasource(gridView1Popup, editInfo); this.gridView1Popup.MouseMove += new MouseEventHandler(gridView1Popup_MouseMove); this.gridView1Popup.DoubleClick += new EventHandler(gridView1Popup_DoubleClick); this.gridView1Popup.KeyDown += new KeyEventHandler(gridView1Popup_KeyDown); // popupContainerControl // this.popupContainerControl.Controls.Add(this.gridPopup); this.AutoHeight = false; this.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; // this.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { // new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); this.CloseOnOuterMouseClick = false; this.Name = "xtraRepositoryItemPopupContainerEdit"; this.PopupControl = this.popupContainerControl; this.QueryPopUp += new CancelEventHandler(XtraRepositoryItemPopupContainerEdit_QueryPopUp); this.QueryCloseUp += new CancelEventHandler(XtraRepositoryItemPopupContainerEdit_QueryCloseUp); this.QueryDisplayText += new DevExpress.XtraEditors.Controls.QueryDisplayTextEventHandler(XtraRepositoryItemPopupContainerEdit_QueryDisplayText); this.QueryResultValue += new DevExpress.XtraEditors.Controls.QueryResultValueEventHandler(XtraRepositoryItemPopupContainerEdit_QueryResultValue); }
/// <summary> /// 创建列 /// </summary> /// <param name="trvList"></param> /// <param name="colPropertys"></param> /// <param name="editCols"></param> protected virtual void CreateViewColumns(DevExpress.XtraTreeList.TreeList trvList, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> editCols, bool allowEdit) { Type entityType = typeof(T); trvList.Columns.Clear(); List <DevExpress.XtraTreeList.Columns.TreeListColumn> tCols = new List <DevExpress.XtraTreeList.Columns.TreeListColumn>(); foreach (MB.WinBase.Common.ColumnPropertyInfo colInfo in colPropertys.Values) { if (!colInfo.Visibled) { continue; } if (entityType.GetProperty(colInfo.Name) == null) { continue; } DevExpress.XtraTreeList.Columns.TreeListColumn col = new DevExpress.XtraTreeList.Columns.TreeListColumn(); //默认情况下,先把Byte[] 类型 if (editCols != null && editCols.Count > 0 && editCols.ContainsKey(colInfo.Name)) { MB.WinBase.Common.ColumnEditCfgInfo editIno = editCols[colInfo.Name]; if (editIno != null) { DevExpress.XtraEditors.Repository.RepositoryItem rItem = XtraGridEditHelper.Instance.CreateEditItemByEditInfo(editIno, colInfo.DataType); rItem.ReadOnly = !allowEdit; col.ColumnEdit = rItem; trvList.RepositoryItems.Add(rItem); } } FormatColumn(col, colInfo, colInfo.Name, allowEdit); tCols.Add(col); } trvList.Columns.AddRange(tCols.ToArray()); }
/// <summary> /// ComboCheckListBox 数据绑定。 /// </summary> /// <param name="ctl"></param> /// <param name="propertyName"></param> /// <param name="editCfgColumns"></param> /// <param name="columnEditInfoList"></param> public void FillComboCheckListBox(Control ctl, string propertyName, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> editCfgColumns, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> columnEditInfoList) { bool check = ctl is MB.WinBase.Ctls.ucComboCheckedListBox && columnEditInfoList.ContainsKey(propertyName); if (!check) { return; } MB.WinBase.Ctls.ucComboCheckedListBox cob = ctl as MB.WinBase.Ctls.ucComboCheckedListBox; MB.WinBase.Common.ColumnPropertyInfo colCfg = null; if (editCfgColumns != null) { colCfg = editCfgColumns[propertyName]; } MB.WinBase.Common.ColumnEditCfgInfo cfgInfo = columnEditInfoList[propertyName]; if (cfgInfo.SaveLocalCache) { if (cfgInfo.DataSource == null) { return; } cob.DisplayMember = cfgInfo.TextFieldName; cob.ValueMember = cfgInfo.ValueFieldName; DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(cfgInfo.DataSource, string.Empty); cob.DataSource = dtData; } else { //以后再处理 MB.Util.TraceEx.Write("ColumnEditCfgInfo 配置成 ucComboCheckedListBox 必须把 SaveLocalCache 设置为True,为 False 的情况目前还没有进行处理。"); } }
/// <summary> /// 创建LookUP 编辑项 /// </summary> /// <param name="lookUpItem"></param> /// <param name="editInfo"></param> public void CreateLookUpEditItems(DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit lookUpItem, MB.WinBase.Common.ColumnEditCfgInfo editInfo, string colDataType) { if (editInfo.DataSource == null) { return; } ; DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(editInfo.DataSource, string.Empty); if (dtData == null) { return; } //Copy一个新的DataTable作为数据源,这样就不影响原来的数据源 DataTable newData = dtData.Copy(); DevExpress.XtraEditors.Controls.LookUpColumnInfo[] lookUpCols = null; if (editInfo.LookUpColumns != null && editInfo.LookUpColumns.Count > 0) { lookUpCols = new DevExpress.XtraEditors.Controls.LookUpColumnInfo[editInfo.LookUpColumns.Count]; for (int i = 0; i < editInfo.LookUpColumns.Count; i++) { MB.WinBase.Common.LookUpColumnInfo cInfo = editInfo.LookUpColumns[i] as MB.WinBase.Common.LookUpColumnInfo; lookUpCols[i] = new DevExpress.XtraEditors.Controls.LookUpColumnInfo(cInfo.FieldName, cInfo.Description, cInfo.ShowWidth, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Near); } } else { lookUpCols = new DevExpress.XtraEditors.Controls.LookUpColumnInfo[] { new DevExpress.XtraEditors.Controls.LookUpColumnInfo(editInfo.TextFieldName, "请选择", 38, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Near) }; lookUpItem.ShowHeader = false; } lookUpItem.AutoHeight = true; lookUpItem.NullText = ""; lookUpItem.PopupSizeable = true; lookUpItem.ShowLines = true; lookUpItem.ShowPopupShadow = true; lookUpItem.Columns.AddRange(lookUpCols); lookUpItem.ValueMember = editInfo.ValueFieldName; lookUpItem.DisplayMember = editInfo.TextFieldName; //lookUpItem.ReadOnly = true; // lookUpItem.DropDownRows = 12; lookUpItem.PopupWidth = 100; //第二个判断是为了支持向下兼容的API,因为以前的API中是不会穿入colDataType的,在向下兼容的接口中传入默认值 //XtraGridEditHelper.COL_UNKNOW_DATE_TYPE_FOR_CREATING,在这种情况下,不支持空值 if (editInfo.InsertNullItem && string.Compare(colDataType, XtraGridEditHelper.COL_UNKNOW_DATE_TYPE_FOR_CREATING) != 0) { DataRow emptyRow = newData.NewRow(); if (colDataType.IndexOf('?') >= 0) { emptyRow[editInfo.ValueFieldName] = null; } if (string.Compare(colDataType, "System.String", true) == 0) { emptyRow[editInfo.ValueFieldName] = string.Empty; } else if (string.Compare(colDataType, "System.Int32", true) == 0 || string.Compare(colDataType, "System.Decimal", true) == 0) { emptyRow[editInfo.ValueFieldName] = 0; } newData.Rows.InsertAt(emptyRow, 0); lookUpItem.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; } else { lookUpItem.AllowNullInput = DevExpress.Utils.DefaultBoolean.False; } lookUpItem.DataSource = newData.DefaultView; }
/// <summary> /// 创建 Xtra Grid 的column。 /// /// </summary> /// <param name="grdCtl"></param> /// <param name="dataSource"></param> /// <param name="colPropertys"></param> /// <param name="repositoryPicEdit"></param> /// <param name="editCols"></param> public void CreateViewColumns(DevExpress.XtraGrid.GridControl xtraGrid, object dataSource, Dictionary<string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys, object repositoryPicEdit, Dictionary<string, MB.WinBase.Common.ColumnEditCfgInfo> editCols, MB.WinBase.Common.GridViewLayoutInfo gridViewLayoutInfo) { DevExpress.XtraGrid.Views.Grid.GridView gridView = xtraGrid.MainView as DevExpress.XtraGrid.Views.Grid.GridView; bool isPic = (repositoryPicEdit != null && string.Compare(repositoryPicEdit.GetType().Name, "RepositoryItemPictureEdit", true) == 0); if (gridView.Columns.Count > 0) { gridView.Columns.Clear(); if(xtraGrid is GridControlEx) { var gridControlEx=xtraGrid as GridControlEx; gridControlEx.OnDefaultViewColumnsCleared(); } } SetGridView(gridView, colPropertys); //先清空原先的设置信息,第一个为默认创建的 if (xtraGrid.RepositoryItems.Count > 1) { for (int i = 1; i < xtraGrid.RepositoryItems.Count; i++) { xtraGrid.RepositoryItems.RemoveAt(i); } } foreach (MB.WinBase.Common.ColumnPropertyInfo colInfo in colPropertys.Values) { if (!colInfo.Visibled) continue; if (dataSource != null) { IList lstData = dataSource as IList; if (lstData != null) { if (lstData.Count > 0) { object entity = lstData[0]; //虽然是IList但是这个LIST里面其实是DataSet if (entity is DataRowView) { DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(dataSource, string.Empty); if (dtData != null) { if (!dtData.Columns.Contains(colInfo.Name)) continue; } } else if (!MB.Util.MyReflection.Instance.CheckObjectExistsProperty(entity, colInfo.Name)) continue; } } else { DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(dataSource, string.Empty); if (dtData != null) { if (!dtData.Columns.Contains(colInfo.Name)) continue; } } } DevExpress.XtraGrid.Columns.GridColumn col = gridView.Columns.Add(); //默认情况下,先把Byte[] 类型 if (string.Compare(colInfo.DataType, "System.Byte[]", true) == 0) { col.ColumnEdit = repositoryPicEdit as DevExpress.XtraEditors.Repository.RepositoryItem; } else if (string.Compare(colInfo.DataType, "System.DateTime", true) == 0 || string.Compare(colInfo.DataType, "System.DateTime?", true) == 0) { DevExpress.XtraEditors.Repository.RepositoryItemDateEdit dateItem = new DevExpress.XtraEditors.Repository.RepositoryItemDateEdit(); dateItem.NullDate = DateTime.MinValue; dateItem.NullText = string.Empty; col.ColumnEdit = dateItem as DevExpress.XtraEditors.Repository.RepositoryItem; } else { if (editCols != null && editCols.Count > 0 && editCols.ContainsKey(colInfo.Name)) { MB.WinBase.Common.ColumnEditCfgInfo editIno = editCols[colInfo.Name]; if (editIno != null) { DevExpress.XtraEditors.Repository.RepositoryItem rItem = XtraGridEditHelper.Instance.CreateEditItemByEditInfo(editIno, colInfo.DataType); //设置它们的编辑项为只读的状态。这点很重要,因为创建可编辑的网格控件是通过 XtraGridEditHelper 来创建的。 //这里它只能是只读的。 rItem.ReadOnly = true; // rItem.AllowFocused = true; col.ColumnEdit = rItem; xtraGrid.RepositoryItems.Add(rItem); } } } SetColumn(col, colInfo); if (gridViewLayoutInfo != null && gridViewLayoutInfo.GridLayoutColumns != null) { var layoutInfo = gridViewLayoutInfo.GridLayoutColumns.FirstOrDefault<MB.WinBase.Common.GridColumnLayoutInfo>(o => o.Name == colInfo.Name); if (layoutInfo != null) { XtraGridViewHelper.Instance.SetColumnDisplayFormat(col, colInfo, layoutInfo); } } } if (colPropertys != null) { SetGroupSummary(gridView, colPropertys); } }
/// <summary> /// /// </summary> /// <param name="columnEditCfgInfo"></param> public XtraRepositoryItemClickButtonEdit(MB.WinBase.Common.ColumnEditCfgInfo columnEditCfgInfo) { _ColumnEditCfgInfo = columnEditCfgInfo; }