#region using System.Data; using System.Drawing; using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; #endregion namespace CSFrameworkV5.Library { /// /// 表格编辑基类窗体 /// public partial class frmBaseGridEditForm : frmBaseChild, IPrintableForm { /// /// 数据字典业务逻辑 /// protected bllBaseDataDict _BLL = new bllNullObjectDataDict(); //临时实例 protected ISummaryView _SummaryView; public frmBaseGridEditForm() { InitializeComponent(); } public virtual void DoCancel(IButtonInfo sender) { if (Msg.AskQuestion("确定要取消修改吗?")) { var dt = _SummaryView.DataSource as DataTable; dt.RejectChanges(); _SummaryView.RefreshDataSource(); } } /// /// 保存数据 /// /// public virtual void DoSave(IButtonInfo sender) { _FocusEditor.Focus(); //跳动焦点,使当前单元格的值写入数据源 if (_SummaryView.RowCount == 0) { Msg.Warning("没有数据!"); } else { if (!ValidatingData()) return; try { frmWaitingEx.ShowMe(this); var dt = _SummaryView.DataSource as DataTable; var changes = dt.GetChanges(); if (changes != null) { if (changes.Rows.Count > 0) _BLL.Update(changes); dt.AcceptChanges(); _SummaryView.RefreshDataSource(); Msg.ShowInformation("保存成功!"); } else { Msg.Warning("您没有修改数据!"); } } finally { frmWaitingEx.HideMe(this); } } } /// /// 初始化数据窗体的按钮 /// public override void InitButtons() { base.InitButtons(); Buttons.AddRange(GetPrintableButtons()); var b = new IButtonInfo[2]; b[0] = ToolbarRegister.CreateButton(ButtonNameList.btnSave, "保存", ToolBarGroup.数据操作, Globals.LoadBitmap("32_Save.png"), new Size(57, 28), true, true, DoSave); b[1] = ToolbarRegister.CreateButton(ButtonNameList.btnCancel, "取消修改", ToolBarGroup.数据操作, Globals.LoadBitmap("32_Cancel.png"), new Size(57, 28), true, true, DoCancel); Buttons.AddRange(b); } /// /// 检查输入完整性 /// /// protected virtual bool ValidatingData() { return true; } #region IPrintableForm 成员 /// /// 打印操作按钮 /// /// public IButtonInfo[] GetPrintableButtons() { var b = new IButtonInfo[1]; if (ButtonAuthorized(ButtonAuthority.PRINT)) b[0] = ToolbarRegister.CreateButton(ButtonNameList.btnPrint, "预览", ToolBarGroup.打印功能, Globals.LoadBitmap("32_Print.png"), new Size(57, 28), true, true, DoPrint); return b; } /// /// 打印报表 /// /// public virtual void DoPrint(IButtonInfo button) { } #endregion #region 控制表格主键列不能修改,新增的记录可以修改 /// /// 控制表格主键列不能修改,新增的记录可以修改 /// /// protected virtual void HandlePKColumn(GridView view) { view.FocusedColumnChanged += OnView_FocusedColumnChanged; view.FocusedRowChanged += OnView_FocusedRowChanged; view.RowCellStyle += OnView_RowCellStyle; } private void OnView_FocusedColumnChanged(object sender, FocusedColumnChangedEventArgs e) { var view = sender as GridView; view.OptionsBehavior.Editable = true; if (e.FocusedColumn == view.Columns[_BLL.KeyFieldName]) { var R = view.GetFocusedDataRow(); if (R != null) //不支持在表格内修改已保存记录主键的值,新增的记录可以修改 view.OptionsBehavior.Editable = R.RowState == DataRowState.Detached || R.RowState == DataRowState.Added; } } private void OnView_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) { var view = sender as GridView; view.OptionsBehavior.Editable = true; if (view.FocusedColumn == view.Columns[_BLL.KeyFieldName]) { var R = view.GetFocusedDataRow(); if (R != null) //不支持在表格内修改已保存记录主键的值,新增的记录可以修改 view.OptionsBehavior.Editable = R.RowState == DataRowState.Detached || R.RowState == DataRowState.Added; } } private void OnView_RowCellStyle(object sender, RowCellStyleEventArgs e) { //设置背景色 if (e.Column == (sender as GridView).Columns[_BLL.KeyFieldName]) { var R = (sender as GridView).GetFocusedDataRow(); if (R.RowState == DataRowState.Detached || R.RowState == DataRowState.Added) e.Appearance.BackColor = Color.Gainsboro; else e.Appearance.BackColor = Color.Gainsboro; } } #endregion } }