前面写了关于模板分析的父模板和子模板解析,今天把最后的内容完成!
主要是12位编码的生成过程
第一步:
定义前六位:
string matlcatehigh =string.Empty;
定义后六位:
string matlcateLow ="FFFFFF";
定义一个变量:
string Templetid = string.Empty;(关于这个变量 当M和S不同时,值也是不相同的)
首先判断是否有主模板的存在(意思同:子模板存在::符号)
后六位的第一位就是选择子模板的系列号
前六位的取值,选中树的事件中就可以获得,所以matlcatehigh的获取不是重点。
第二步:
进入for循环语句 目的是获得编码的后六位
依次对dataview的每行 获取编码
例:
首先定义三个为空的字符串
string smblx =string.Empty;
string nstart =string.Empty;
string nend =string.Empty;
获取一行 数据为z,x,y 将其转化为数组形式 根据对数组长度的判断依次把z,x,y赋值
Smblx=z nstart=x nend=y
对x 和y 进行为空判断 如果不为空
要保证x是不大于y的
然后定义一个变量ncounts = y-x+1
在这里要获取最大站位数midnend
如果nend是正数,则最大站位数midnend =y
否则最大站位数midnend =0
对z进行判断 是否为空和等于M和S
如果等于M
获取dataview 的值为Templetid
如果等于S
对z判断是否存在 + - * / 等运算符 ( 个人理解:关于 * / 的判断是多余的,因为最后的取值都是用零去乘以或者除以一个数值,最后结果还是0.)
下面只进行 + -的判断 如果存在 就取 表达式 + - 后面的数值,进行字符串转化,赋值给 Templetid。
下面这段代码 不管是M和S都要运行的:
对Templetid进行为空判断 如果不为空
比较ncounts和Templetid的长度
如果前者大于后者则定义一个变量oncounts
oncounts = ncounts- Templetid.length 然后进行循环 对Templetid进行赋值
for (int j = 0; j < oncounts; j++)
{
Templetid = "0" + Templetid;
}
如果前者不大于后者则
Templetid = Templetid.Substring(0, ncounts);
最后就可以用到上面定义的变量了,通过下面这段代码得到后六位编码:
matlcateLow=matlcateLow.Substring(0,Convert.ToInt16(x)-1)+Templetid+matlcateLow.Substring(Convert.ToInt16(y), matlcateLow.Length - (Convert.ToInt16(y)));
第三步:
循环结束后:
如果后六位数值中还存在F
临时总编码 = matlcatehigh +matlcateLow. Substring(0,midnend)(midnend上面提到是最大站位)
如果后六位数值中不存在F
临时总编码 = 前六位+后六位
最后对隐藏域hidmatlcode是否为空
如果是空 则将新得到的临时总编码作为参数,调用方法(取出完整物资编号)去数据库进行查询,结果就是最终总编码。
如果不为空 则根据临时总编码截取hidmatlcode的字符串 得到新的编码 和临时总编码进行对比,如果相等,则将hidmatlcode赋值最终总编码 如果不等,则再次调用方法(取出完整物资编号)去数据库进行查询,结果就是最终总编码。
第四步:
取出完整物资编号的方法解析
if (matlcateall != null &&!string.IsNullOrEmpty(matlcateall.Trim()))
如果数据为空(Null),则要为Null后面一直加0,直到等于12位
取出后六位 对后六位进行处理,如下编码:
string matlcode =Convert.ToString((Convert.ToInt64(matlcateallcode) + 1));
如果matlcode 不等于6 就要在前面补0
如果数据不为空
Matlzero =” 000000000000”
matlcateall=matlcates+matlzero.Substring(matlcates.Length,matlzero.Length- matlcates.Length);