CSFrameworkV6快速开发框架 - 使用代码生成器连接 PostgreSql 数据库测试报告

CSFrameworkV6快速开发框架 - 使用代码生成器连接 PostgreSql 数据库测试报告
目录
1、运行 CSFrameworkV6.CodeGenerator.exe

2、使用代码生成器生成 主/从表界面




3、使用代码生成器生成 查询界面

4、生成的 Form 界面参考


5、生成的 Project 源码 及主从表源码

主从表界面源码参考
C# 全选
using CSFrameworkV6.Business;
using CSFrameworkV6.Common;
using CSFrameworkV6.Core;
using CSFrameworkV6.Core.Extensions;
using CSFrameworkV6.Library;
using CSFrameworkV6.Library.CommonClass;
using CSFrameworkV6.Library.Extensions;
using CSFrameworkV6.Models;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
/*===================================================================
* 程序说明: Test_Demo_INV - 业务单据窗体
* 创建日期: 2025/11/26
* 最后修改: 2025/11/26
* 作者资料: CSFramework
* 版权所有 Copyright 2006~2025, C/S框架网 (www.csframework.com)
* ----------------------------------------------------------------
* 修改记录:
* 2025/11/26: 自动生成代码
* 2025/11/26: 您的修改记录
*===================================================================*/
namespace CSFrameworkV6.TestPostgreSqlModule
{
///<summary>
/// Test_Demo_INV的资料管理窗体,界面由代码生成器(Code Generator)自动生成
/// </summary>
public partial class frm_Test_Demo_INV : frmBaseBusinessForm
{
private bll_Test_Demo_INV _BLL;//业务逻辑层对象引用
public frm_Test_Demo_INV()
{
InitializeComponent();
}
private void frm_Test_Demo_INV_Load(object sender, EventArgs e)
{
this.InitializeForm();//自定义初始化操作
}
protected override void InitializeForm()
{
_BLL = new bll_Test_Demo_INV(); //实例化业务逻辑层
_SummaryView = new DevGridView(gvSummary);//实例化表格视图,框架支持多种表格视图,如表格GridControl,树列表TreeList.
_DetailGroupControl = pcDetailEditor;//【资料编辑】页面所有文本输入框的容器
base.InitializeForm();
this.BoundLookupData(this);
frmGridCustomize.RegisterGrid(gvSummary);//注册表格组件,自动添加右键弹出菜单功能
DevStyle.SetGridControlLayout(gcSummary, false);//设置主表表格样式
DevStyle.SetSummaryGridViewLayout(gvSummary, false);//设置主表表格样式
gvSummary.DoubleClick += new EventHandler(OnGridViewDoubleClick); //绑定主表的DoubleClick事件
frmGridCustomize.RegisterGrid(gvDetail);//注册表格组件,自动添加右键弹出菜单功能
DevStyle.SetGridControlLayout(gcDetail, true);//明细表表格样式设置
DevStyle.SetDetailGridViewLayout(gvDetail);//明细表表格样式设置
gcDetail.EmbeddedNavigator.ButtonClick += new NavigatorButtonClickEventHandler(this.OnEmbeddedNavigatorButtonClick); //绑定明细表格的按钮事件
gvDetail.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(OnCellValueChanged); //绑定明细表格单元格数据修改时触发的事件
BindingSummaryNavigator(controlNavigatorSummary, gcSummary); //绑定表格导航按钮的数据源.
this.ShowSummaryPage(true); //初始化完成后显示表格页
}
public override void BoundLookupData(object sender)
{
//
//DataBinderTools绑定下拉组件数据源
//
//DataBinderTools.BoundUser(txtCreatedBy.Properties);
//
}
//修改单元格数据时触发的事件
private void OnCellValueChanged(object sender, CellValueChangedEventArgs e)
{
//开发实例:修改单元格关联更新其它列的值
//参考(frmPO/frmSO).OnCellValueChanged方法}
}
public override void DoApproval(IButtonInfo button)
{
AssertFocusedRow();
var row = (res__Demo_INV)_SummaryView.GetFocusedRow();
var docNo = row.INVNO;
if (_BLL.IsApproved(row))
{
Msg.Warning($"单据 <{docNo}> 已经审核,不可重复操作!");
}
else
{
if (Msg.AskQuestion($"确定要审核单据 <{docNo}> 吗? "))
{
_BLL.ApprovalBusiness(row); //审核单据
_SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
this.DoViewContent(null);//显示单据明细
}
}
}
public override void DoApprovalUndo(IButtonInfo button)
{
AssertFocusedRow();
var row = (res__Demo_INV)_SummaryView.GetFocusedRow();
var docNo = row.INVNO;
if (_BLL.IsApproved(row) == false)
{
Msg.Warning($"单据 <{docNo}> 没有审核,不需要反审核操作!");
}
else
{
if (Msg.AskQuestion($"确定要反审核单据 <{docNo}> 吗? "))
{
_BLL.ApprovalBusinessUndo(row); //审核单据
_SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
this.DoViewContent(null);//显示单据明细
}
}
}
public override void InitButtons()
{
base.InitButtons();
//若有扩展按钮,参考frmPO.InitButtons方法
}
/// <summary>
/// 重要!!当按钮状态改变时触发的事件
/// </summary>
/// <param name="currentState"></param>
protected override void ButtonStateChanged(UpdateType currentState)
{
bool isEditMode = (currentState == UpdateType.Add) || (currentState == UpdateType.Modify);
//设置编辑页面的文本框控件只读和可编辑状态
base.SetDetailEditorsAccessable(pcDetailEditor, isEditMode);
//设置明细表格的按钮禁用和可用状态
base.SetGridCustomButtonAccessable(gcDetail, isEditMode);
//设置明细表格的可修改状态
gvDetail.OptionsBehavior.Editable = isEditMode;
txtINVNO.Properties.ReadOnly = true;//不允许修改单号
txtCreationDate.Properties.ReadOnly = true;//禁止修改
txtCreatedBy.Properties.ReadOnly = true;//禁止修改
txtLastUpdateDate.Properties.ReadOnly = true;//禁止修改
txtLastUpdatedBy.Properties.ReadOnly = true;//禁止修改
txtFlagApp.Properties.ReadOnly = true;//禁止修改
txtAppUser.Properties.ReadOnly = true;//禁止修改
txtAppDate.Properties.ReadOnly = true;//禁止修改
lbStateName.Text = this.UpdateTypeName;
ucOpacityImage1.ShowImage(_BLL);//审核图片
}
//绑定明细表的数据源.
protected override void DoBindingDetailGrid(object dataSource)
{
gcDetail.DataSource = null;
gcDetail.DataSource = _BLL.CurrentBusiness.Details;
}
/// <summary>
/// 绑定【编辑页面】所有文本输入框的数据源
/// </summary>
/// <param name="summary">数据源</param>
protected override void DoBindingSummaryEditor(object dataSource)
{
this.DoBindingEditorPanel(pcDetailEditor, dataSource);
//在此绑定其它自定义组件的数据源,参考frmCustomer的DoBindingSummaryEditor方法
}
/// <summary>
/// 明细表格按钮事件
/// </summary>
/// <param name="sender">GridControlNavigator组件</param>
/// <param name="e">事件参数</param>
private void OnEmbeddedNavigatorButtonClick(object sender, NavigatorButtonClickEventArgs e)
{
try
{
GridControl gc = (GridControl)((GridControlNavigator)sender).Parent;
GridView gv = (GridView)gc.Views[0]; //明细表格:取GridControl第一个GridView组件.
var tag = e.Button.Tag.ToStringEx();
//新增或插入记录
if (tag == nameof(DetailButtons.Add) || tag == nameof(DetailButtons.Insert))
{
var row = new res__Demo_INVs();
if (tag == nameof(DetailButtons.Add))//增加-Add
{
gv.AddRow(row);
}
else if (tag == nameof(DetailButtons.Insert))//插入-Insert
{
gv.InsertRow(row);
}
gv.FocusedColumn = gv.VisibleColumns[0];//第1列设置焦点单元格
}
else if (tag == nameof(DetailButtons.Delete))
{
if (Msg.AskQuestion("确定要删除这条记录?"))
gv.DeleteRow(gv.FocusedRowHandle);
}
e.Handled = true;
}
catch (Exception ex)
{
LogUserOperate.Write(ex);
Msg.ShowException(ex);
}
}
public override void DoAdd(IButtonInfo sender)
{
try
{
frmWaitingEx.ShowMe(this);
_BLL.NewBusiness(); //新增业务单据,实例化_BLL.CurrentBusiness
DoBindingSummaryEditor(_BLL.DataBinder); //绑定主表文本框数据源,显示数据
this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
base.DoAdd(sender);
this.ShowDetailPage(true);
}
finally
{
frmWaitingEx.HideMe(this);
}
}
public override void DoDelete(IButtonInfo sender)
{
AssertFocusedRow();
var row = _SummaryView.GetFocusedRow() as res__Demo_INV;
//删除前逻辑判断(如记录已审核、存档或有关联数据不可删除)
if (!this.DoBeforeEditOrDelete(row)) return;
if (Msg.AskQuestion($"单据号码:{row.INVNO},确定要删除当前单据吗 ? "))
{
try
{
frmWaitingEx.ShowMe(this);
bool b = _BLL.Delete(row.INVNO); //调用删除数据接口
AssertEqual(b, true, "删除记录时发生错误!");
_SummaryView.RemoveRow(_SummaryView.FocusedRowHandle);//删除表格中当前记录
this.ShowSummaryPage(true);
}
finally
{
frmWaitingEx.HideMe(this);
}
}
}
public override void DoEdit(IButtonInfo sender)
{
this.AssertFocusedRow();
var row = (res__Demo_INV)_SummaryView.GetFocusedRow();
//删除前逻辑判断(如记录已审核、存档或有关联数据不可删除)
if (!this.DoBeforeEditOrDelete(row)) return;
base.DoEdit(sender);
}
public override void DoViewContent(IButtonInfo sender)
{
AssertFocusedRow();
string docNo = _SummaryView.GetObject<res__Demo_INV>(_SummaryView.FocusedRowHandle).INVNO;
_BLL.CurrentBusiness = _BLL.GetDataByKey(docNo);//获取当前单据
this.DoBindingSummaryEditor(_BLL.CurrentBusiness.Master); //绑定主表文本框的数据源
this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
this.ButtonStateChanged(_UpdateType);//触发按钮事件
this.ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页
}
public override void DoSave(IButtonInfo sender)// 保存数据
{
this.UpdateLastControl();//更新最后一个输入框的数据
if (!ValidatingSummaryData(_BLL.CurrentBusiness.Master)) return; //检查主表数据合法性
if (!ValidatingDetailData(_BLL.CurrentBusiness.Details)) return; //检查从表数据合法性
try
{
frmWaitingEx.ShowMe(this);
//页面数据采集:创建用于保存的临时数据
var dsTemplate = _BLL.CreateSaveData(_BLL.CurrentBusiness); //创建用于保存的临时数据
SaveResult result = _BLL.Update(dsTemplate);//调用BLL层保存数据
if (result.Success) //保存成功
{
if (_UpdateType == UpdateType.Add) _BLL.CurrentBusiness.Master.INVNO = result.DocNo; //更新单据号码
base.UpdateSummaryRow(_BLL.CurrentBusiness.Master);//刷新表格内当前记录的缓存数据.
//this.DoBindingSummaryEditor(_BLL.DataBinder); //重新绑定文本框数据源
this.DoSave_ResetState(); //最后调用基类方法重置按钮状态
this.DoViewContent(sender); //刷新数据
frmWaitingEx.HideMe(this);
if (SystemSettings.Current.ShowOperateResultMsg) Msg.ShowInformation("保存成功!");
}
else
{
Msg.Warning("保存失败!");
}
}
finally
{
frmWaitingEx.HideMe(this);
}
}
private bool DoBeforeEditOrDelete(res__Demo_INV row)
{
if (_BLL.IsOwnerChange(row, nameof(res__Demo_INV.CreatedBy)) == false)
{
Msg.Warning("您不能修改别人创建的单据!1.您不是制单人的上级 2.您没有制单人的权限!");
return false;
}
if (_BLL.IsApproved(row))
{
Msg.Warning("单据已审核,禁止操作!");
return false;
}
return true;
}
//保存前检查数据完整性
private bool ValidatingSummaryData(res__Demo_INV summary)
{
//多个输入项检查。若检查不通过,文本框右侧显示红色X图标
var isInvalid = false
//| CommonTools.IsInvalid(txtINVNO)
| CommonTools.IsInvalid(txtVerNo);
if (isInvalid) return false;
//
//其他数据检查
//
return true;
}
private bool ValidatingDetailData(List<res__Demo_INVs> detail)
{
foreach (var row in detail)
{
if (row.INVNO.IsEmpty())
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_INVNO;
Msg.Warning("单号不能为空!");
return false;
}
if (row.Queue.IsEmpty())
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_Queue;
Msg.Warning("排序不能为空!");
return false;
}
}
return true;
}
private void btnEmpty_Click(object sender, EventArgs e)
{
base.ClearContainerEditorText(pnlSearch);
}
private void btnQuery_Click(object sender, EventArgs e)
{
try
{
frmWaitingEx.ShowMe(this);
//实例化查询参数
var input = new req_Test_Demo_INV
{
INVNO=txt_INVNO.EditValue.ToStringEx(),
//ReceiveDay=txt_ReceiveDay.DateTime
};
var dt = _BLL.Query(input);//调用业务逻辑层接口
this.DoBindingSummaryGrid(dt);//绑定表格的数据源
this.ShowSummaryPage(true); //显示表格页面.
}
finally
{
frmWaitingEx.HideMe(this);
if (gvSummary.RowCount == 0) Msg.Warning("没有找到数据!");
}
}
//给明细表绑定KeyDown事件,按回车自动跳格
private void gvDetail_KeyDown(object sender, KeyEventArgs e)
{
//表格按回车键自动跳转到下一个可编辑列, 若是最后一列,自动新增一条记录
GridMovetor.OnGridViewKeyDown(gvDetail, e);
}
public override void DoShowLog(IButtonInfo button)
{
//显示审计日志
this.MainForm.OpenModuleForm(Globals.LogViewerForm, "", nameof(_Demo_INV));
}
}
}
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网





