#region
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using CSFrameworkV5.Common;
using CSFrameworkV5.Core;
using CSFrameworkV5.Language;
using DevExpress.Utils;
using DevExpress.XtraGrid.Views.Grid;
#endregion
///*************************************************************************/
///*
///* 文件名 :frmBaseDataForm.cs
///* 程序说明 : 支持数据操作功能的窗体基类
///* 这个类很重要!定义数据操作的几个常用方法:增/删/改/查/保存/取消
///* 实现IDataOperatable及IPrintableForm接口
///* 原创作者 :www.csframework.com
///*
///* Copyright 2006-2021 C/S框架网 www.csframework.com
///* Creation: 2021-12-27
///**************************************************************************/
namespace CSFrameworkV5.Library
{
///
/// 支持数据操作功能的窗体基类.
///
public partial class frmBaseEditorQuery : frmBaseChild,
IDataOperatableBase,
IPrintableForm,
IEditorQueryForm
{
public frmBaseEditorQuery()
{
InitializeComponent();
}
///
/// 获取Summary表的数据源.
///
protected DataTable SummaryTable
{
get
{
if (_SummaryView == null) return null;
return (DataTable)_SummaryView.DataSource;
}
}
///
/// 数据操作按钮组
///
///
public virtual IButtonInfo[] GetDataOperatableButtons()
{
var list = new List();
if (ButtonAuthorized(ButtonAuthority.ADD))
list.Add(ToolbarRegister.CreateButton(ButtonNameList.btnAdd,
LanLib.Get("新增"), ToolBarGroup.数据操作,
Globals.LoadBitmap("32_Add.png"), new Size(57, 28), false,
true, DoAdd));
if (ButtonAuthorized(ButtonAuthority.DELETE))
list.Add(ToolbarRegister.CreateButton(ButtonNameList.btnDelete,
LanLib.Get("删除"), ToolBarGroup.数据操作,
Globals.LoadBitmap("32_Del.png"), new Size(57, 28), false,
true, DoDelete));
if (ButtonAuthorized(ButtonAuthority.EDIT))
list.Add(ToolbarRegister.CreateButton(ButtonNameList.btnEdit,
LanLib.Get("修改"), ToolBarGroup.数据操作,
Globals.LoadBitmap("32_Edit.png"), new Size(57, 28), false,
true, DoEdit));
if (ButtonAuthorized(ButtonAuthority.VIEW))
list.Add(ToolbarRegister.CreateButton(ButtonNameList.btnView,
LanLib.Get("查看"), ToolBarGroup.数据操作,
Globals.LoadBitmap("32_View.png"), new Size(57, 28), true,
true, DoViewContent));
return list.ToArray();
}
///
/// 更新当前操作的缓存记录(主表表格中当前记录)
///
/// 查询表格中的当前记录
/// 操作状态
public virtual void UpdateSummaryRow(DataRow summary,
UpdateType updateType)
{
try
{
if (summary == null) return;
//容错性:若主表表格未初始化数据源,取当前修改的数据作为数据源
if (_SummaryView.DataSource == null)
_SummaryView.DataSource = summary.Table.Clone();
var dt = (DataTable)_SummaryView.DataSource;
//如果是新增后保存,在表格内插入一条记录.
if (updateType == UpdateType.Add)
{
var newrow = dt.NewRow(); //表格的数据源增加一条记录
DataConverter.ReplaceDataRowChanges(summary, newrow); //替换数据
dt.Rows.Add(newrow);
_SummaryView.RefreshDataSource(); //刷新数据源
//取记录的序号
if (_SummaryView.View is GridView)
{
//定位当前记录
var i = (_SummaryView.View as GridView).GetRowHandle(
dt.Rows.IndexOf(newrow));
_SummaryView.FocusedRowHandle = i;
}
else //定位最后一条记录
{
_SummaryView.FocusedRowHandle = dt.Rows.Count - 1;
}
dt.AcceptChanges();
}
//如果是修改后保存,将最新数据替换当前记录的数据.
if (updateType == UpdateType.Modify ||
updateType == UpdateType.None)
{
var focusedRowHandle = _SummaryView.FocusedRowHandle;
var dr = _SummaryView.GetDataRow(focusedRowHandle);
DataConverter.ReplaceDataRowChanges(summary, dr); //替换数据
dr.Table.AcceptChanges();
_SummaryView.RefreshRow(
focusedRowHandle); //修改或新增要刷新Grid数据
}
}
catch (Exception ex)
{
LogUserOperate.Write(ex);
Msg.ShowException(ex);
}
}
///
/// 打印操作按钮组
///
///
public IButtonInfo[] GetPrintableButtons()
{
var list = new List();
//打印
if (ButtonAuthorized(ButtonAuthority.PRINT))
{
var btnPrint = ToolbarRegister.CreateButton("btnPrint",
LanLib.Get("打印"),
ToolBarGroup.打印功能, Globals.LoadBitmap("32_Print.png"),
new Size(57, 28), true, true, DoPrint);
list.Add(btnPrint);
}
return list.ToArray();
}
///
/// 检查是否有选择一条记录.
///
protected void AssertFocusedRow()
{
var ret = _SummaryView == null ||
_SummaryView.IsValidRowHandle(_SummaryView
.FocusedRowHandle) == false;
if (ret) throw new Exception("您没有选择记录,操作取消!");
}
///
/// 检查按钮的权限
///
/// 权限值
///
public override bool ButtonAuthorized(int authorityValue)
{
//超级用户拥有所有权限
//窗体可用权限=2^n= 1+2+4=7
//比如新增功能点是2,那么检查新增按钮的方法是: 2 & 7 = 2,表示有权限。
//
var isAuth = Loginer.CurrentUser.IsAdmin() ||
(authorityValue & FormAuthorities) == authorityValue;
return isAuth;
}
///
/// 删除表格内指定行号的记录
///
///
protected virtual void DeleteSummaryRow(int rowHandle)
{
if (rowHandle >= 0)
if (_SummaryView.DataSource is DataTable)
{
var dt = (DataTable)_SummaryView.DataSource;
dt.Rows.Remove(_SummaryView.GetDataRow(rowHandle));
}
}
///
/// 给表格绑定数据
///
///
protected void DoBindingSummaryGrid(DataTable dataSource)
{
if (_SummaryView != null)
{
_SummaryView.DataSource = null;
_SummaryView.DataSource = dataSource;
}
}
///
/// 关窗体中...
///
///
///
private void frmBaseDataForm_FormClosing(object sender,
FormClosingEventArgs e)
{
//
}
private void frmBaseDataForm_Load(object sender, EventArgs e)
{
//
}
///
/// 获取指定的资料行
///
protected DataRow GetDataRow(int rowIndex)
{
if (rowIndex < 0) return null;
if (SummaryTable != null) return SummaryTable.Rows[rowIndex];
return null;
}
///
/// 获取当前光标所在的资料行.
///
protected DataRow GetFocusedRow()
{
if (_SummaryView.FocusedRowHandle < 0) return null;
if (_SummaryView.DataSource is DataTable)
return _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);
return null;
}
///
/// 表格是否有数据
///
///
public virtual bool HasData()
{
if (_SummaryView != null) return _SummaryView.RowCount > 0;
return false;
}
protected void HidePageHeader(bool isHide = true)
{
if (isHide)
tcBusiness.ShowTabHeader = DefaultBoolean.False;
else
tcBusiness.ShowTabHeader = DefaultBoolean.True;
}
///
/// 初始化数据窗体的按钮
///
public override void InitButtons()
{
base.InitButtons();
var dataButton = GetDataOperatableButtons(); //数据操作按钮
var printButton = GetPrintableButtons(); //打印按钮
Buttons.AddRange(dataButton);
Buttons.AddRange(printButton);
}
///
/// 自定义初始化窗体操作, 窗体的Load事件必须调用此方法
///
protected virtual void InitializeForm() //此方法由基类的Load事件调用
{
InitButtons(); //初始化本窗体的按钮
}
///
/// 双击表格事件
///
protected virtual void OnGridViewDoubleClick(object sender, EventArgs e)
{
try
{
if (!HasData()) return;
var btn = _buttons.GetButtonByName("btnEdit");
//双击表格进入修改状态
if (SystemSettings.Current.DoubleClickEditMode)
{
if (ButtonAuthorized(ButtonAuthority.EDIT)) //当前用户有修改权限
DoEdit(btn); //调用修改方法
}
else //进入查看状态
{
DoViewContent(btn);
}
}
catch
{
}
}
///
/// 替换记录对应字段的数据。
///
/// 数据源
/// 需要替换的记录
protected void ReplaceDataRowChanges(DataRow sourceRow, DataRow destRow)
{
string fieldName;
//循环处理当前记录的所有字段
for (var i = 0; i <= sourceRow.Table.Columns.Count - 1; i++)
{
fieldName = sourceRow.Table.Columns[i].ColumnName;
//如果字段名相同,替换对应字段的数据。
if (destRow.Table.Columns.IndexOf(fieldName) >= 0)
destRow[fieldName] = sourceRow[fieldName];
}
}
public override void SetLanguage()
{
base.SetLanguage();
Buttons.GetButtonByName("btnPrint").Caption = LanLib.Get("打印");
Buttons.GetButtonByName("btnPreview").Caption = LanLib.Get("预览");
Buttons.GetButtonByName("btnView").Caption = LanLib.Get("查看");
Buttons.GetButtonByName("btnAdd").Caption = LanLib.Get("新增");
Buttons.GetButtonByName("btnDelete").Caption = LanLib.Get("删除");
Buttons.GetButtonByName("btnEdit").Caption = LanLib.Get("修改");
Buttons.GetButtonByName("btnSave").Caption = LanLib.Get("保存");
Buttons.GetButtonByName("btnCancel").Caption = LanLib.Get("取消");
tpSummary.Text = LanLib.Get("数据查询");
}
#region 成员变量
///
/// 主表的数据表格对象,必须由派生类指定表格类型。
/// 因Dev GridControl组件不可继承所以子类窗体Load的时候需要赋值.
///
protected ISummaryView _SummaryView;
public ISummaryView SummaryView => _SummaryView;
///
/// 是否允许用户操作数据
///
protected bool _AllowDataOperate = true;
#endregion
#region DoXXX 成员
///
/// 打印报表
///
///
public virtual void DoPrint(IButtonInfo button)
{
//Msg.ShowInformation("没有实现打印功能!");
Msg.Warning("没有实现打印功能,请参考【销售订单】界面的打印功能!");
}
///
/// 查看选中记录的数据
///
///
public virtual void DoViewContent(IButtonInfo sender)
{
//
}
///
/// 新增记录
///
///
public virtual void DoAdd(IButtonInfo sender)
{
//
}
///
/// 修改数据
///
///
public virtual void DoEdit(IButtonInfo sender)
{
//
}
///
/// 删除记录
///
///
public virtual void DoDelete(IButtonInfo sender)
{
}
#endregion
}
}