以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何利用CheckBox的勾选生成统计数据?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=136470)

--  作者:keli0917
--  发布时间:2019/6/13 23:20:00
--  如何利用CheckBox的勾选生成统计数据?

总的思路,先按一定条件提取数据到窗体的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
--  发布时间:2019/6/13 23:24:00
--  
table1表是用SQL从几个表中提取相应字段合成的一个表。
--  作者:有点甜
--  发布时间: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
--  发布时间:2019/6/14 20:59:00
--  
可能我没说清楚,帮忙再看一下。我上传了一个实例,实例中有一个窗口,帮忙写一下代码。谢谢。
--  作者:keli0917
--  发布时间:2019/6/14 20:59:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


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

--  作者:有点蓝
--  发布时间: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") \'打开生成的统计表