using System; using System.Data; using DevExpress.XtraBars; using DevExpress.XtraBars.ToolbarForm; using DeviceRepair.Models; using DeviceRepairAndOptimization.Biz; using DeviceRepairAndOptimization.Common; using System.Collections.Generic; using System.Linq; using System.Drawing; using System.Windows.Forms; using DevExpress.XtraEditors; namespace DeviceRepairAndOptimization.Pages.CustomField { public partial class pageFieldCode : ToolbarForm { /// /// 窗口标题 /// public string Caption = "字段配置"; /// /// 当前字段编码 /// public string FieldCode = ""; /// /// 筛选条件 /// public string FilterString = ""; List CurrentDatas; int m_SelectedCurrentRowIndex = 0; FieldsInfo CurrentFieldInfo; List _FieldsTypeCollect; public List FieldsTypeCollect { get { if (_FieldsTypeCollect == null) _FieldsTypeCollect = new List() { new { TypeValue = "NVarChar", Name = "文本值" }, new { TypeValue = "double", Name = "数值" }, new { TypeValue = "decimal", Name = "货币" } }; return _FieldsTypeCollect; } } Dictionary _UserMapping; Dictionary UserMapping { get { if (_UserMapping == null) { try { APIResponseData apiResponseData = UserManager.Instance.GetUserMapping(); if (!apiResponseData.IsSuccess) throw new Exception(apiResponseData.Message); _UserMapping = apiResponseData.ToDeserializeObject>(); } catch (Exception ex) { XtraMessageBoxHelper.Error(ex.Message); } } return _UserMapping; } } public pageFieldCode(string Code, string DisPlayTitle = "字段配置") { InitializeComponent(); FieldCode = Code; Caption = $"字段配置 - {DisPlayTitle}"; this.Load += PageFieldCode_Load; } private void PageFieldCode_Load(object sender, EventArgs e) { Text = Caption; GridViewInitialize(gridView1); InitializeGridDatas(); gridView1.OptionsMenu.EnableColumnMenu = false; gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect; gridView1.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.False; gridView1.CustomDrawColumnHeader += GridView1_CustomDrawColumnHeader; gridView1.RowCellClick += GridView1_RowCellClick; gridView1.CustomDrawRowIndicator += GridView1_CustomDrawRowIndicator; gridView1.RowStyle += (sd, ee) => { DevExpress.XtraGrid.Views.Grid.GridView view = sd as DevExpress.XtraGrid.Views.Grid.GridView; if (ee.RowHandle >= 0) { FieldsInfo item = view.GetRow(ee.RowHandle) as FieldsInfo; if (!item.Status) ee.Appearance.BackColor = Color.FromArgb(255, 126, 126); } }; } /// /// 自增长行号 /// /// /// private void GridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) { if (e.Info.IsRowIndicator && e.RowHandle >= 0) { e.Info.DisplayText = (e.RowHandle + 1).ToString(); e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; e.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; } } /// /// 行选择模式,且全部只读 /// /// void GridViewInitialize(DevExpress.XtraGrid.Views.Grid.GridView view) { view.OptionsBehavior.Editable = false; view.OptionsBehavior.ReadOnly = true; view.OptionsSelection.EnableAppearanceFocusedCell = false; view.OptionsScrollAnnotations.ShowSelectedRows = DevExpress.Utils.DefaultBoolean.False; foreach (DevExpress.XtraGrid.Columns.GridColumn item in view.Columns) { item.OptionsColumn.AllowEdit = false; item.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.True; item.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; item.OptionsColumn.AllowShowHide = false; } } private void GridView1_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) { if (e.Column != null && e.Column.Caption == "Selection") e.Info.Caption = "选择"; } private void GridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { if (e.Button == MouseButtons.Right) { e.Handled = true; return; } if (e.Column.Caption == "Selection") { if (this.m_SelectedCurrentRowIndex == e.RowHandle && this.gridView1.IsRowSelected(e.RowHandle)) this.gridView1.UnselectRow(e.RowHandle); } } /// /// 新增 /// /// /// private void barButtonItem3_ItemClick(object sender, ItemClickEventArgs e) { try { string RoleCode = ""; RoleCode = $"BIZ_FIELD_{FieldCode.ToUpper()}_ADD"; if (!GlobalInfo.HasRole(RoleCode)) { throw new Exception($"当前账号缺少此操作的权限"); } pageFieldEdit view = new pageFieldEdit(FieldCode); DialogResult Dr = view.ShowDialog(); if (Dr == DialogResult.OK) { InitializeGridDatas(); } else if (Dr == DialogResult.Abort) { throw new Exception(view.ErrorMsg); } else { InitializeGridDatas(); } } catch (Exception ex) { XtraMessageBoxHelper.Error(ex.Message); } } /// /// 数据加载 /// void InitializeGridDatas() { try { splashScreenManager1.ShowWaitForm(); APIResponseData apiResponseData = FieldsManager.Instance.GetQuery(FieldCode); if (!apiResponseData.IsSuccess) throw new Exception(apiResponseData.Message); CurrentDatas = apiResponseData.ToDeserializeObject>(); foreach (var item in CurrentDatas) { item.FieldTypeCaption = FieldsTypeCollect.FirstOrDefault(x => x.TypeValue == item.FieldType).Name; item.StatusText = item.Status ? "启用" : "停用"; item.CreatorName = UserMapping[item.CreatBy]; if (item.ModifyBy.HasValue) item.ModifierName = UserMapping[item.ModifyBy.Value]; } gridControl1.DataSource = gridControl1.DataSource = CurrentDatas.Where(x => x.FieldText.Contains(FilterString) || x.FieldValue.Contains(FilterString)).ToList(); gridView1.BestFitColumns(); splashScreenManager1.TryCloseWait(); } catch (Exception ex) { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(ex.Message); } } /// /// 获取选择的目标,并且更改状态按钮的图 /// /// /// private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { try { if (e.FocusedRowHandle >= 0) { m_SelectedCurrentRowIndex = e.FocusedRowHandle; CurrentFieldInfo = gridView1.GetRow(e.FocusedRowHandle) as FieldsInfo; #region 修改选定状态 if (gridView1.SelectedRowsCount > 0) { for (int i = 0; i < this.gridView1.RowCount; i++) { if (this.gridView1.IsRowSelected(i) && this.gridView1.FocusedRowHandle.ToString().Equals(i.ToString()) == false) { this.gridView1.UnselectRow(i); } } } this.gridView1.SelectRow(e.FocusedRowHandle); #endregion #region 修改按钮图片 if (CurrentFieldInfo != null && CurrentFieldInfo.Status) { bar_btn_StatusChange.Caption = "字段禁用"; bar_btn_StatusChange.ImageOptions.Image = Properties.Resources.LOCK; } else { bar_btn_StatusChange.Caption = "字段启用"; bar_btn_StatusChange.ImageOptions.Image = Properties.Resources.UNLOCK; } #endregion } else { CurrentFieldInfo = null; } } catch (Exception ex) { XtraMessageBoxHelper.Error(ex.Message); } } #region 搜索 private void repositoryItemButtonEdit1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; gridControl1.DataSource = CurrentDatas.Where(x => x.FieldText.Contains(FilterString) || x.FieldValue.Contains(FilterString)).ToList(); gridView1.BestFitColumns(); } private void bar_btn_Search_ItemClick(object sender, ItemClickEventArgs e) { gridControl1.DataSource = CurrentDatas.Where(x => x.FieldText.Contains(FilterString) || x.FieldValue.Contains(FilterString)).ToList(); gridView1.BestFitColumns(); } private void repositoryItemTextEdit4_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; bar_btn_Search.PerformClick(); } private void repositoryItemTextEdit4_KeyUp(object sender, KeyEventArgs e) { FilterString = (sender as TextEdit).EditValue.ToString().Trim(); } #endregion #region 修改状态 /// /// 修改状态 /// /// /// private void bar_btn_StatusChange_ItemClick(object sender, ItemClickEventArgs e) { try { if (CurrentFieldInfo == null) throw new Exception("请选择字段所在行!"); string RoleCode = $"BIZ_FIELD_{FieldCode.ToUpper()}_EDIT"; if (!GlobalInfo.HasRole(RoleCode)) { throw new Exception($"当前账号缺少此操作的权限"); } if (XtraMessageBoxHelper.AskYesNo($"确认{(CurrentFieldInfo.Status ? "停用" : "启用")}字段{CurrentFieldInfo.FieldText} - {CurrentFieldInfo.FieldValue}?") == DialogResult.Yes) { XtraInputBoxArgs args = new XtraInputBoxArgs { Prompt = "原因录入:", Caption = $"请录入字段{(CurrentFieldInfo.Status ? "停用" : "启用")}原因", DefaultResponse = "" }; args.Buttons = new DialogResult[] { DialogResult.OK, DialogResult.Cancel }; args.DefaultButtonIndex = (int)DialogResult.Cancel; // 声明默认返回值 DialogResult DiaResult = DialogResult.None; args.Showing += (a, b) => { //选中ok按钮,将返回值变量改变为ok。 b.Buttons[DialogResult.OK].Click += (c, d) => { DiaResult = DialogResult.OK; }; }; getRemark: DiaResult = DialogResult.None; // 显示对话框 var Description = XtraInputBox.Show(args); string DescriptionValue = Description + ""; // 判断点击的按钮 if (DiaResult == DialogResult.None) return; if (string.IsNullOrWhiteSpace(DescriptionValue)) { if (XtraMessageBoxHelper.AskYesNo("原因不能为空,是否继续操作?") == DialogResult.Yes) goto getRemark; return; } if (DescriptionValue.Length >= 3800) { if (XtraMessageBoxHelper.AskYesNo("原因描述超出长度,最大长度为200!") == DialogResult.Yes) goto getRemark; return; } bool BeStatus = !CurrentFieldInfo.Status; APIResponseData apiResponseData = FieldsManager.Instance.ChangeStatus(CurrentFieldInfo.AutoID, BeStatus, DescriptionValue); if (!apiResponseData.IsSuccess) throw new Exception(apiResponseData.Message); InitializeGridDatas(); gridView1.RefreshData(); gridView1.FocusedRowHandle = m_SelectedCurrentRowIndex > 0 ? 0 : m_SelectedCurrentRowIndex + 1; XtraMessageBoxHelper.Info("操作成功!"); } } catch (Exception ex) { XtraMessageBoxHelper.Error(ex.Message); } } #endregion /// /// 修改 /// /// /// private void barButtonItem4_ItemClick(object sender, ItemClickEventArgs e) { try { if (CurrentFieldInfo == null) throw new Exception("请选择字段所在行!"); string RoleCode = $"BIZ_FIELD_{FieldCode.ToUpper()}_EDIT"; if (!GlobalInfo.HasRole(RoleCode)) { throw new Exception($"当前账号缺少此操作的权限"); } if (!CurrentFieldInfo.Status) { throw new Exception($"停用的数据不允许更改!"); } pageFieldEdit view = new pageFieldEdit(FieldCode, CurrentFieldInfo); DialogResult Dr = view.ShowDialog(); if (Dr == DialogResult.OK) { InitializeGridDatas(); } else if (Dr == DialogResult.Abort) { throw new Exception(view.ErrorMsg); } } catch (Exception ex) { XtraMessageBoxHelper.Error(ex.Message); } } } }