以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  这样的代码还能优化吗  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=26246)

--  作者:zcw728909
--  发布时间:2012/11/28 8:42:00
--  这样的代码还能优化吗
有个产品信息表,里面有下面这些列,写个段代码,前辈们帮我看看还能优化吗,或者是能不能组合到一起,总感觉这样的代码太繁琐了
图片点击可在新窗口打开查看此主题相关图片如下:66666666666.jpg
图片点击可在新窗口打开查看
Select Case e.DataCol.name
    Case "电雕在制明细"
        If e.DataRow.IsNull("电雕在制明细") Then
            e.DataRow("电雕在制支数")="0"
        Else
            e.DataRow("电雕在制支数") = e.newvalue.split(",").Length
        End If
End Select
Select Case e.DataCol.name
    Case "机加在制明细"
        If e.DataRow.IsNull("机加在制明细") Then
            e.DataRow("机加在制支数")="0"
        Else
            e.DataRow("机加在制支数") = e.newvalue.split(",").Length
        End If
End Select
Select Case e.DataCol.name
    Case "镀铜在制明细"
        If e.DataRow.IsNull("镀铜在制明细") Then
            e.DataRow("镀铜在制支数")="0"
        Else
            e.DataRow("镀铜在制支数") = e.newvalue.split(",").Length
        End If
End Select
Select Case e.DataCol.name
    Case "车研在制明细"
        If e.DataRow.IsNull("车研在制明细") Then
            e.DataRow("车研在制支数")="0"
        Else
            e.DataRow("车研在制支数") = e.newvalue.split(",").Length
        End If
End Select
Select Case e.DataCol.name
    Case "镀铬在制明细"
        If e.DataRow.IsNull("镀铬在制明细") Then
            e.DataRow("镀铬在制支数")="0"
        Else
            e.DataRow("镀铬在制支数") = e.newvalue.split(",").Length
        End If
End Select
[此贴子已经被作者于2012-11-28 8:43:12编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/11/28 8:49:00
--  

普通的:

 

Select Case e.DataCol.name
    Case "电雕在制明细"
        If e.DataRow.IsNull("电雕在制明细") Then
            e.DataRow("电雕在制支数")="0"
        Else
            e.DataRow("电雕在制支数") = e.newvalue.split(",").Length
        End If
    Case "机加在制明细"
        If e.DataRow.IsNull("机加在制明细") Then
            e.DataRow("机加在制支数")="0"
        Else
            e.DataRow("机加在制支数") = e.newvalue.split(",").Length
        End If
    Case "镀铜在制明细"
        If e.DataRow.IsNull("镀铜在制明细") Then
            e.DataRow("镀铜在制支数")="0"
        Else
            e.DataRow("镀铜在制支数") = e.newvalue.split(",").Length
        End If
    Case "车研在制明细"
        If e.DataRow.IsNull("车研在制明细") Then
            e.DataRow("车研在制支数")="0"
        Else
            e.DataRow("车研在制支数") = e.newvalue.split(",").Length
        End If
    Case "镀铬在制明细"
        If e.DataRow.IsNull("镀铬在制明细") Then
            e.DataRow("镀铬在制支数")="0"
        Else
            e.DataRow("镀铬在制支数") = e.newvalue.split(",").Length
        End If
End Select

 

邪门的:

 

If  e.DataCol.name.EndsWith("在制明细") Then
    Dim zh As String = e.DataCol.name
    zh = zh.SubString(0, zh.Length-2) & "支数"
    If e.DataRow.IsNull(e.DataCol.name) Then
        e.DataRow(zh) = 0
    Else
        e.DataRow(zh) = e.newvalue.split(",").Length
    End If
End If


--  作者:飞
--  发布时间:2012/11/28 9:19:00
--  

超级精简的:

 

Dim ArrColName1() As String = {"电雕在制明细","机加在制明细","镀铜在制明细","车研在制明细","镀铬在制明细"}
Dim ArrColName2() As String = {"电雕在制支数","机加在制支数","镀铜在制支数","车研在制支数","镀铬在制支数"}
Dim Index As Integer = Array.IndexOf(ArrColName1,e.DataCol.name)
If Index < 0 Then Return
e.DataRow(ArrColName2(Index)) = IIF(e.DataRow.IsNull(e.DataCol.name),0,e.newvalue.split(",").Length)


--  作者:狐狸爸爸
--  发布时间:2012/11/28 9:22:00
--  
图片点击可在新窗口打开查看
--  作者:zcw728909
--  发布时间:2012/11/28 9:25:00
--  
学习了,研究中
--  作者:zcw728909
--  发布时间:2012/11/28 9:44:00
--  
用了三楼的代码,好像有问题,如果在制明细值为空,就会报错,应该是在制明细为空时,在制支数是“0”
还有,这句“If Index < 0 Then Return”是什么意思?
[此贴子已经被作者于2012-11-28 9:52:41编辑过]

--  作者:lin_hailun
--  发布时间:2012/11/28 10:14:00
--  
 看了下代码,应该不会报错才对。可能是其他的代码引起的错误。

 那句的意思是如果找不到对应的列,就不执行下面的代码。

--  作者:zcw728909
--  发布时间:2012/11/28 10:35:00
--  
哦,我再仔细找找
--  作者:zcw728909
--  发布时间:2012/11/28 10:52:00
--  
还是不行,我新建了个项目也不行,如下图:我在镀铬在制明细里输入值,镀铬在制支数自动输值,但是我把镀铬在制明细的值删除后,就报错了
图片点击可在新窗口打开查看此主题相关图片如下:666.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:狐狸爸爸
--  发布时间:2012/11/28 10:56:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目54.table