Foxtable(狐表)用户栏目专家坐堂 → [求助]


  共有2807人关注过本帖树形打印复制链接

主题:[求助]

帅哥哟,离线,有人找我吗?
青鸟
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
[求助]  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By: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级的时候不久报错了.

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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)


 回到顶部
帅哥哟,离线,有人找我吗?
青鸟
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
  发帖心情 Post By: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,对应的数据结构是:〔费用类型〕\〔一级费用类别〕\〔二级费用类别〕

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



 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
青鸟
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
  发帖心情 Post By:2015/1/28 15:38:00 [只看该作者]

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

其实:

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

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

所以可以直接赋值了。


 回到顶部