在查询窗口文已经提及过解决方案配置,创建布局窗口以及前后端搭建。这里我们再将CRUD功能模块补充完整,用YY00G020物料编码信息维护来展示。
一、窗口和系统页面展示
二、代码
前端:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace YM
{
public partial class FormYM00LG020 : EF.EFForm
{
#region 变量定义
private string curr_part_name; //新增定义全局变量(分区代码):
private int totalPageCount = 0;//总页数
private int currentPage = 0;//当前页
#endregion
private DataSet dt_ymac02 = new DataSet();
private BindingSource ds_ymac02 = new BindingSource();
public FormYM00LG020()
{
InitializeComponent();
}
#region Load事件
private void FormYM00LG020_Load(object sender, EventArgs e)
{
curr_part_name = this.ef_args.formPartition;
EF.Utility.SetGridColumn(new EF.EFDevGrid[] { this.efDevGrid1 }, new string[] { "YM00020_INQ" }, curr_part_name);
String sqlStr = "SELECT STOCK_NO,STOCK_NAME FROM TYM00LG002 ORDER BY STOCK_NO ";
EI.EIInfo outBlock = EF.Utility.ExecQueryPart(curr_part_name, sqlStr);
YMUtility.DEV_Init_grid2(efDevGrid1, "1");
this.efDevGrid1.ShowSelectionColumn = true;
this.efDevGrid1.ShowAddCopyRowButton = true;
dt_ymac02 = EF.Utility.GetCustomGridValue(efDevGrid1);
dt_ymac02.Tables[0].TableName = "TYM00020";
ds_ymac02.DataMember = "TYM00020";
ds_ymac02.DataSource = dt_ymac02;
efDevGrid1.DataSource = ds_ymac02;
currentPage = 1;
query_data(0, this.efDevGrid1.PageSize);
}
#endregion
#region F2查询事件
private void FormYM00LG020_EF_DO_F2(object sender, EF.EF_Args e)
{
currentPage = 1;
query_data(0, this.efDevGrid1.PageSize);
}
#endregion
#region F3新增
private void FormYM00LG020_EF_DO_F3(object sender, EF.EF_Args e)
{
gridView1.AddNewRow();
}
#endregion
#region F4删除
private void FormYM00LG020_EF_DO_F4(object sender, EF.EF_Args e)
{
if (this.gridView1.RowCount <= 0)
{
this.EFMsgInfo = "没有可删除的信息!";
EF.EFMessageBox.Show(EFMsgInfo, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
this.gridView1.DeleteSelectedRows();
}
#endregion
#region F5保存
private void FormYM00LG020_EF_DO_F5(object sender, EF.EF_Args e)
{
EI.EIInfo inblock = new EI.EIInfo();
// 增加子项信息块
inblock.Tables.Add("TYM00020_ADD");
inblock.Tables.Add("TYM00020_MODIFY");
inblock.Tables.Add("TYM00020_DELETE");
DataTable dt = new DataTable();
dt = this.dt_ymac02.Tables["TYM00020"].GetChanges(DataRowState.Added);
if (dt != null)
inblock.Tables["TYM00020_ADD"].Merge(dt);
else
inblock.Tables["TYM00020_ADD"].Merge(this.dt_ymac02.Tables["TYM00020"].Clone());
dt = this.dt_ymac02.Tables["TYM00020"].GetChanges(DataRowState.Modified);
if (dt != null)
inblock.Tables["TYM00020_MODIFY"].Merge(dt);
else
inblock.Tables["TYM00020_MODIFY"].Merge(this.dt_ymac02.Tables["TYM00020"].Clone());
dt = this.dt_ymac02.Tables["TYM00020"].GetChanges(DataRowState.Deleted);
if (dt != null)
{
dt.RejectChanges();
inblock.Tables["TYM00020_DELETE"].Merge(dt);
}
else
inblock.Tables["TYM00020_DELETE"].Merge(this.dt_ymac02.Tables["TYM00020"].Clone());
EI.EIInfo outInfo = EI.EIManager.Instance.CallService(curr_part_name,"ym00lg020_sav", inblock);
EI.EIInfo.eiinfo_sys s = outInfo.GetSys(); //获取返回信息s
//设置返回信息
if (s.flag == 0)
{
FormYM00LG020_EF_DO_F2(null,null);
this.EFMsgInfo = string.Format("信息保存成功!");
}
else
{
this.EFSysInfo = s; //获取异常信息
EF.EFMessageBox.Show(s.msg, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
#endregion
#region 查询事件
private void query_data(int recordFrom, int pageSize)
{
try
{
EI.EIInfo inBlock = new EI.EIInfo();
inBlock.Tables[0].Columns.Add("ASMAT_NO");
inBlock.Tables[0].Columns.Add("ASMAT_NAME");
inBlock.Tables[0].Columns.Add("SPEC");
inBlock.Tables[0].Columns.Add("TYPE_SPEC");
inBlock.Tables[0].Rows.Add();
inBlock.Tables[0].Rows[0]["ASMAT_NO"] = this.asmat_no.Text.Trim();
inBlock.Tables[0].Rows[0]["ASMAT_NAME"] = this.asmat_name.Text.Trim();
inBlock.Tables[0].Rows[0]["SPEC"] = this.spec.Text.Trim();
inBlock.Tables[0].Rows[0]["TYPE_SPEC"] = this.type_spec.Text.Trim();
//分页信息
EF.DSUtility.PageInfoDataTable pageInfo = new EF.DSUtility.PageInfoDataTable();
pageInfo.AddPageInfoRow(recordFrom, pageSize);
inBlock.Tables.Add("PageInfo");
inBlock.Tables["PageInfo"].Merge(pageInfo);
//调用后台
EI.EIInfo outBlock = EI.EIManager.Instance.CallService(curr_part_name, "ym00lg020_inq", inBlock);
//设置返回信息
if (outBlock.sys_info.flag != 0)
{
this.EFMsgInfo = outBlock.sys_info.msg;
EF.EFMessageBox.Show(outBlock.sys_info.msg, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
//将信息压入指定的GRID,
EF.Utility.SetCustomGridValue(efDevGrid1, outBlock, false);
//设置分页显示信息
YMUtility.DEV_grid_RecordCountMessage(efDevGrid1, currentPage, outBlock);
//列宽自动调整。
this.gridView1.BestFitColumns();
this.EFMsgInfo = string.Format("查询到[{0}]条记录。", outBlock.Tables[0].Rows.Count);
}
}
catch (Exception err)
{
EF.EFMessageBox.Show(err.Message, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.EFArgs.buttonStatusHold = true;
return;
}
}
#endregion
#region DevGrid事件
private void efDevGrid1_EF_GridBar_First_Event(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
{
try
{
if (currentPage == 1)
{
this.EFMsgInfo = "已经是第一页。";
return;
}
currentPage = 1;
//查询
query_data((currentPage - 1) * this.efDevGrid1.PageSize, this.efDevGrid1.PageSize);
}
catch (Exception ex)
{
EF.EFMessageBox.Show(ex.Message, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void efDevGrid1_EF_GridBar_Last_Event(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
{
try
{
//如果当前页不等于总页数 则查询
if (currentPage != totalPageCount)
{
//设置当前页
currentPage = totalPageCount;
//查询
query_data((currentPage - 1) * this.efDevGrid1.PageSize, this.efDevGrid1.PageSize);
}
else
{
this.EFMsgInfo = "已是最后一页!";
return;
}
}
catch (Exception ex)
{
EF.EFMessageBox.Show(ex.Message, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void efDevGrid1_EF_GridBar_NextPage_Event(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
{
try
{
//如果当前页不等于总页数 则查询
if (currentPage != totalPageCount)
{
//设置当前页
currentPage++;
//查询
query_data((currentPage - 1) * this.efDevGrid1.PageSize, this.efDevGrid1.PageSize);
}
else
{
this.EFMsgInfo = "已是最后一页!";
return;
}
}
catch (Exception ex)
{
EF.EFMessageBox.Show(ex.Message, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void efDevGrid1_EF_GridBar_PageTo_Event(object sender, EF.EFDevGrid.EFNavigatorButtonClickEventArgs e)
{
try
{
if (currentPage != e.PageTo || efDevGrid1.PageSize != e.PageSize)
{
//设置当前页
currentPage = e.PageTo;
efDevGrid1.PageSize = e.PageSize;
//查询
query_data((currentPage - 1) * efDevGrid1.PageSize, efDevGrid1.PageSize);
}
}
catch (Exception ex)
{
EF.EFMessageBox.Show(ex.Message, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void efDevGrid1_EF_GridBar_PrePage_Event(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
{
try
{
if (currentPage <= 1)
{
this.EFMsgInfo = "已经是第一页。";
return;
}
currentPage--;
query_data((currentPage - 1) * this.efDevGrid1.PageSize, this.efDevGrid1.PageSize);
}
catch (Exception ex)
{
EF.EFMessageBox.Show(ex.Message, EF.EF_Args.epEname, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion
private void stock_no_R_EditValueChanged(object sender, EventArgs e)
{
}
}
}
后端:
1.查询功能:
统一规范创建inq文件
#include "stdafx.h"
// Service 入口
BM2F_ENTERACE(ym00lg020_inq)
int f_ym00lg020_inq(EIClass * bcls_rec, EIClass * bcls_ret, CDbConnection * conn)
{
/* 程序内部变量 */
int doFlag = 0;
int recordFrom = 0; //起始页
int pageSize = 0; //每页记录数
/* 业务变量 */
int fetchRowCount = 0;
int v_total_count = 0;
CString asmat_no = "";
CString asmat_name = "";
CString spec = "";
CString type_spec = "";
//返回值
int do_flag = 0;
CString rpt_name;
/* 数据库操作类定义 */
CDbCommand cmd_inq(conn);
CString sqlstr = " ";
CString sqlstrCount = " ";
CString sqlstrWhere = " ";
try
{
// 获取前台传入参数
if (bcls_rec->Tables[0].Columns.Contains("ASMAT_NO"))
{
asmat_no = bcls_rec->Tables[0].Rows[0]["ASMAT_NO"].ToString().Trim();
Log::Debug("", __FUNCTION__, "传入参数asmat_no = [{0}]", asmat_no);
}
if (bcls_rec->Tables[0].Columns.Contains("ASMAT_NAME"))
{
asmat_name = bcls_rec->Tables[0].Rows[0]["ASMAT_NAME"].ToString().Trim();
Log::Debug("", __FUNCTION__, "传入参数asmat_name = [{0}]", asmat_name);
}
if (bcls_rec->Tables[0].Columns.Contains("SPEC"))
{
spec = bcls_rec->Tables[0].Rows[0]["SPEC"].ToString().Trim();
Log::Debug("", __FUNCTION__, "传入参数spec = [{0}]", spec);
}
if (bcls_rec->Tables[0].Columns.Contains("TYPE_SPEC"))
{
type_spec = bcls_rec->Tables[0].Rows[0]["TYPE_SPEC"].ToString().Trim();
Log::Debug("", __FUNCTION__, "传入参数type_spec = [{0}]", type_spec);
}
//获取分页参数
if (!bcls_rec->Tables.Contains("PageInfo"))
{
recordFrom = 0;
pageSize = 1;
}
else
{
if (bcls_rec->Tables[1].Columns.Contains("RecordFrom"))
{
recordFrom = (int)bcls_rec->Tables[1].Rows[0]["RecordFrom"];
Log::Debug("", __FUNCTION__, "传入参数recordFrom = [{0}]", recordFrom);
}
if (bcls_rec->Tables[1].Columns.Contains("PageSize"))
{
pageSize = (int)bcls_rec->Tables[1].Rows[0]["PageSize"];
Log::Debug("", __FUNCTION__, "传入参数pageSize = [{0}]", pageSize);
}
}
string company_code = s.company_code;
//查询数据
CString sqlstr = "select t.* from tpabm10 t WHERE 1=1 ";
if (asmat_no != "")
{
sqlstrWhere = sqlstrWhere + " AND t.asmat_no = @asmat_no";
}
if (asmat_name != "")
{
sqlstrWhere = sqlstrWhere + " AND t.asmat_name = @asmat_name";
}
if (spec != "")
{
sqlstrWhere = sqlstrWhere + " AND t.spec = @spec";
}
if (type_spec != "")
{
sqlstrWhere = sqlstrWhere + " AND t.type_spec = @type_spec";
}
sqlstr = sqlstr + sqlstrWhere + " order by t.asmat_no asc ";
cmd_inq.SetCommandText(sqlstr);
cmd_inq.Parameters.Set("asmat_no", asmat_no);
cmd_inq.Parameters.Set("asmat_name", asmat_name);
cmd_inq.Parameters.Set("spec", spec);
cmd_inq.Parameters.Set("type_spec", type_spec);
Log::Trace("", __FUNCTION__, "sqlstr = [{0}]", sqlstr);
cmd_inq.ExecuteQuery(bcls_ret->Tables[0], recordFrom, pageSize); //0,-1:非翻页查询
cmd_inq.Close();
switch (conn->DatabaseKind)
{
case DB_KIND_DB2: // DB2 数据库(未开Oracle兼容)
case DB_KIND_DB2_ORACLE: // DB2 数据库(开Oracle兼容)
case DB_KIND_MSSQL: // MS SQL Server数据库
case DB_KIND_ORACLE: // Oracle 数据库
default: // 所有数据库适用,通用SQL语句
sqlstrCount = "select COUNT(1) "
" from ( " + sqlstr + " ) ";
}
v_total_count = 0;
cmd_inq.SetCommandText(sqlstrCount);
v_total_count = cmd_inq.ExecuteScalar().ToInt32();
cmd_inq.Close();
//<summary>
//返回总记录数
//</summary>
bcls_ret->Tables.Add("PageInfo");
bcls_ret->Tables["PageInfo"].Columns.Add(DT_DECIMAL, "TotalRecordCount");
bcls_ret->Tables["PageInfo"].Rows.Add();
bcls_ret->Tables["PageInfo"].Rows[0]["TotalRecordCount"] = v_total_count;
}
catch (CDbException& ex)
{
strcpy(s.msg, ex.GetMsg());
s.flag = ex.GetCode();
do_flag = -1;
}
return do_flag;
}
2.增删改功能:
创建sav文件并且实现功能。
#include "stdafx.h"
// Service 入口
BM2F_ENTERACE(ym00lg020_sav)
int f_ym00lg020_sav(EIClass * bcls_rec, EIClass * bcls_ret, CDbConnection * conn)
{
CDataTable t_temp;
int doFlag = 0;
CString sqlstr = "";
CString prod_seq_no = "";
CString dateNow = CDateTime::Now().ToString("yyyyMMddHHmmss");
CDecimal num = 0;
int v_count = 0;
CDbCommand cmd(conn);
CString origin_stock_type = "";
CString stock_type = "";
try
{
CModel tpabm10("TPABM10");
CModel tpabm10_chk("TPABM10");
// 若传入删除块有记录,则根据传入记录删除
/// </summary>
for (int i = 0; i < bcls_rec->Tables["TYM00020_DELETE"].Rows.get_Count(); i++)
{
tpabm10.MergeFrom(bcls_rec->Tables["TYM00020_DELETE"].Rows[i]);
tpabm10.Delete("ASMAT_NO");
}
/// <summary>
// 若传入修改块有记录,则根据传入记录修改
/// </summary>
for (int i = 0; i < bcls_rec->Tables["TYM00020_MODIFY"].Rows.get_Count(); i++)
{
tpabm10.MergeFrom(bcls_rec->Tables["TYM00020_MODIFY"].Rows[i]);
if (tpabm10["ASMAT_NO"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入辅料编码!");
return -1;
}
if (tpabm10["ASMAT_NAME"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入辅料名称!");
return -1;
}
if (tpabm10["SPEC"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入规格!");
return -1;
}
if (tpabm10["TEXTURE"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入材质!");
return -1;
}
if (tpabm10["TYPE_SPEC"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入型号!");
return -1;
}
if (tpabm10["UNIT"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入单位!");
return -1;
}
if (tpabm10["ASSIST_UNIT"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入辅助单位!");
return -1;
}
if (tpabm10["PIECE_MAN"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入按件管理!");
return -1;
}
if (tpabm10["MAX_STOCK"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入最大库存!");
return -1;
}
if (tpabm10["SUPPLIER_CODE"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入供应商代码!");
return -1;
}
if (tpabm10["SUPPLIER_NAME"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入供应商名称!");
return -1;
}
tpabm10.Update("*", "ASMAT_NO");
}
/// <summary>um
// 若传入新增块有记录,则根据传入记录新增
/// </summary>
for (int i = 0; i < bcls_rec->Tables["TYM00020_ADD"].Rows.get_Count(); i++)
{
Log::Debug("", __FUNCTION__, "ASMAT_NO1 =[{0}]", tpabm10["ASMAT_NO"].ToString());
tpabm10.MergeFrom(bcls_rec->Tables["TYM00020_ADD"].Rows[i]);
if (tpabm10["ASMAT_NO"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入辅料编码!");
return -1;
}
if (tpabm10["ASMAT_NAME"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入辅料名称!");
return -1;
}
if (tpabm10["SPEC"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入规格!");
return -1;
}
if (tpabm10["TEXTURE"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入材质!");
return -1;
}
if (tpabm10["TYPE_SPEC"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入型号!");
return -1;
}
if (tpabm10["UNIT"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入单位!");
return -1;
}
if (tpabm10["ASSIST_UNIT"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入辅助单位!");
return -1;
}
if (tpabm10["PIECE_MAN"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入按件管理!");
return -1;
}
if (tpabm10["MAX_STOCK"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入最大库存!");
return -1;
}
if (tpabm10["SUPPLIER_CODE"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, " 请输入供应商代码!");
return -1;
}
if (tpabm10["SUPPLIER_NAME"].ToString().Trim() == "")
{
s.flag = -1;
strcpy(s.msg, "请输入供应商名称!");
return -1;
}
Log::Debug("", __FUNCTION__, "ASMAT_NO1 =[{0}]", tpabm10["ASMAT_NO"].ToString());
//prod_seq_no = f_get_recId();//自动生成事件号
//tpabm10["REC_ID"] = prod_seq_no;
//tpabm10["REC_CREATE_TIME"] = dateNow;
//tpabm10["REC_CREATOR"] = s.userid;
//tpabm10["COMPANY_CODE"] = s.company_code;
//tpabm10["COMPANY_CNAME"] = s.company_name;
tpabm10.TrimOrBlank();
tpabm10.Insert();
Log::Debug("", __FUNCTION__, "ASMAT_NO1 =[{0}]", tpabm10["ASMAT_NO"].ToString());
}
Log::Trace("", "", "-----程序执行完成------");
}
catch (CDbException& ex)
{
CFormattable arguments[] = { ex.GetCode() };
CMessageFormat::Format(s.msg, "数据库处理出错,sqlcode=[{0}],请联系开发人员", arguments, 1);
CString str = sqlstr + "\r\n" + ex.GetMsg();
strncpy(s.sysmsg, (const char*)str, sizeof(s.sysmsg) - 1);
s.flag = -1;
doFlag = -1;
}
catch (CException& ex)
{
strcpy(s.msg, ex.GetMsg());
s.flag = ex.GetCode();
doFlag = -1;
}
return doFlag;
}