以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=63762)

--  作者:青鸟
--  发布时间:2015/1/28 11:14:00
--  [求助]
 

上次目录树输入合同类别时,目录树是由多列表生成的,这次费用类别目录树是由级码表生成的,级码表如下:

级码    类别名称

1                  合同费用

1.1              工程费用

1.1.1                  总包费用

1.1.1.1              总包土建费用

1.1.1.2              总包安装费用

1.1.1.3              总包其它费用

1.1.2                  分包费用

1.1.2.1              分包土建费用

1.1.2.1.1           初步勘察

1.1.2.1.2           详细勘察

1.1.2.1.3           土建临设

级码表设置的目录树无法按列获取输入值,因此考虑用FullPath获取路径标签,转化为输入值,代码如下,

在下拉菜单输入时,点击第0,1,2,3层目录时,弹出路径错误,索引超出数组范围的提示。

点击第4层目录时,弹出“未找到列”的错误提示,

请教修改:图片点击可在新窗口打开查看

Dim Vals() As String = e.Node.FullPath.Split("\\")

Dim Filter As String = "[费用类型] = \'" & Vals(0) & "\' And [一级费用类别] = \'" & Vals(1) & "\' And [二级费用类别] = \'" & Vals(2) & "\' And [三级费用类别] = \'" & Vals(3) & "\'And [四级费用类别] = \'" & Vals(4) & "\'"

Dim dr As DataRow = DataTables("费用类别").Find(Filter)

Dim r As Row = Tables("费用支付台账").Current

If e.Node.Level = 0 Then

    Return

Else If e.Node.Level = 1 Then

    Return

Else If e.Node.Level = 2 Then

    r("费用类型") = dr("费用类型")

    r("一级费用类别") = dr("一级费用类别")

    r("二级费用类别") = dr("二级费用类别")

    e.Form.DropDownBox.Value = dr("费用类型")

Else If e.Node.Level = 3 Then

    r("费用类型") = dr("费用类型")

    r("一级费用类别") = dr("一级费用类别")

    r("二级费用类别") = dr("二级费用类别")

    r("三级费用类别") = dr("三级费用类别")

    e.Form.DropDownBox.Value = dr("费用类型")

Else If e.Node.Level = 4 Then

    r("费用类型") = dr("费用类型")

    r("一级费用类别") = dr("一级费用类别")

    r("二级费用类别") = dr("二级费用类别")

    r("三级费用类别") = dr("三级费用类别")

    r("四级费用类别") = dr("四级费用类别")

    e.Form.DropDownBox.Value = dr("费用类型")

End If

e.form.DropDownBox.CloseDropdown
--  作者:Bin
--  发布时间:2015/1/28 11:23:00
--  
不能这么做,
Dim Filter As String = "[费用类型] = \'" & Vals(0) & "\' And [一级费用类别] = \'" & Vals(1) & "\' And [二级费用类别] = \'" & Vals(2) & "\' And [三级费用类别] = \'" & Vals(3) & "\'And [四级费用类别] = \'" & Vals(4) & "\'"

这样没有4级的时候不久报错了.

你要写到每级判断里,有多少级就取多少级

--  作者:有点甜
--  发布时间:2015/1/28 11:37:00
--  

类似这样写代码

 

Dim Filter As String 

Select Case e.Node.Level

    Case 0

        filter = "[费用类型] = \'" & Vals(0) & "\'"

    Case 1

        filter = "[费用类型] = \'" & Vals(0) & "\' And [一级费用类别] = \'" & Vals(1) & "\'"

End Select

 

Dim dr As DataRow = DataTables("费用类别").Find(Filter)


--  作者:青鸟
--  发布时间:2015/1/28 14:58:00
--  

谢谢,我将代码改变如下:

Dim Vals() As String = e.Node.FullPath.Split("\\")
Dim Filter As String
Select Case e.Node.Level
    Case 0
        Return
    Case 1
        Return
    Case 2
        filter = "[费用类型] = \'" & Vals(0) & "\' And [一级费用类别] = \'" & Vals(1) & "\'And [二级费用类别] = \'" & Vals(2) & "\'"
        Dim dr As DataRow = DataTables("费用类别").Find(Filter)
        Dim r As Row = Tables("费用支付台账").Current
        r("费用类型") = dr("费用类型")
        r("一级费用类别") = dr("一级费用类别")
        r("二级费用类别") = dr("二级费用类别")
        e.Form.DropDownBox.Value = dr("费用类型")
    Case 3
       ............

End Select
e.form.DropDownBox.CloseDropdown

 

但还是报错,提示:未找到列〔费用类型〕

Dim Vals() As String = e.Node.FullPath.Split("\\")

Dim Filter As String

Dim dr As DataRow = DataTables("费用类别").Find(Filter)
这段代码的结果是不是:dr() = 合同费用\\工程\\分包\\景观工程,其值满足Filter,对应的数据结构是:〔费用类型〕\\〔一级费用类别〕\\〔二级费用类别〕

我不知道用什么方式来返回这个结果,查看是否正确,请指教。



--  作者:有点甜
--  发布时间:2015/1/28 15:01:00
--  

Dim Vals() As String = e.Node.FullPath.Split("\\")

Dim r As Row = Tables("费用支付台账").Current

If e.Node.Level = 0 Then
   
    Return
   
Else If e.Node.Level = 1 Then
   
    Return
   
Else If e.Node.Level = 2 Then
   
    r("费用类型") = vars(0)
   
    r("一级费用类别") = vars(1)
   
    r("二级费用类别") = vars(2)
   
    e.Form.DropDownBox.Value = vars(2)
   
Else If e.Node.Level = 3 Then
   
    r("费用类型") = vars(0)
   
    r("一级费用类别") = vars(1)
   
    r("二级费用类别") = vars(2)
   
    r("三级费用类别") = vars(3)
   
    e.Form.DropDownBox.Value = vars(3)
   
Else If e.Node.Level = 4 Then
   
    r("费用类型") = vars(0)
   
    r("一级费用类别") = vars(1)
   
    r("二级费用类别") = vars(2)
   
    r("三级费用类别") = vars(3)
   
    r("四级费用类别") = vars(4)
   
    e.Form.DropDownBox.Value = vars(4)
   
End If

e.form.DropDownBox.CloseDropdown


--  作者:青鸟
--  发布时间:2015/1/28 15:38:00
--  

谢谢,我确实基本知识不具备,太麻烦老师了。

其实:

Dim Vals() As String = e.Node.FullPath.Split("\\")

Vals() 的结果就直接是:合同费用\\工程\\分包\\景观工程,其值是按点击的位置和层级筛选,对应的数据结构是:Vals(0)\\Vals(1)\\Vals(2)

所以可以直接赋值了。