【C#】代码解析--打印数据集
本文链接:https://blog.csdn.net/youcheng_ge/article/details/131431829
【C#】代码解析--截取整个方法函数
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109817809
我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。
哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。
本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。
根据某一行代码,截取所在方法函数的所有代码内容,以花括号结尾。
找到外层花括号,要成对。
创建类GetMethod.cs,复制以下代码:
using System.IO;
using System.Text;
namespace ConsoleApp1
{
public class GetMethod
{
///
/// 截取整个方法函数
///
/// 文件全路径
/// 代码行号
///
public string GetMethodContent(string a_strPath, int a_intStartLineNo)
{
string[] l_ArrayCodeContent = File.ReadAllLines(a_strPath);
StringBuilder l_sbMethod = new StringBuilder();
int l_intFlag = 0;
for (int l_intCodeLine = a_intStartLineNo - 1; l_intCodeLine < l_ArrayCodeContent.Length; l_intCodeLine++)
{
string l_oneline = l_ArrayCodeContent[l_intCodeLine].ToString();
if (l_oneline.Contains("{")) l_intFlag--;
if (l_oneline.Contains("}")) l_intFlag++;
if (l_intFlag == 0 && l_intCodeLine != a_intStartLineNo - 1)
{
l_sbMethod.AppendLine(l_oneline);
break;
}
else
{
l_sbMethod.AppendLine(l_oneline);
}
}
return l_sbMethod.ToString();
}
}
}
控制台程序,主方法里,实例化类,再调用,输出方法至桌面 输出.txt文件中。
static void Main(string[] args)
{
GetMethod getMethod = new GetMethod();
File.WriteAllText(@"C:\Users\YS\Desktop\输出.txt", getMethod.GetMethodContent(@"C:\Users\YS\Desktop\01-钨条打标.cs",256));
}
以下仅仅是测试文件,代码不需要理解,我们主要测试能否读取方法内容。
#region 预定义
//系统自带
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text.RegularExpressions;
using System.Windows.Forms;
//自定义
using BaseClass_NameSpace;
using GlobalClass_NameSpace;
#endregion
//空间内容: 鼎禄MES系统客户端
//空间版本: 0.0.0.1
//创建人: gyc
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
namespace MES_Client
{
//类的内容: 仓库管理 - 钨条打标
//类的版本: 0.0.0.1
//创建人: gyc
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
public partial class PCForm_Store_TBarPrint : SubForm
{
#region 系统属性
//钨条信息保存
public DataTable Dt_TBarInfoSave;
#endregion
#region 系统方法
//函数内容: 构造函数
//函数版本: 0.0.0.0
//修改时间: 2023.03.03
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
public PCForm_Store_TBarPrint()
{
//窗体初始化
InitializeComponent();
}
//函数内容: 尺寸变化
//函数版本: 0.0.0.0
//修改时间: 2023.03.03
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void PCForm_Store_TBarPrint_Resize(object sender, EventArgs e)
{
//数据输入,录入(左上角)
panelControl_Data_Input.Left = 0;
panelControl_Data_Input.Top = 0;
panelControl_Data_Input.Width = this.Width / 2 - 2 * MIN_GAP;
panelControl_Data_Input.Height = BTN_AddRow.Bottom + 20;
//数据输入,提交(左中角)
panelControl_Data_Submit.Left = 0;
panelControl_Data_Submit.Height = 80;
panelControl_Data_Submit.Top = this.Height - panelControl_Data_Submit.Height;
panelControl_Data_Submit.Width = panelControl_Data_Input.Width;
//数据输入,表格(左下角)
SidePanel_Data_Table.Left = 0;
SidePanel_Data_Table.Top = panelControl_Data_Input.Bottom + 4 * MIN_GAP;
SidePanel_Data_Table.Width = panelControl_Data_Input.Width;
SidePanel_Data_Table.Height = this.Height - panelControl_Data_Input.Height - panelControl_Data_Submit.Height - 8 * MIN_GAP;
//数据查询(右侧)
SidePanel_Right.Left = panelControl_Data_Input.Right + 4 * MIN_GAP;
SidePanel_Right.Top = 0;
SidePanel_Right.Width = this.Width - panelControl_Data_Input.Width - 4 * MIN_GAP;
SidePanel_Right.Height = this.Height;
//存货信息表
baseGridControl_U8MaterialInfo.Height = this.Height / 2;
}
//函数内容: 控件位置变化,打标备注
//函数版本: 0.0.0.0
//修改时间: 2023.03.03
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void baseDataInput_Remark_LocationResize(object sender, EventArgs e)
{
//添加行
BTN_AddRow.Width = GlobalConst.BUTTON_WIDTH;
BTN_AddRow.Height = GlobalConst.BUTTON_HEIGHT;
BTN_AddRow.Left = baseDataInput_Remark.Right - BTN_AddRow.Width;
BTN_AddRow.Top = baseDataInput_Remark.Bottom + 10;
//删除行
BTN_DeleteRow.Width = GlobalConst.BUTTON_WIDTH;
BTN_DeleteRow.Height = GlobalConst.BUTTON_HEIGHT;
BTN_DeleteRow.Left = BTN_AddRow.Left - BTN_DeleteRow.Width - 10;
BTN_DeleteRow.Top = BTN_AddRow.Top;
}
//函数内容: 控件位置变化,提交面板
//函数版本: 0.0.0.0
//修改时间: 2023.03.03
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void panelControl_Data_Submit_LocationChanged(object sender, EventArgs e)
{
//关联U8
checkEdit_U8.Left = baseDataInput_Remark.Left;
checkEdit_U8.Top = 15;
//采购订单
BTN_U8.Left = checkEdit_U8.Right + 20;
BTN_U8.Top = checkEdit_U8.Top;
BTN_U8.Width = GlobalConst.BUTTON_WIDTH;
BTN_U8.Height = GlobalConst.BUTTON_HEIGHT;
//清空数据按钮
BTN_Clean.Left = BTN_DeleteRow.Left;
BTN_Clean.Top = 15;
BTN_Clean.Width = BTN_U8.Width;
BTN_Clean.Height = BTN_U8.Height;
//提交数据按钮
BTN_Submit.Left = BTN_AddRow.Left;
BTN_Submit.Top = BTN_Clean.Top;
BTN_Submit.Width = BTN_U8.Width;
BTN_Submit.Height = BTN_U8.Height;
}
//函数内容: 载入窗体
//函数版本: 0.0.0.0
//修改时间: 2023.03.03
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void PCForm_Store_TBarPrint_Load(object sender, EventArgs e)
{
//账号初始化
BaseVal.UserID = MySQLUserName;
BaseVal.UserPassword = MySQLPassword;
BaseVal.MySQLServer = MySQLAddress;
BaseVal.MySQLUserID = MySQLUserName;
BaseVal.MySQLPassword = MySQLPassword;
//消息显示标题
BaseVal.MessageCaption = "工号-" + MySQLUserName + " 姓名-" + "管理员" +
" 公司-" + "鼎禄" + " 角色-" + "管理员";
//基本客户端类初始化
BaseNetClient = new BaseClient(MySQLAddress, GlobalClass_NameSpace.GlobalConst.SUPER_MESSAGE_SERVER_PORT);
//消息处理,接收服务器返回消息
BaseNetClient.SuperMessageAnalyzeAsClient_Event += BaseNetClient_SuperMessageAnalyzeAsClient_Event;
//初始化窗体控件绑定
InitFormControlBindings();
MySQLSheetInitialize();
//gridview 界面样式
BaseHMI.SetGridViewStyle(GridView_TBar);
}
//函数内容: 初始化窗体控件绑定
//函数版本: 0.0.0.0
//修改时间: 2023.03.16
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void InitFormControlBindings()
{
baseDataInput_FactoryName.AddItem(工厂名称常量.一期);
baseDataInput_FactoryName.SelectIndex(0);
baseDataInput_TBarType.AddItem(钨丝来源类型常量.采购);
baseDataInput_TBarType.AddItem(钨丝来源类型常量.自产);
baseDataInput_TBarType.SelectIndex(0);
baseDataInput_FactoryWeight.DecimalValue = 0;
baseDataInput_OneBatchNum.DecimalValue = 12;
//绑定左下方表格
Dt_TBarInfoSave = new DataTable();
Dt_TBarInfoSave.Columns.Add(钨条信息表.公司编号, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.工厂名称, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.存货编码, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.采购订单编号, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条供应商编号, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条出厂批次号, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条出厂规格, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条出厂重量, typeof(System.Decimal));
Dt_TBarInfoSave.Columns.Add(钨条信息表.材料类型, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条类型, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条编号, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条状态描述, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条规格, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标时间, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标录入时间, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标操作人编号, typeof(System.String));
Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标备注, typeof(System.String));
GridControl_TBar.DataSource = Dt_TBarInfoSave;
}
//函数内容: 数据表初始化
//函数版本: 0.0.0.0
//修改时间: 2023.03.16
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void MySQLSheetInitialize()
{
this.baseGridControl_U8MaterialInfo.GridView_Main.OptionsBehavior.Editable = false;
BaseMySQLSheet sheet = new BaseMySQLSheet()
{
SheetName = "物料信息表",
SQLSelect = "SELECT * ",
SQLFrom = " FROM " + 物料信息表.表名,
SQLWhere = " WHERE 1 ",
SQLCondition = " AND " + 物料信息表.存货大类名称 + "='钨条'",
SQLOrderBy = " ORDER BY 存货编码 ",
};
sheet.Add(物料信息表.公司编号, 物料信息表.公司编号, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.存货大类名称, 物料信息表.存货大类名称, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.材料类型, 物料信息表.材料类型, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.存货编码, 物料信息表.存货编码, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.存货名称, 物料信息表.存货名称, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.规格型号, 物料信息表.规格型号, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.直径, 物料信息表.直径, MySQL数据类型.MySQL_decimal, true);
sheet.Add(物料信息表.编号助记符, 物料信息表.编号助记符, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.供应商编号, 物料信息表.供应商编号, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.是否免检, 物料信息表.是否免检, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.主计量单位, 物料信息表.主计量单位, MySQL数据类型.MySQL_varchar, true);
sheet.Add(物料信息表.备注, 物料信息表.备注, MySQL数据类型.MySQL_decimal, true);
baseGridControl_U8MaterialInfo.MySQLSheet = sheet;
}
#endregion
#region 钨条打标
//函数内容: 添加行序号
//函数版本: 0.0.0.1
//修改时间: 2023.05.18
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private void GridView_TBar_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
{
e.Info.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
//函数内容: 仓库, 钨条打标, 表格焦点行改变事件
//函数版本: 0.0.0.1
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private void baseGridControl_WuTiaoInfo_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
try
{
DataRow dr_Material = baseGridControl_U8MaterialInfo.GridView_Main.GetFocusedDataRow();
if (dr_Material != null)
{
baseDataInput_MaterialType.StringValue = dr_Material[物料信息表.材料类型].ToString();
baseDataInput_InventoryCode.StringValue = dr_Material[物料信息表.存货编码].ToString();
baseDataInput_FactorySpec.StringValue = dr_Material[物料信息表.规格型号].ToString();
baseDataInput_SupplyNo.StringValue = dr_Material[物料信息表.编号助记符].ToString();
}
}
catch (Exception ex)
{
BaseHMI.Display("钨条打标 baseGridControl_WuTiaoInfo_FocusedRowChanged", ex);
}
}
//函数内容: 按钮单击, 仓库, 钨条打标, 删除行按钮
//函数版本: 0.0.0.1
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private void BTN_DeleteRow_Click(object sender, EventArgs e)
{
try
{
if (GridView_TBar.RowCount > 0)
{
int l_intIndex = GridView_TBar.GetFocusedDataSourceRowIndex();
Dt_TBarInfoSave.Rows.RemoveAt(l_intIndex);
}
}
catch (Exception ex)
{
BaseHMI.Display("钨条打标 BTN_DeleteRow_Click", ex);
}
}
//函数内容: 按钮单击, 仓库, 钨条打标, 添加行按钮
//函数版本: 0.0.0.1
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private void BTN_AddRow_Click(object sender, EventArgs e)
{
try
{
//变量定义
string str_InventoryCode = baseDataInput_InventoryCode.StringValue.Trim();
string str_SupplyOrderNo = baseDataInput_SupplyOrderNo.StringValue.Trim();
string str_FactoryBatchNo = baseDataInput_FactoryBatchNo.StringValue.Trim();
string str_FactorySpec = baseDataInput_FactorySpec.StringValue.Trim();
//自产/采购
string str_TBarType = baseDataInput_TBarType.StringValue.Trim();
//供应商编号
string str_SupplyNo = baseDataInput_SupplyNo.StringValue.Trim();
//材料类型
string str_MaterialType = baseDataInput_MaterialType.StringValue.Trim();
Decimal dec_FactoryWeight = baseDataInput_FactoryWeight.DecimalValue;
string str_Spec = baseDataInput_Spec.StringValue.Trim();
string str_FactoryName = baseDataInput_FactoryName.StringValue.Trim();
int int_OneBatchNum = Convert.ToInt32(baseDataInput_OneBatchNum.DecimalValue);//每批数量
string str_Note = baseDataInput_Remark.StringValue.Trim();
string DateTimeNow = DateTime.Now.ToString();
//有效性
ErrorMessage ErrMsg = new ErrorMessage();
if (string.IsNullOrEmpty(str_InventoryCode)) ErrMsg.Append("存货编码,不为空!");
if (string.IsNullOrEmpty(str_SupplyOrderNo)) ErrMsg.Append("采购订单编号,不为空!");
if (string.IsNullOrEmpty(str_SupplyNo) || str_SupplyNo == BaseConst.STRING_NULL) ErrMsg.Append("供应商,不为空!");
if (str_SupplyNo.Length != 2) ErrMsg.Append("供应商,为2位字符代码!");
if (string.IsNullOrEmpty(str_FactoryBatchNo)) ErrMsg.Append("出厂批次号,不为空!");
if (string.IsNullOrEmpty(str_FactorySpec)) ErrMsg.Append("出厂规格,不为空!");
if (dec_FactoryWeight <= 0) ErrMsg.Append("出厂重量,不能小于等于0!");
if (string.IsNullOrEmpty(str_Spec)) ErrMsg.Append("钨条规格,不为空!");
if (string.IsNullOrEmpty(str_FactoryName)) ErrMsg.Append("工厂名称,不为空!");
if (string.IsNullOrEmpty(str_MaterialType)) ErrMsg.Append("材料类型,不为空!");
if (str_Note.Length > 500) ErrMsg.Append("备注,不能超过500字符!");
if (int_OneBatchNum <= 0) ErrMsg.Append("每批数量,不能小于等于0!");
string str_LastAutoCode = AutoCode(string.Format("[一位年份]{0}{1}[6位流水号]", str_SupplyNo, str_MaterialType),
钨条信息表.表名, 钨条信息表.钨条编号);
if (str_LastAutoCode.Length != GlobalConst.TBAR_ID_LEN) ErrMsg.Append("钨条编号,位数不正确!");
//显示错误信息
if (ErrMsg.Message.Length > 0)
{
BaseHMI.ShowWarn(ErrMsg);
return;
}
string text1 = str_LastAutoCode.Substring(0, 4);
string text2 = str_LastAutoCode.Substring(4, 6);
for (int i = 0; i < int_OneBatchNum; i++) //每批数量
{
int num = BaseFunction.StringConvertToInt(text2, 32);//字符串转数字
string strSN = BaseFunction.IntConvertToString(num + i, 32);//编号序列转字符串
DataRow dr = Dt_TBarInfoSave.NewRow();
dr[钨条信息表.公司编号] = "Z";
dr[钨条信息表.工厂名称] = str_FactoryName;
dr[钨条信息表.存货编码] = str_InventoryCode;
dr[钨条信息表.采购订单编号] = str_SupplyOrderNo;
dr[钨条信息表.钨条供应商编号] = str_SupplyNo;
dr[钨条信息表.钨条出厂批次号] = str_FactoryBatchNo;
dr[钨条信息表.钨条出厂规格] = str_FactorySpec;
dr[钨条信息表.钨条出厂重量] = dec_FactoryWeight;
dr[钨条信息表.材料类型] = str_MaterialType;
dr[钨条信息表.钨条类型] = str_TBarType;
dr[钨条信息表.钨条编号] = text1 + strSN.PadLeft(6, '0');
dr[钨条信息表.钨条状态描述] = 钨条状态常量.等待钨条样检验;
dr[钨条信息表.钨条规格] = str_Spec;
dr[钨条信息表.钨条打标时间] = DateTimeNow;
dr[钨条信息表.钨条打标录入时间] = DateTimeNow;
dr[钨条信息表.钨条打标操作人编号] = BaseVal.UserID;
dr[钨条信息表.钨条打标备注] = str_Note;
Dt_TBarInfoSave.Rows.Add(dr);
}
}
catch (Exception ex)
{
BaseHMI.Display("钨条打标 BTN_AddRow_Click", ex);
}
}
//函数内容: 按钮单击, 仓库, 钨条打标, 清空按钮
//函数版本: 0.0.0.1
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
public void BTN_Clean_Click(object sender, EventArgs e)
{
baseDataInput_SupplyOrderNo.Clear();//采购订单号
baseDataInput_FactoryBatchNo.Clear();//出厂批次号
baseDataInput_Spec.Clear();
baseDataInput_Remark.Clear();
baseDataInput_FactoryWeight.DecimalValue = 0;
baseDataInput_OneBatchNum.DecimalValue = 12;
Dt_TBarInfoSave.Rows.Clear();
baseDataInput_SupplyOrderNo.Focus();
}
//函数内容: 按钮单击, 仓库, 钨条打标, 提交按钮
//函数版本: 0.0.0.1
//修改时间: 2023.03.03
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private void BTN_Submit_Click(object sender, EventArgs e)
{
BaseHMI.ShowWaitForm(TIME_WAIT_FORM);
try
{
//数据检查
ErrorMessage ErrMsg = new ErrorMessage();
if (Dt_TBarInfoSave.Rows.Count <= 0) ErrMsg.Append("提交数据为空");
//显示错误信息
if (ErrMsg.Message.Length > 0)
{
BaseHMI.ShowWarn(ErrMsg);
return;
}
//发送请求
BaseSuperMessage SuperMsg = new BaseSuperMessage(仓库消息.钨条打标);
SuperMsg.Append(Dt_TBarInfoSave);
SuperMsg.Append("PrinterPCName", GlobalVar.PCName_TBar);
BaseNetClient.SendSuperMessage(SuperMsg);
}
catch (Exception ex)
{
BaseHMI.Display("钨条打标 BTN_Submit_Click", ex);
}
}
#endregion
#region 消息处理
//函数内容: 服务器回传消息
//函数版本: 0.0.0.0
//修改时间: 2023.03.03
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
public void BaseNetClient_SuperMessageAnalyzeAsClient_Event(object o)
{
try
{
//信息初始化
ErrorMessage ErrMsg = new ErrorMessage();
BaseSuperMessage SuperMsg = o as BaseSuperMessage;
//根据消息种类分别处理
switch (SuperMsg.SN)
{
case 仓库消息.钨条打标:
try
{
//显示 失败信息
if (SuperMsg.Data[0].Name == BaseConst.MESSAGE_FAIL)
{
ErrMsg.Message = SuperMsg.Data[0].Value;
BaseHMI.ShowWarn(ErrMsg);
return;
}
//显示 成功信息
BaseHMI.ShowWarn("钨条打标,数据提交成功!");
//清空
InvokeSimpleButtonClick(BTN_Clean_Click);
}
catch (System.Exception ex)
{
BaseHMI.Display("SN = " + 仓库消息.钨条打标.ToString() + " 钨条打标,请求应答处理", ex);
BaseHMI.ShowWarn("软件报错, 请通知管理员!");
}
break;
default:
break;
}
//消息应答通用处理
BaseNetClient.SendOver(SuperMsg);
//记录消息
BaseHMI.Display(BaseVal.MessageCaption, SuperMsg);
}
catch (System.Exception ex)
{
BaseHMI.Display("通用消息分析 BaseNetClient_SuperMessageAnalyzeAsClient_Event", ex);
}
}
#endregion
#region 自定义通用方法
//函数内容: 自动编号处理
//函数版本: 0.0.0.1
//修改时间: 2023.03.26
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private string AutoCode(string a_strAutoRule, string a_strCodeTable, string a_strCodeField)
{
string 流水号正则 = @"(\[[0-9]+位流水号])";
string 流水号位数正则 = "[0-9]+";
string l_strSNText = RegexForString(流水号正则, a_strAutoRule);//流水号文本
int l_intSNLength = 4; //流水号长度
string l_strSN = RegexForString(流水号位数正则, l_strSNText);
int.TryParse(l_strSN, out l_intSNLength);
string text = "";
string text2 = "";
checked
{
for (int i = 0; i < l_intSNLength; i++)
{
text += "_";
text2 += "0";
}
string text3 = ParseCodeRule(a_strAutoRule, l_strSNText, l_intSNLength);
string s = ParseQueryRule(a_strAutoRule, l_strSNText, l_intSNLength);
int num = text3.IndexOf(text);
//使用 BaseMySQL取数,需要指定 数据库名
BaseMySQL fetchData = new BaseMySQL();
string text4 = "select {0} from {1} where {2} like {3} order by 1 desc LIMIT 0,1";
text4 = string.Format(text4, new object[]
{
string.Format("SUBSTRING({0}, {1}, {2})", a_strCodeField, num + 1, l_intSNLength),
a_strCodeTable,
a_strCodeField,
"'"+s+"'"
});
DataTable l_dt = fetchData.Query(text4);
if (l_dt != null)
{
string newValue;
if (l_dt.Rows.Count <= 0)
{
newValue = 1.ToString(text2);
}
else
{
text3.Substring(0, num);
if (text3.Length > num + 4)
{
text3.Substring(num + 4);
}
string s2 = l_dt.Rows[0][0].ToString();
int num2 = 0;
//补充字母ABCD
num2 = BaseFunction.StringConvertToInt(s2, 32);//字符串转数字
//int.TryParse(s2, out num2);
num2++;
s2 = BaseFunction.IntConvertToString(num2, 32);//数字转字符串
newValue = s2.PadLeft(l_intSNLength, '0');
}
text3 = text3.Replace(text, newValue);
}
return text3;
}
}
//函数内容: 转换规则
//函数版本: 0.0.0.1
//修改时间: 2023.03.26
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private string ParseCodeRule(string a_strAutoRule, string a_strSNText, int a_CodeLength)
{
DateTime date = DateTime.Now.Date;
if (a_strAutoRule.Contains("[紧缩天数]"))
{
a_strAutoRule = a_strAutoRule.Replace("[紧缩天数]", date.Day.ToString());
}
if (a_strAutoRule.Contains("[两位天数]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位天数]", date.Day.ToString("00"));
}
if (a_strAutoRule.Contains("[紧缩月份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString());
}
if (a_strAutoRule.Contains("[两位月份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString("00"));
}
checked
{
if (a_strAutoRule.Contains("[一位年份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[一位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 1, 1));
}
if (a_strAutoRule.Contains("[两位年份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 2, 2));
}
if (a_strAutoRule.Contains("[四位年份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[四位年份]", date.Year.ToString("0000"));
}
string text2 = "";
for (int i = 0; i < a_CodeLength; i++)
{
text2 += "_";
}
a_strAutoRule = a_strAutoRule.Replace(a_strSNText, text2);
a_strAutoRule = a_strAutoRule.Replace("[按月编号]", text2);
a_strAutoRule = a_strAutoRule.Replace("[按年编号]", text2);
return a_strAutoRule;
}
}
//函数内容: 转换规则
//函数版本: 0.0.0.1
//修改时间: 2023.03.26
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private string ParseQueryRule(string a_strAutoRule, string a_strSNText, int a_CodeLength)
{
DateTime date = DateTime.Now.Date;
if (a_strAutoRule.Contains("[紧缩天数]"))
{
a_strAutoRule = a_strAutoRule.Replace("[紧缩天数]", date.Day.ToString());
}
if (a_strAutoRule.Contains("[两位天数]"))
{
if (a_strAutoRule.Contains("[按月编号]") || a_strAutoRule.Contains("[按年编号]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位天数]", "__");
}
else
{
a_strAutoRule = a_strAutoRule.Replace("[两位天数]", date.Day.ToString("00"));
}
}
if (a_strAutoRule.Contains("[紧缩月份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString());
}
if (a_strAutoRule.Contains("[两位月份]"))
{
if (a_strAutoRule.Contains("[按年编号]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位月份]", "__");
}
else
{
a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString("00"));
}
}
checked
{
if (a_strAutoRule.Contains("[一位年份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[一位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 1, 1));
}
if (a_strAutoRule.Contains("[两位年份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[两位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 2, 2));
}
if (a_strAutoRule.Contains("[四位年份]"))
{
a_strAutoRule = a_strAutoRule.Replace("[四位年份]", date.Year.ToString("0000"));
}
string text2 = "";
for (int i = 0; i < a_CodeLength; i++)
{
text2 += "_";
}
a_strAutoRule = a_strAutoRule.Replace(a_strSNText, text2);
a_strAutoRule = a_strAutoRule.Replace("[按月编号]", text2);
a_strAutoRule = a_strAutoRule.Replace("[按年编号]", text2);
return a_strAutoRule;
}
}
//函数内容: 正则表达式判断
//函数版本: 0.0.0.1
//修改时间: 2023.03.26
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private string RegexForString(string a_strPattern, string a_txtContext)
{
Regex l_reg = new Regex(@a_strPattern, RegexOptions.IgnoreCase);
MatchCollection matches_Type = l_reg.Matches(a_txtContext);
foreach (Match item in matches_Type)
{
return item.Value;
}
return "";
}
#endregion
}
}
256行,private void MySQLSheetInitialize()。
运行结果:
371行,private void BTN_AddRow_Click(object sender, EventArgs e)
运行结果: