以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码错在哪  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=163812)

--  作者:wangglby
--  发布时间:2021/4/25 18:30:00
--  代码错在哪

   

If e.DataCol.Name = "物料编码"  Then
Dim a1 As String = e.DataRow("物料编码")
Dim d1 As Integer = 1
Dim b1 As Integer
For b1 = e.DataRow("物料编码").length To 1
Dim e1 As String = left(a1,b1)      \' 取【物料编码】列的字符,字符长度 依次次减少
Dim dr As DataRow
dr = DataTables("表A").Find("物料编码 =\'" & e1 & "\'")   \'查找 [物料编码] 列等于 [物料编码]列或其中部分字符的行
If dr IsNot Nothing Then
d1= dr("数量")*d1    \'把找到的行的 【数量】列的数字 累乘
End If  

Next
e.DataRow("数量辅助列") = d1    \'把累乘的数值赋值给 【数量辅助列】
End If

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2021/4/26 8:12:32编辑过]

--  作者:有点蓝
--  发布时间:2021/4/25 20:47:00
--  
没看懂这个代码到底要做什么。

首先e是事件里一个固定的变量名称,自己定义的变量不能使用e这个名称。其次b变量没有赋值默认就是0,所以left(a,b)就是一个空字符串,没内容

--  作者:wangglby
--  发布时间:2021/4/26 8:14:00
--  
重新调整并上传实例,请帮看看,代码运行结果和期望的不一样
--  作者:有点蓝
--  发布时间:2021/4/26 9:31:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1 (2).zip


--  作者:y2287958
--  发布时间:2021/4/26 9:47:00
--  
或者
For Each dr As DataRow In DataTables("表A").DataRows
    Dim lst As new List(of String)   \'用于储存目标内容
    Dim ss As String = dr("物料编码")
    For i As Integer = 1 To len(ss)
        Dim fdr As DataRow = DataTables("表A").find("物料编码=\'" & left(ss,i) & "\'")
        lst.add(fdr("数量"))
    Next
    dr("数量辅助列") = Eval(String.join("*",lst.ToArray))
Next

--  作者:wangglby
--  发布时间:2021/4/26 10:58:00
--  

谢谢2位的代码,又学到了,思路也开阔了。 我把自己的代码修改下,也能正常了。

 

我的代码错误在于for to 赋值得从小到大,若从大到小得加步长为-1

 

 

 

If e.DataCol.Name = "物料编码" Then
Dim d As Integer = 1
For b As Integer = 1 To e.DataRow("物料编码").length
Dim dr As DataRow = DataTables("表A").Find("物料编码 =\'" & left(e.DataRow("物料编码"),b) & "\'")  
d= dr("数量")*d  
Next
e.DataRow("数量辅助列") = d 

End If

[此贴子已经被作者于2021/4/26 11:09:45编辑过]