Foxtable(狐表)用户栏目专家坐堂 → 目录树


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

主题:目录树

美女呀,离线,留言给我吧!
采菊东篱下
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/3 10:43:00 [显示全部帖子]

完整的代码:
Dim Vals() As String = e.Node.FullPath.Split("\")
Dim tr As Row = Tables("缴费情况").Current
If Vals(0) = DataTables("分类").DataRows(0)("分类") Then
    Dim drs As List(Of DataRow) = DataTables("车辆基本信息").Select("分类 = '" & Vals(0) & "' And 住址_巷 ='" & Vals(1) & "' And 住址_号 ='" & Vals(2) & "'And 住址_房 ='" & Vals(3) & "'")
    For Each dr As DataRow In drs
        If dr IsNot Nothing Then
            If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
                Return '则返回
            End If
            tr("分类") = dr("分类")
            tr("住址_巷") = dr("住址_巷")
            tr("住址_号") = dr("住址_号")
            tr("住址_房") = dr("住址_房")
            tr("姓名") = dr("姓名")
            tr("车牌号码") = dr("车牌号码")
            tr("固定电话") = dr("固定电话")
            tr("手机号码") = dr("手机号码")
            tr("备注") = dr("备注")
            e.Form.DropDownBox.Value = tr("车牌号码")
            e.Form.DropDownBox.CloseDropdown()
        End If
    Next
ElseIf Vals(0) = DataTables("分类").DataRows(1)("分类") Then
    Dim dr1 As DataRow = DataTables("车辆基本信息").Find("分类 = '" & Vals(0) & "' And 车牌号码 ='" & Vals(1) & "'")
    If dr1 IsNot Nothing Then
        If e.Node.Level = 0 Then '如果是顶层节点
            Return '则返回
        End If
        tr("分类") = dr1("分类")
        tr("车牌号码") = dr1("车牌号码")
        e.Form.DropDownBox.Value = tr("车牌号码")
        e.Form.DropDownBox.CloseDropdown()
    End If
End If
点要符合条件的最后一层是可以录入数据的,但点
            If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
                Return '则返回
            End If
这条件之间的层报错!

图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2021/3/3 11:05:20编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/3 16:07:00 [显示全部帖子]

改这在窗口和表上都能录入:
Dim Vals() As String = e.Node.FullPath.Split("\")
Dim tr As Row
If e.Form.DropTable IsNot Nothing Then '如果下拉窗口是从表中打开
    tr = e.Form.DropTable.Current '获取此表的当前行
Else '如果下拉窗口是通过DropdownBox打开
    Dim nm As String = e.Form.DropDownBox.BindingField '获取绑定的字段
    nm = nm.Split(".")(0) '获取绑定的表名
    tr = Tables(nm).Current '获取此表的当前行
End If
If Vals(0) = DataTables("分类").DataRows(0)("分类") Then
    If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
        Return '则返回
    End If
    Dim drs As List(Of DataRow) = DataTables("车辆基本信息").Select("分类 = '" & Vals(0) & "' And 住址_巷 ='" & Vals(1) & "' And 住址_号 ='" & Vals(2) & "'And 住址_房 ='" & Vals(3) & "'")
    For Each dr As DataRow In drs
        If dr IsNot Nothing Then
            tr("分类") = dr("分类")
            tr("住址_巷") = dr("住址_巷")
            tr("住址_号") = dr("住址_号")
            tr("住址_房") = dr("住址_房")
            tr("姓名") = dr("姓名")
            tr("车牌号码") = dr("车牌号码")
            tr("固定电话") = dr("固定电话")
            tr("手机号码") = dr("手机号码")
            tr("备注") = dr("备注")
            e.Form.DropDownBox.Value = tr("车牌号码")
            e.Form.DropDownBox.CloseDropdown()
        End If
    Next
ElseIf Vals(0) = DataTables("分类").DataRows(1)("分类") Then
    If e.Node.Level = 0 Then '如果是顶层节点
        Return '则返回
    End If
    Dim dr1 As DataRow = DataTables("车辆基本信息").Find("分类 = '" & Vals(0) & "' And 车牌号码 ='" & Vals(1) & "'")
    If dr1 IsNot Nothing Then
        tr("分类") = dr1("分类")
        tr("亲属临时停车") = dr1("亲属临时停车")
        tr("车牌号码") = dr1("车牌号码")
        e.Form.DropDownBox.Value = tr("车牌号码")
        e.Form.DropDownBox.CloseDropdown()
    End If
End If

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  33楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/3 20:07:00 [显示全部帖子]

我想做一个在缴费情况表、月租收费窗口、临时收费录入窗口都能通用的目录树,但在月租收费窗口只显示月租收费的所有字节,临时收费录入窗口只显示临时收费的所有字节,否则显示所有字节,我这样写红色标注报错。
窗口的AfterLoad事件改为:
Dim cmd As New SQLCommand
Dim dt As DataTable
'cmd.C '内部数据源,这行代码不需要
cmd.CommandText = "SELECT [_Identify],分类,住址_序号,住址_巷,住址_号,住址_房,姓名,Year(日期) As 年, Month(日期) As 月,手机号码,车牌号码,备注 Fro m {车辆基本信息}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
If CurrentTable.Name = Tables("月租收费_Table1") Then
    trv.BuildTree(dt,"住址_巷|住址_号|住址_房|姓名|手机号码|车牌号码","[分类] = '" & DataTables("分类").DataRows(0)("分类") & "'","住址_序号,住址_号,住址_房")
ElseIf CurrentTable.Name = Tables("临时收费录入_Table1") Then
    trv.BuildTree(dt,"车牌号码","[分类] = '" & DataTables("分类").DataRows(1)("分类") & "'","车牌号码")
Else
    trv.BuildTree(dt,"住址_巷|住址_号|住址_房|姓名|手机号码|车牌号码","[分类] = '" & DataTables("分类").DataRows(0)("分类") & "'","住址_序号,住址_号,住址_房")
    trv.Nodes.Insert(DataTables("分类").DataRows(0)("分类"),0)
    Do While trv.Nodes.Count > 1
        trv.Nodes(1).MoveRight
    Loop
    Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
    'trv2.BuildTree(dt,"年|月|车牌号码","[分类] = '" & DataTables("分类").DataRows(1)("分类") & "'","年 DESC,月 DESC")
    trv2.BuildTree(dt,"车牌号码","[分类] = '" & DataTables("分类").DataRows(1)("分类") & "'","车牌号码")
    Dim node As WinForm.TreeNode = trv.Nodes.Add(DataTables("分类").DataRows(1)("分类"))
    For i As Integer = trv2.Nodes.Count - 1 To 0 Step -1
        Dim nn As WinForm.TreeNode = trv2.Nodes(i)
        trv2.Nodes.RemoveAt(i)
        node.basenode.Nodes.Add(nn.basenode)
    Next
End If



目录树的NodeMouseClick事件改为:
Dim Vals() As String = e.Node.FullPath.Split("\")
Dim tr As Row
If e.Form.DropTable IsNot Nothing Then '如果下拉窗口是从表中打开
    tr = e.Form.DropTable.Current '获取此表的当前行
Else '如果下拉窗口是通过DropdownBox打开
    Dim nm As String = e.Form.DropDownBox.BindingField '获取绑定的字段
    nm = nm.Split(".")(0) '获取绑定的表名
    tr = Tables(nm).Current '获取此表的当前行
End If
If CurrentTable.Name = Tables("月租收费_Table1") Then
    If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
        Return '则返回
    End If
    Dim drs As List(Of DataRow) = DataTables("车辆基本信息").Select("分类 = '" & Vals(0) & "' And 住址_巷 ='" & Vals(1) & "' And 住址_号 ='" & Vals(2) & "'And 住址_房 ='" & Vals(3) & "'")
    For Each dr As DataRow In drs
        If dr IsNot Nothing Then
            tr("分类") = dr("分类")
            tr("住址_巷") = dr("住址_巷")
            tr("住址_号") = dr("住址_号")
            tr("住址_房") = dr("住址_房")
            tr("姓名") = dr("姓名")
            tr("车牌号码") = dr("车牌号码")
            tr("固定电话") = dr("固定电话")
            tr("手机号码") = dr("手机号码")
            tr("备注") = dr("备注")
            e.Form.DropDownBox.Value = tr("车牌号码")
            e.Form.DropDownBox.CloseDropdown()
        End If
    Next
ElseIf CurrentTable.Name = Tables("临时收费录入_Table1") Then
    If e.Node.Level = 0 Then '如果是顶层节点
        Return '则返回
    End If
    Dim dr1 As DataRow = DataTables("车辆基本信息").Find("分类 = '" & Vals(0) & "' And 车牌号码 ='" & Vals(1) & "'")
    If dr1 IsNot Nothing Then
        tr("分类") = dr1("分类")
        tr("亲属临时停车") = dr1("亲属临时停车")
        tr("车牌号码") = dr1("车牌号码")
        e.Form.DropDownBox.Value = tr("车牌号码")
        e.Form.DropDownBox.CloseDropdown()
    End If
Else
    If Vals(0) = DataTables("分类").DataRows(0)("分类") Then
        If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
            Return '则返回
        End If
        Dim drs As List(Of DataRow) = DataTables("车辆基本信息").Select("分类 = '" & Vals(0) & "' And 住址_巷 ='" & Vals(1) & "' And 住址_号 ='" & Vals(2) & "'And 住址_房 ='" & Vals(3) & "'")
        For Each dr As DataRow In drs
            If dr IsNot Nothing Then
                tr("分类") = dr("分类")
                tr("住址_巷") = dr("住址_巷")
                tr("住址_号") = dr("住址_号")
                tr("住址_房") = dr("住址_房")
                tr("姓名") = dr("姓名")
                tr("车牌号码") = dr("车牌号码")
                tr("固定电话") = dr("固定电话")
                tr("手机号码") = dr("手机号码")
                tr("备注") = dr("备注")
                e.Form.DropDownBox.Value = tr("车牌号码")
                e.Form.DropDownBox.CloseDropdown()
            End If
        Next
    ElseIf Vals(0) = DataTables("分类").DataRows(1)("分类") Then
        If e.Node.Level = 0 Then '如果是顶层节点
            Return '则返回
        End If
        Dim dr1 As DataRow = DataTables("车辆基本信息").Find("分类 = '" & Vals(0) & "' And 车牌号码 ='" & Vals(1) & "'")
        If dr1 IsNot Nothing Then
            tr("分类") = dr1("分类")
            tr("亲属临时停车") = dr1("亲属临时停车")
            tr("车牌号码") = dr1("车牌号码")
            e.Form.DropDownBox.Value = tr("车牌号码")
            e.Form.DropDownBox.CloseDropdown()
        End If
    End If
End If
[此贴子已经被作者于2021/3/3 20:26:07编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 9:57:00 [显示全部帖子]

  不是这个意思,目录树的数据源全来源于车辆基本信息生成的表,在缴费情况表中打开显示所有字节,在月租收费窗口中打开只显示月租收费的所有字节,临时收费录入窗口中打开只显示临时收费的所有字节,它们完全可共用同一个窗口,因为都来源于同一数据源,只是字节显示条件不同,不设显示条件直接使用也可,但为方便选择,就设在不同表下显示不同字节,原则上可控吧?
[此贴子已经被作者于2021/3/4 9:59:05编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  35楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 10:30:00 [显示全部帖子]

以下是引用有点蓝在2021/3/4 8:53:00的发言:
放到DropDownOpening事件

if e.Form.DropDownBox.DropTable isnot nothing then
select case e.Form.DropDownBox.DropTable .Name
case “月租收费_Table1
月租收费_Table1的代码
case "临时收费录入_Table1"
临时收费录入_Table1的代码
end select
else
select case e.Form.DropDownBox.Form.Name
case “窗口1”
窗口1的代码
case “窗口2”
窗口2的代码
end select
end if

这种生成的目录树,和赋值结果都基本没有共性的用法建议还是分开不同的下拉窗口做,除了控制麻烦,效率低下,几乎没有什么好处






总感觉这判断不对,我要判断在哪个表打开下拉目录树,缴费情况表或是月租收费窗口、临时收费录入窗口,不是下拉窗口打开的表来源于表或窗口。


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 10:34:00 [显示全部帖子]

月租收费_Table1临时收费录入_Table1、case “窗口1”、case “窗口2”都是在窗口,缴费情况表不在窗口啊,所以这写法不对。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 11:23:00 [显示全部帖子]

报错
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理20210304.foxdb

你看窗口中的车牌目录树代码

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  38楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 11:25:00 [显示全部帖子]

放到DropDownOpening事件

if e.Form.DropDownBox.DropTable isnot nothing then
select case e.Form.DropDownBox.DropTable .Name
case “月租收费_Table1
月租收费_Table1的代码
case "临时收费录入_Table1"
临时收费录入_Table1的代码
end select
else
select case e.Form.DropDownBox.Form.Name
case “窗口1”
窗口1的代码
case “窗口2”
窗口2的代码
end select
end if
用绿色标注的代码都直接报错不让保存。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  39楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 12:32:00 [显示全部帖子]

Dim cmd As New SQLCommand
Dim dt As DataTable
'cmd.C '内部数据源,这行代码不需要
cmd.CommandText = "SELECT [_Identify],分类,住址_序号,住址_巷,住址_号,住址_房,姓名,Year(日期) As 年, Month(日期) As 月,手机号码,车牌号码,备注 Fro m {车辆基本信息}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
If e.Form.DropTable IsNot Nothing Then
    Select Case e.Form.DropTable.Name
        Case "月租收费_Table1"
            trv.BuildTree(dt,"住址_巷|住址_号|住址_房|姓名|手机号码|车牌号码","[分类] = '" & DataTables("分类").DataRows(0)("分类") & "'","住址_序号,住址_号,住址_房")
        Case "临时收费录入_Table1"
            trv.BuildTree(dt,"车牌号码","[分类] = '" & DataTables("分类").DataRows(1)("分类") & "'","车牌号码")
        Case "缴费情况"
            trv.BuildTree(dt,"住址_巷|住址_号|住址_房|姓名|手机号码|车牌号码","[分类] = '" & DataTables("分类").DataRows(0)("分类") & "'","住址_序号,住址_号,住址_房")
            trv.Nodes.Insert(DataTables("分类").DataRows(0)("分类"),0)
            Do While trv.Nodes.Count > 1
                trv.Nodes(1).MoveRight
            Loop
            Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
            trv2.BuildTree(dt,"车牌号码","[分类] = '" & DataTables("分类").DataRows(1)("分类") & "'","车牌号码")
            Dim node As WinForm.TreeNode = trv.Nodes.Add(DataTables("分类").DataRows(1)("分类"))
            For i As Integer = trv2.Nodes.Count - 1 To 0 Step -1
                Dim nn As WinForm.TreeNode = trv2.Nodes(i)
                trv2.Nodes.RemoveAt(i)
                node.basenode.Nodes.Add(nn.basenode)
            Next
    End Select
End If
目录树显示没问题了。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/3/4 12:33:00 [显示全部帖子]

点击字节在缴费情况表能正常录入数据,在窗口中不能录入数据:
Dim Vals() As String = e.Node.FullPath.Split("\")
Dim tr As Row
If e.Form.DropTable IsNot Nothing Then '如果下拉窗口是从表中打开
    tr = e.Form.DropTable.Current '获取此表的当前行
Else '如果下拉窗口是通过DropdownBox打开
    Dim nm As String = e.Form.DropDownBox.BindingField '获取绑定的字段
    nm = nm.Split(".")(0) '获取绑定的表名
    tr = Tables(nm).Current '获取此表的当前行
End If
If e.Form.DropTable IsNot Nothing Then
    Select Case e.Form.DropTable.Name
        Case "月租收费_Table1"
            If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
                Return '则返回
            End If
            Dim drs As List(Of DataRow) = DataTables("车辆基本信息").Select("分类 = '" & Vals(0) & "' And 住址_巷 ='" & Vals(1) & "' And 住址_号 ='" & Vals(2) & "'And 住址_房 ='" & Vals(3) & "'")
            For Each dr As DataRow In drs
                If dr IsNot Nothing Then
                    tr("分类") = dr("分类")
                    tr("住址_巷") = dr("住址_巷")
                    tr("住址_号") = dr("住址_号")
                    tr("住址_房") = dr("住址_房")
                    tr("姓名") = dr("姓名")
                    tr("车牌号码") = dr("车牌号码")
                    tr("固定电话") = dr("固定电话")
                    tr("手机号码") = dr("手机号码")
                    tr("备注") = dr("备注")
                    e.Form.DropDownBox.Value = tr("车牌号码")
                    e.Form.DropDownBox.CloseDropdown()
                End If
            Next
        Case "临时收费录入_Table1"
            If e.Node.Level = 0 Then '如果是顶层节点
                Return '则返回
            End If
            Dim dr1 As DataRow = DataTables("车辆基本信息").Find("分类 = '" & Vals(0) & "' And 车牌号码 ='" & Vals(1) & "'")
            If dr1 IsNot Nothing Then
                tr("分类") = dr1("分类")
                tr("亲属临时停车") = dr1("亲属临时停车")
                tr("车牌号码") = dr1("车牌号码")
                e.Form.DropDownBox.Value = tr("车牌号码")
                e.Form.DropDownBox.CloseDropdown()
            End If
        Case "缴费情况"
            If Vals(0) = DataTables("分类").DataRows(0)("分类") Then
                If e.Node.Level = 0 Or e.Node.Level = 1 Or e.Node.Level = 2 Or e.Node.Level = 3 Then '如果是顶层节点
                    Return '则返回
                End If
                Dim drs As List(Of DataRow) = DataTables("车辆基本信息").Select("分类 = '" & Vals(0) & "' And 住址_巷 ='" & Vals(1) & "' And 住址_号 ='" & Vals(2) & "'And 住址_房 ='" & Vals(3) & "'")
                For Each dr As DataRow In drs
                    If dr IsNot Nothing Then
                        tr("分类") = dr("分类")
                        tr("住址_巷") = dr("住址_巷")
                        tr("住址_号") = dr("住址_号")
                        tr("住址_房") = dr("住址_房")
                        tr("姓名") = dr("姓名")
                        tr("车牌号码") = dr("车牌号码")
                        tr("固定电话") = dr("固定电话")
                        tr("手机号码") = dr("手机号码")
                        tr("备注") = dr("备注")
                        e.Form.DropDownBox.Value = tr("车牌号码")
                        e.Form.DropDownBox.CloseDropdown()
                    End If
                Next
            ElseIf Vals(0) = DataTables("分类").DataRows(1)("分类") Then
                If e.Node.Level = 0 Then '如果是顶层节点
                    Return '则返回
                End If
                Dim dr1 As DataRow = DataTables("车辆基本信息").Find("分类 = '" & Vals(0) & "' And 车牌号码 ='" & Vals(1) & "'")
                If dr1 IsNot Nothing Then
                    tr("分类") = dr1("分类")
                    tr("亲属临时停车") = dr1("亲属临时停车")
                    tr("车牌号码") = dr1("车牌号码")
                    e.Form.DropDownBox.Value = tr("车牌号码")
                    e.Form.DropDownBox.CloseDropdown()
                End If
            End If
    End Select
End If
[此贴子已经被作者于2021/3/4 13:30:28编辑过]

 回到顶部
总数 65 上一页 1 2 3 4 5 6 7 下一页