以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码问题。。求纠正  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=45816)

--  作者:wzl0927
--  发布时间:2014/2/11 15:48:00
--  代码问题。。求纠正
If e.DataCol.name="订单编号" Then
   Dim b As String = e.DataTable.Compute("max(生产编号)","订单编号=\'" & e.DataRow("订单编号") & "\'")
   e.DataRow("生产编号")=e.DataRow("订单编号") & Convert.ToChar(Convert.ToInt32(b.SubString(b.length-1,1).ToCharArray()(0))+1)
End If



关联新增第一行是报错

.NET Framework 版本:2.0.50727.4984
Foxtable 版本:2013.10.14.1
错误所在事件:表,生产进度表,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。


如果有第一行如  20140211001a  新增第2行的时候就不会出错

--  作者:Bin
--  发布时间:2014/2/11 15:56:00
--  
B没有值吧

建议您用这个方法:
http://www.foxtable.com/help/topics/1485.htm

先找出是哪一行出错,然后分析原因,搞不定,贴出代码,并告诉我们运行到哪一行出错,以及错误提示。


另外新手建议尽量不要使用这种链式编程,不利于你排错,也容易造成混乱.

--  作者:wzl0927
--  发布时间:2014/2/11 16:08:00
--  
就是第一行出错,如果有第一行的话。。后面新增就不会出错
代码在上面已经贴出来了


--  作者:Bin
--  发布时间:2014/2/11 16:27:00
--  
你看看 e.DataRow("订单编号") 是否有值
--  作者:狐狸爸爸
--  发布时间:2014/2/11 16:28:00
--  
If e.DataCol.name="订单编号" Then
   Dim b As String = e.DataTable.Compute("max(生产编号)","订单编号=\'" & e.DataRow("订单编号") & "\'")
    if b > "" then
           e.DataRow("生产编号")=e.DataRow("订单编号") & Convert.ToChar(Convert.ToInt32(b.SubString(b.length-1,1).ToCharArray()(0))+1)
    end if
End If

--  作者:wzl0927
--  发布时间:2014/2/13 23:14:00
--  
有值。。5楼这个代码。不会出错。但是新增第一行不会自动生成生产编号。(为空)如果第一行生产编号有值。就能正常生成第二行
--  作者:有点甜
--  发布时间:2014/2/13 23:17:00
--  
 这样改一下,修改了一下

If e.DataCol.name="订单编号" Then
   Dim b As String = e.DataTable.Compute("max(生产编号)","订单编号=\'" & e.DataRow("订单编号") & "\'")
    if b > "" then
           e.DataRow("生产编号")=e.DataRow("订单编号") & Convert.ToChar(Convert.ToInt32(b.SubString(b.length-1,1).ToCharArray()(0))+1)
    else if e.datatable.datarows.count = 0 then
           e.DataRow("生产编号")="123456"
    end if
End If
[此贴子已经被作者于2014-2-13 23:20:02编辑过]

--  作者:wzl0927
--  发布时间:2014/2/14 0:09:00
--  
还是一样。第一行新增    生产编号为空。    第一行生产编号有值。。新增第2行的时候就正常了
--  作者:Bin
--  发布时间:2014/2/14 8:43:00
--  
直接上例子吧,纸上谈兵解决不了问题.  都折腾了8楼了.
--  作者:狐狸爸爸
--  发布时间:2014/2/14 8:57:00
--  
If e.DataCol.name="订单编号" Then
   Dim b As String = e.DataTable.Compute("max(生产编号)","订单编号=\'" & e.DataRow("订单编号") & "\'")
    if b > "" then
          e.DataRow("生产编号")=e.DataRow("订单编号") & Convert.ToChar(Convert.ToInt32(b.SubString(b.length-1,1).ToCharArray()(0))+1)
    else
       这里写不存在最大编号时的代码,也就是此订单的第一个生成编号
    end if
End If