/// <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);
        }
Example #6
0
        /// <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);
            }
        }
Example #10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="columnEditCfgInfo"></param>
 public XtraRepositoryItemClickButtonEdit(MB.WinBase.Common.ColumnEditCfgInfo columnEditCfgInfo)
 {
     _ColumnEditCfgInfo = columnEditCfgInfo;
 }