Foxtable(狐表)用户栏目专家坐堂 → 关于排考室座位号的问题


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

主题:关于排考室座位号的问题

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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/11 15:56:00 [显示全部帖子]

原代码:

AfterLoad

Dim dr As DataRow

Dim tv As WinForm.TreeView

tv =e.Form.Controls("学员列表树")

tv.BuildTree("考试数据表", "班代码|学号")

'tv.BuildTree("考试数据表", "入学时间|校区|班名称中文|姓名")

'tv.BuildTree("考试数据表", "入学时间|校区|班代码|学号")

For Each nd As WinForm.TreeNode In tv.AllNodes

    If nd.Level = 0 Then

    nd.BackColor = Color.Gainsboro

    dr = DataTables("考试数据表").find("班代码 = '" & nd.Name & "'")

    If dr IsNot Nothing Then

        nd.text = dr("班名称中文")

    End If

    Else If nd.Level = 1

        dr = DataTables("考试数据表").find("学号 = '" & nd.Name & "'")

        If dr IsNot Nothing Then

            nd.text = dr("姓名")

        End If

   End If

Next

tv.Nodes.Insert("全部学员", "全部学员", 0)

 

For Each nd As WinForm.TreeNode In tv.AllNodes

    If nd.Name <> "全部学员" And nd.AllNodes.Count > 0 Then

        nd.MoveRight

    End If

Next

 

目录树AfterCheckNode代码

Dim nd,nd1 As  WinForm.TreeNode

nd = e.node

If nd.Nodes.Count > 0

    For Each nd1 In nd.AllNodes

        nd1.Checked = nd.Checked

    Next

End If

If e.node.Checked = False

    Do While  nd.parentnode IsNot Nothing

        nd = nd.parentnode

        If nd.Nodes.Count > 0

            For i As Integer = 0 To nd.Nodes.Count -1

                If nd.Nodes(i).Checked = True

                    Exit Do

                End If

                If i = nd.Nodes.Count -1

                    nd.Checked = False

                End If

            Next

        End If

    Loop

Else

    Do While  nd.parentnode IsNot Nothing

        nd = nd.parentnode

        nd.Checked = True

    Loop

End If

Dim bdm,xh,tj As String

Dim cnt,jds As Integer

For Each nd In e.Form.Controls("学员列表树").nodes("全部学员").AllNodes

    If nd.Level = 1 And nd.Checked = True Then

        bdm = nd.name

        cnt = nd.AllNodes.Count

        For Each nd1 In nd.AllNodes

            If nd1.Checked = True

                xh = xh & "," & nd1.name

                jds = jds +1

                If jds = cnt

                    xh = "all"

                End If

            Else

                If xh > ""

                    xh = xh.Replace("all","")

                End If

            End If

        Next

        If xh > ""

            xh = xh.Trim(",")

        End If

        jds = 0

        tj = tj & "|" & bdm & "\" & xh

        If tj > ""

            tj = tj.Trim("|")

        End If

    End If

Next

 

Dim jztj As  String

 

If tj > ""

    e.Form.Controls("加载条件").text = tj.Replace("|",vbcrlf)

    jztj = tj.Replace("|",vbcrlf)

Else

    e.Form.Controls("加载条件").text = ""

End If

 

想实现的效果

AfterLoad

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")

trv.BuildTree("考试数据表", "入学时间|校区|班名称中文|姓名")'使用排序

trv.Nodes.Insert("全部学员", 0)

目录树AfterCheckNode代码

Dim nms As String() = {"入学时间", "校区", "班名称中文", "姓名"} '指定生成目录树的各列

Dim qts As String() = {"'", "'", "'", "'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号

Dim trv As WinForm.TreeView = e.Sender

Dim flt As String

Dim nd As WinForm.TreeNode

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")

If e.Node.Name = "全部学员" Then

   ' Tables("考试数据表").Filter = ""

    Tables("考试数据表").Filter = flt

End If

For Each nd1 As WinForm.TreeNode In e.Node.AllNodes '清除子节点的选中标记

    nd1.Checked = e.Node.Checked

Next

Dim pd As WinForm.TreeNode = e.Node.ParentNode

If pd IsNot Nothing Then

    Dim bb As Boolean = True

    For Each nd2 As WinForm.TreeNode In pd.Nodes

        If nd2.Checked = False Then

            bb = False

            Exit For

        End If

    Next

    pd.Checked = bb

End If

For Each nd In trv.AllNodes

    If nd.Checked Then

        Dim rts() As String = nd.FullPath.Split("\")

        Dim val As String = ""

        For i As Integer = 0 To rts.length - 1

            If val > "" Then

                val = val & " And "

            End If

            val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)

        Next

        If flt > "" Then

            flt = flt & " Or (" & val & ")"

        Else

            flt = val

        End If

    End If

Next

Tables("考试数据表").Filter = flt

 

请教如何修改前面的代码?


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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
代码问题  发帖心情 Post By:2023/9/11 17:57:00 [显示全部帖子]

终于重新做了一个例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2309.foxdb


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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/12 8:26:00 [显示全部帖子]

非常感谢蓝老师

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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
代码问题  发帖心情 Post By:2023/9/23 11:11:00 [显示全部帖子]

代码1

Dim g As New GroupTableBuilder("临时表1", DataTables("考试秩序"))

g.Groups.AddDef("选课信息_考点")

g.Groups.AddDef("选课信息_考试日期")

g.Groups.AddDef("选课信息_考试时间")

g.Groups.AddDef("考场信息_教室")

g.Totals.AddDef("考场信息_教室", AggregateEnum.Count, "次数")

Dim dt As DataTable = g.Build(True) '采用临时表汇总,统计型号根据内容多少自动延伸,代码:

Dim max As Integer = dt.Compute("max(次数)")

Dim dtb As New DataTableBuilder("统计表3")

dtb.AddDef("选课信息_考点", GetType(String), 16)

dtb.AddDef("选课信息_考试日期", GetType(String), 16)

dtb.AddDef("选课信息_考试时间", GetType(String), 16)

dtb.AddDef("考场信息_教室", GetType(String), 16)

Dim lst As New List(Of String)

For i As Integer = 1 To max

    dtb.AddDef("参考" & i & "_专业及考生数", GetType(String), 30)

Next

dtb.Build()'生成统计表

Dim r As Row

Dim dr As DataRow

For Each ss() As String In DataTables("考试秩序").GetValues("选课信息_考点|选课信息_考试日期|选课信息_考试时间|考场信息_教室")

    r = Tables("统计表3").AddNew   

    r("选课信息_考点") = ss(0)

    r("选课信息_考试日期") = ss(1)

    r("选课信息_考试时间") = ss(2)

    r("考场信息_教室") = ss(3)

    Dim drs As List(Of DataRow) = DataTables("考试秩序").Select("考场信息_教室='" & ss(3) & "' and 选课信息_考试时间='" & ss(2) & "' and 选课信息_考试日期='" & ss(1) & "' and 考场信息_考点='" & ss(0) & "'", "考场信息_教室")

    For j As Integer = 0 To drs.Count - 1

        dr = drs(j)

        r("参考" & (j + 1) & "_专业及考生数") = dr("选课信息_试卷名称") & “(” & dr("选课信息_参考人数") & “)”

    Next

    '以下代码增加参考人数合计

    Dim a As String

    a = Tables("考试秩序").DataTable.Compute("Sum(选课信息_参考人数)", "考场信息_教室 = '" & ss(3) & "' and 选课信息_考试时间='" & ss(2) & "' and 选课信息_考试日期='" & ss(1) & "' and 考场信息_考点='" & ss(0) & "'")

    DataTables("统计表3").DataCols.Add("参考人数合计", GetType(Double), a)   

Next

MainTable = Tables("统计表3") '打开生成的统计表

 

代码2

Dim g As New GroupTableBuilder("临时表2", DataTables("考试秩序"))

g.Groups.AddDef("选课信息_考点")

g.Groups.AddDef("选课信息_考试日期")

g.Groups.AddDef("选课信息_考试时间")

g.Groups.AddDef("选课信息_试卷名称")

g.Totals.AddDef("选课信息_试卷名称", AggregateEnum.Count, "次数")

Dim dt As DataTable = g.Build(True) '采用临时表汇总,统计型号根据内容多少自动延伸,代码:

Dim max As Integer = dt.Compute("max(次数)")

Dim dtb As New DataTableBuilder("统计表2")

dtb.AddDef("选课信息_考点", GetType(String), 16)

dtb.AddDef("选课信息_考试日期", GetType(String), 16)

dtb.AddDef("选课信息_考试时间", GetType(String), 16)

dtb.AddDef("选课信息_试卷名称", GetType(String), 30)

dtb.AddDef("选课信息_参考人数", GetType(String), 16)

Dim lst As New List(Of String)

For i As Integer = 1 To max

    dtb.AddDef("考室" & i & "_考室及考生数", GetType(String), 30)

Next

dtb.Build()'生成统计表

Dim r As Row

Dim dr As DataRow

For Each ss() As String In DataTables("考试秩序").GetValues("选课信息_考点|选课信息_考试日期|选课信息_考试时间|选课信息_试卷名称")

    r = Tables("统计表2").AddNew

    r("选课信息_考点") = ss(0)

    r("选课信息_考试日期") = ss(1)

    r("选课信息_考试时间") = ss(2)

    r("选课信息_试卷名称") = ss(3)

    Dim drs As List(Of DataRow) = DataTables("考试秩序").Select("选课信息_试卷名称='" & ss(3) & "' and 选课信息_考试时间='" & ss(2) & "' and 选课信息_考试日期='" & ss(1) & "' and 考场信息_考点='" & ss(0) & "'", "考场信息_教室")

    For j As Integer = 0 To drs.Count - 1

        dr = drs(j)

        r("考室" & (j + 1) & "_考室及考生数") = dr("考场信息_教室") & “(” & dr("选课信息_参考人数") & “)”

    Next

    r("选课信息_参考人数") = dr("选课信息_参考人数")  

Next

 

MainTable = Tables("统计表2") '打开生成的统计表


老师,上述两段代码,均出现参考人数统计错误,请蓝老师帮忙修改一下。


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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/23 12:52:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:f5d84da5-2.png
图片点击可在新窗口打开查看
问题在人数这里?
图片点击可在新窗口打开查看此主题相关图片如下:913ab32b-1.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/23 14:33:00 [显示全部帖子]

蓝老师,请稍等一下,我做个实例发上来

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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/23 15:23:00 [显示全部帖子]

麻烦蓝老师看看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目923.foxdb


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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/23 16:51:00 [显示全部帖子]

首先,考室设置,按照优先使用的先后顺序进行排考室。其次,同一时间考试的课程(试卷名称),尽量排在一起,比如101考室没有排完的,102考室继续排。目前是考试人数多的课程不能分考室。我感觉是不是内部函数出问题了?请老师帮忙先解决这个问题

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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/26 12:31:00 [显示全部帖子]

Dim ex As New Exporter '必需
ex.SourceTableName = "统计表2" '指定导出表的名称,字符型   必需
ex.FilePath = "c:\Data\单门课程对应所有的考室目录一览表1" '指定目标文件(保存路径及文件名)  必需
'ex.FilePath = "ProjectPath &"Reports \ 单门课程对应所有的考室目录一览表1.xls"  
ex.Format = "Excel" '导出格式为Excel,包括Access、Access2007、Excel、Excel2007、dBASE  必需
'ex.Fields = "日期, 客户, 数量, 单价, 产品"   '可指定导出字段
ex.Filter = "[选课信息_考试地址] = '考点1'" '指定导出条件
ex.Export() '开始导出  必需
MessageBox.Show("报表已生成,请查看!", "提示")
老师,上面的代码能用,我想将文件保存到下面的代码位置中,请问怎么修改?
'ex.FilePath = "ProjectPath &"Reports \ 单门课程对应所有的考室目录一览表1.xls"  

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


加好友 发短信
等级:三尾狐 帖子:618 积分:4560 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2023/9/26 13:56:00 [显示全部帖子]

谢谢,老师

 回到顶部
总数 41 上一页 1 2 3 4 5 下一页