以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  为什么重置列不变化  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=7153)

--  作者:yankunhao
--  发布时间:2010/5/20 15:22:00
--  为什么重置列不变化

If e.DataCol.Name = "工序编号" Then
   
    Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
    For Each dy As String In dys
        dim n as integer = 0
        Dim drs As List(Of DataRow)
        drs = DataTables("工序单价表").Select("[工序编号] = \'" & dy & "\'")
        For Each dr As Datarow In drs
            n = n + 1
            dr("规格次序") =Format(n,"000")
        Next
    next
    if e.dataRow.IsNull("工序编号")
        e.dataRow("规格次序") = ""
    end if
end if
If e.DataCol.Name = "工序编号" Then
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If

 

先定工序编号列然后重置列,但发现工序规格码只有第一行起变化,如果一行行地选工序编码就能变化。为会什么呢?


--  作者:狐狸爸爸
--  发布时间:2010/5/20 15:35:00
--  

你用的是菜单中的重置按钮吗,按道里不会这样的,因为菜单的重置是针对所有行的。

 

另外你的代码,为啥两个 If e.DataCol.Name = "工序编号" Then ?

 

通常应该这样:

 

If e.DataCol.Name = "工序编号" Then
    Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
    For Each dy As String In dys
        dim n as integer = 0
        Dim drs As List(Of DataRow)
        drs = DataTables("工序单价表").Select("[工序编号] = \'" & dy & "\'")
        For Each dr As Datarow In drs
            n = n + 1
            dr("规格次序") =Format(n,"000")
        Next
    next
    if e.dataRow.IsNull("工序编号")
        e.dataRow("规格次序") = ""
    end if
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If

当然这不影响计算的,只是不规范。


--  作者:yankunhao
--  发布时间:2010/5/20 16:01:00
--  

哦,我发现规格次序就能变化工序规格码就不能变化,另工序编号及规格次序都为字符型,事件为DataColChanged

[此贴子已经被作者于2010-5-20 16:05:35编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/5/20 16:14:00
--  

规格次序 和 工序规格码,前者是所有行都算了一次,后者则只是触发事件的行算了一次 。

代码是死的,你让他干啥就干啥,不会多干一点,也不会少干一点,你自己慢慢分析吧。

实在搞不定,就做个简单的例子上来,而且要具体第描述问题:出于什么目的? 在什么事件写了什么代码? 希望的情况应该怎样? 现在的情况却是怎样?

 

[此贴子已经被作者于2010-5-20 16:18:41编辑过]

--  作者:yankunhao
--  发布时间:2010/5/20 16:26:00
--  
那如果我想在 工序编码 的列重置后,工序规格码=工序编码加上规格次序,如工序编码=8001,规格次序=01,那么工序规格码=800101 ,在DataColChanged事件中如何实现呢?
[此贴子已经被作者于2010-5-20 16:28:30编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/5/20 16:29:00
--  
这样试试吧:
 
If e.DataCol.Name = "工序编号" Then
    Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
    For Each dy As String In dys
        dim n as integer = 0
        Dim drs As List(Of DataRow)
        drs = DataTables("工序单价表").Select("[工序编号] = \'" & dy & "\'")
        For Each dr As Datarow In drs
            n = n + 1
            dr("规格次序") =Format(n,"000")
        Next
    next
    if e.dataRow.IsNull("工序编号")
        e.dataRow("规格次序") = ""
    end if
end if
If e.DataCol.Name = "规格次序" Then
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
[此贴子已经被作者于2010-5-20 16:29:21编辑过]

--  作者:yankunhao
--  发布时间:2010/5/20 16:58:00
--  

我在在DataColChanged事件中设置如下代码:

 

If e.DataCol.Name = "工序编号"Then \'发生变化的是工序编号吗?
    \'在工序编码表找出该工序
    Dim dr As DataRow
    dr = DataTables("工序编码表").Find("工序编号 = " & "\'" & e.DataRow("工序编号") & "\'" )
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("工序名称")= dr("工序名称")
        e.DataRow("部门")= dr("部门")
        Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
        For Each dy As String In dys
            dim n as integer = 0
            Dim drs As List(Of DataRow)
            drs = DataTables("工序单价表").Select("[工序编号] = \'" & dy & "\'")
            For Each dr1 As Datarow In drs
                n = n + 1
                dr1("规格次序") =Format(n,"000")
            Next
        next
    Else
        e.DataRow("部门") =Nothing
        e.DataRow("工序名称") = "还未有这个工序,请在工序编码表中设置"
        e.dataRow("规格次序") = ""
        e.dataRow("工序规格码")=""   
    End If
End If
If e.DataCol.Name = "规格次序" Then
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If

 

结果是重置工序编码列时 规格次序 列能变化并数据正确,但 工序规格码 列数据却等于 工序编号,如果是新增的行或手功改动 工序编号 列时工序规格码就能如意得到!


--  作者:狐狸爸爸
--  发布时间:2010/5/20 17:02:00
--  

If e.DataCol.Name = "规格次序" Then
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If

 

改为:

 

If e.DataCol.Name = "规格次序" Orlese e.DataCol.Name = "工序编号" Then
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If

 


--  作者:yankunhao
--  发布时间:2010/5/20 17:14:00
--  

If e.DataCol.Name = "工序编号"Then \'发生变化的是工序编号吗?
    \'在工序编码表找出该工序
    Dim dr As DataRow
    dr = DataTables("工序编码表").Find("工序编号 = " & "\'" & e.DataRow("工序编号") & "\'" )
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("工序名称")= dr("工序名称")
        e.DataRow("部门")= dr("部门")
        Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
        For Each dy As String In dys
            dim n as integer = 0
            Dim drs As List(Of DataRow)
            drs = DataTables("工序单价表").Select("[工序编号] = \'" & dy & "\'")
            For Each dr1 As Datarow In drs
                n = n + 1
                dr1("规格次序") =Format(n,"000")
            Next
        next
    Else
        \'否则清除区号和邮编两列的内容
        e.DataRow("部门") =Nothing
        e.DataRow("工序名称") = "还未有这个工序,请在工序编码表中设置"
        e.dataRow("规格次序") = ""
        e.dataRow("工序规格码")=""   
    End If
End If
If e.DataCol.Name = "规格次序" OrElse e.DataCol.Name = "工序编号" Then
    e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If

 

这样还是不行,工序规格码还是工序编号,加OrElse e.DataCol.Name = "工序编号"这句只是起到当我点选工序编列然后离开,工序规格码才得到想要的数据。

[此贴子已经被作者于2010-5-20 17:16:03编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/5/20 17:15:00
--  

从理论来说,这是不可能的事情。

我没有别的办法了,我投降,你自己慢慢研究,搞不定就做一个简单的例子测试,我们有办法继续蒙下去了

 

图片点击可在新窗口打开查看

 

 

[此贴子已经被作者于2010-5-20 17:26:58编辑过]