Foxtable(狐表)用户栏目专家坐堂 → 如何利用CheckBox的勾选生成统计数据?


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

主题:如何利用CheckBox的勾选生成统计数据?

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


加好友 发短信
等级:童狐 帖子:254 积分:2415 威望:0 精华:0 注册:2018/5/21 16:49:00
如何利用CheckBox的勾选生成统计数据?  发帖心情 Post By:2019/6/13 23:20:00 [只看该作者]

总的思路,先按一定条件提取数据到窗体的table1,再用一个checkbox对TABLE1手工勾选处理,再把勾选中的生成分组统计表。

 

 

 

Dim cmd4 As New SQLCommand
        Dim dt4 As DataTable
        cmd4.C
        cmd4.CommandText = " Select  ****** where 日期 >= #" & fd & "# And 日期 <= #" & ld & "# "
        dt4 = cmd4.ExecuteReader()
Tables(e.Form.name & "_table1").DataSource =dt4

 

Dim gx As WinForm.CheckBox = e.Form.Controls("CheckBox1")

For Each r As Row In Tables(e.Form.name & "_table1").Rows
    If gx.Checked = True Then
        r.Checked = True
    Else
        r.Checked = False
    End If
Next

 

前面二段代码能搞定,主要是生成分组统计表的代码不知道怎么改,我想参考下面的代码。主要是想知道:

第一个问题    r.Checked = True 这个条件应该怎么加,加在哪里。

第二个问题    For Each nm() As String In DataTables("订单").GetValues("客户|产品")中,只能使用DATATABLES吗?不能用我上面生成的table1吗?要怎么改。谢谢。

 

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef(
"客户", Gettype(String), 16)
dtb.AddDef(
"产品", Gettype(String), 16)
dtb.AddDef(
"数量", Gettype(Integer))
dtb.AddDef(
"金额", Gettype(Double))
dtb.Build()

For Each
nm() As String In DataTables("订单").GetValues("客户|产品")
    Dim
dr As DataRow = DataTables("统计").AddNew()
    dr(
"客户") = nm(0)
   
dr("产品") = nm(1)
    dr(
"数量") = DataTables("订单").Compute("Sum(数量)","客户 = '" & nm(0) & "' And [产品] = '" & nm(1) & "'")
    dr(
"金额") = DataTables("订单").Compute("Sum(金额)","客户 = '" & nm(0) & "' And [产品] = '" & nm(1) & "'")
Next
MainTable
= Tables("统计")


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


加好友 发短信
等级:童狐 帖子:254 积分:2415 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2019/6/13 23:24:00 [只看该作者]

table1表是用SQL从几个表中提取相应字段合成的一个表。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/13 23:34:00 [只看该作者]

参考

 

Dim ls As New List(Of string)

For Each r As Row In Tables(e.Form.name & "_table1").Rows
    If gx.Checked = True Then
        r.Checked = True

        If ls.contains(r("第一列") & "|" & r("第二列")) Then

            ls.add(r("第一列") & "|" & r("第二列"))

        End If
    Else
        r.Checked = False
    End If
Next

 

然后循环ls即可,如

 

For Each str As String in ls

    msgbox(str.split("|")(0)) 

    msgbox(str.split("|")(1))

Next


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


加好友 发短信
等级:童狐 帖子:254 积分:2415 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2019/6/14 20:59:00 [只看该作者]

可能我没说清楚,帮忙再看一下。我上传了一个实例,实例中有一个窗口,帮忙写一下代码。谢谢。

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


加好友 发短信
等级:童狐 帖子:254 积分:2415 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2019/6/14 20:59:00 [只看该作者]

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


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

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


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/6/14 21:16:00 [只看该作者]

提取数据

Dim cmd4 As New SQLCommand
Dim dt4 As DataTable
cmd4.CommandText = " Select {订单}.[_Identify], 客户名称,产品,数量,单价,地址,电话 From {订单} Inner JOIN {客户资料} ON {客户资料}.[客户代码] = {订单}.[客户]"
dt4 = cmd4.ExecuteReader()

Tables(e.Form.name & "_table1").DataSource =dt4
Tables(e.Form.name & "_table1").AutoSizeCols

生成统计表

Dim t As Table = Tables("窗口1_Table1") 
Dim filter As String = ""
For Each r As  Row In t.GetCheckedRows()
    filter &= "," & r("_Identify")
Next
Dim b As New GroupTableBuilder("统计表1",t.DataTable)
b.Filter = "[_Identify] in (" &  filter.Trim(",") & ")"
b.Groups.AddDef("产品") '根据产品分组
b.Groups.AddDef("客户名称") 
b.Totals.AddDef("数量") '对数量进行统计
b.Totals.AddDef("单价") 
b.Build '生成统计表
MainTable = Tables("统计表1") '打开生成的统计表

 回到顶部