以文本方式查看主题 - 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("\\") End Select
但还是报错,提示:未找到列〔费用类型〕 Dim Vals() As String = e.Node.FullPath.Split("\\") Dim Filter As String Dim dr As DataRow = DataTables("费用类别").Find(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 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) 所以可以直接赋值了。 |