以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  ft前台表中用select集合行时如何合并相同行  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=136929)

--  作者:happyft
--  发布时间:2019/6/24 21:03:00
--  ft前台表中用select集合行时如何合并相同行

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


如上图同一个表中有产品编码,规格,品名相同的两行,只是数量不同,在sql数据库中处理可以用gruop by轻松合并
但在前台界面中,因为要根据临时勾选的行来处理,用下面这个语句要如何才能现将编码,品名规格相同的行合并汇总数量后与其他行形成行集合?
Dim drs As List(Of DataRow)

drs = DataTables("订单").Select("[产品] = \'PD01\' And [日期]= #1/4/1999#")
For Each
dr As Datarow In drs
    dr("折扣") = 0.12

Next 

谢谢!

--  作者:有点蓝
--  发布时间:2019/6/24 21:30:00
--  
应该使用GroupTableBuilder而不是Select
--  作者:HappyFt
--  发布时间:2019/6/24 22:15:00
--  
老师,我的目的不是要汇总数据统计,而是要汇总后将勾选行打印标签出来
Dim drs As List(of DataRow)
drs = DataTables("销售出库单_明细").Select("出库单号 = \'" & pr("出库单号") & "\'")
For i As Integer = 0 To drs.Count - 1
    Dim ra As New prt.RenderArea
    Dim rt As prt.RenderText
    ra.Width = Cint(Vars("tagW")) \'标签宽
    ra.Height = Cint(Vars("tagH")) \'标签高
    ra.Style.Spacing.All = 1
    ra.Style.Borders.All = New prt.Linedef(0.3, Color.black) \'设置边框
    ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never \'禁止水平分割
    ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never \'禁止垂直分割
    Doc.Body.ChildRen.Add(ra) \'将容器加入到报表中
    
    rt = New prt.RenderText
    rt.Text = company \'公司名称
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'垂直居中
    rt.Style.FontSize = prt_UpFontsize  \'字体大小(磅)
    \'rt.X = 30
    rt.Y = prt_Upspacing \'抬头与主体的间距  prt_Uplinespacing  \'行间距
    ra.Children.Add(rt) \'添加到容器中
    
    rt = New prt.RenderText
    rt.Text = "出库日期: " & pr("出库日期")
    rt.X = xL
    rt.Y =  "Prev.Bottom + 2 *" & sh \'主体首行与抬头两倍行距
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt) \'添加到容器中
    
    rt = New prt.RenderText
    rt.Text = "客户: " & pr("收货单位")
    rt.X = xL
    rt.Y =  "Prev.Bottom + " & sh  \'垂直坐标位于迁移对象之下的2毫米
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt) \'添加到容器中
    
    rt = New prt.RenderText
    rt.Text =  "品名: " & drs(i)("品名")
    rt.X = xL
    rt.Y = "Prev.Bottom + " & sh \'垂直坐标位于迁移对象之下的2毫米
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt)
    
    rt = New prt.RenderText
    rt.Text = "规格: " & drs(i)("规格")
    rt.X = xL
    rt.Y = "Prev.Bottom + " & sh \'垂直坐标位于迁移对象之下的2毫米
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt)
    
    rt = New prt.RenderText
    rt.Text = "数量: " & drs(i)("数量")
    rt.X = xL
    rt.Y = "Prev.Bottom + " & sh \'垂直坐标位于迁移对象之下的2毫米
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt)
    
    rt = New prt.RenderText
    rt.Text = "检验员: "
    rt.X = xL
    rt.Y = "Prev.Bottom + " & sh \'垂直坐标位于迁移对象之下的2毫米
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt)
    
    rt = New prt.RenderText
    rt.Text = "备注: " & drs(i)("备注")
    rt.X = xL
    rt.Y = "Prev.Bottom + " & sh \'垂直坐标位于迁移对象之下的2毫米
    rt.Style.FontSize = fs \'字体大小(磅)
    ra.Children.Add(rt)
    
Next
Doc.Preview() \'预览报表
现在的就是不知道怎么把相同行合并后生成集合drs,然后再遍历打印标签即可
老师的意思是用GroupTableBuilder生成一个临时表再遍历各行打印吗?

--  作者:有点蓝
--  发布时间:2019/6/24 23:05:00
--  
是的,生成一个临时表再遍历各行打印。使用select还要逐行判断比较,不更麻烦吗