我想实现下面的效果:品种   名称    规格编号     流水编号   入库单编号   入库时间      购入量 单价 金额 已使用
大料   丁苯 丁苯  RKM20081224001    NO 1       2008-12-24 20 1 20 20
大料   丁苯 丁苯  RKM20081224002    NO 2       2008-12-24 22 1 22 22
大料   丁苯 丁苯  RKM20081224003    NO 3       2008-12-24 33 1 33 33
大料   丁苯 丁苯  RKM20081224004    NO 4       2008-12-24 50 1 50 50
大料   丁苯 丁苯  RKM20081224005    NO 5       2008-12-24 30 1 30 30
大料   丁苯 丁苯  RKM20081224006    NO 6       2008-12-24 15 1 15 1
大料   丁苯 丁苯  汇总信息                170 170 156      (这一条为汇总信息)
大料   丁晴 丁晴  RKM20081224001    NO 1       2008-12-24 22 2 44 0
大料   顺丁 顺丁  RKM20081224005    NO 5       2008-12-24 20 1 20 0
大料   顺丁 顺丁  RKM20081224006    NO 6      2008-12-24 30 1 30 0
大料   顺丁 顺丁  汇总信息                 50 50 0         (这一条也为汇总信息)当按照前三列分组时,如果记录数大于1条,则自动添加一条汇总信息,否则不添加汇总信息!!想了半天也想不出来,请那位高人指点一下,不胜感激!!最好能有源码,谢谢!!!!!
下面是建表脚本
CREATE TABLE [dbo].[InCome_M_Detail](
[Detail_ID] [int] IDENTITY(1,1) NOT NULL,
[AutoCode] [nvarchar](50) NOT NULL,
[Product_Class_ID] [nvarchar](20) NOT NULL,
[Product_Info_ID] [nvarchar](20) NOT NULL,
[Product_Size_ID] [nvarchar](20) NOT NULL,
[Unit] [nvarchar](50) NULL,
[UnitPrice] [decimal](18, 2) NOT NULL,
[Quantity] [decimal](18, 3) NOT NULL,
[TotalPrice] [decimal](18, 2) NOT NULL,
[Re] [nvarchar](500) NULL,
[Use_Quantity] [decimal](18, 3) NULL,

 CONSTRAINT [PK_INCOME_DETAIL] PRIMARY KEY CLUSTERED 
(
[Detail_ID] ASC
)
) ON [PRIMARY] 
select * from InCome_M_Detail
--truncate table InCome_M_Detailinsert into  InCome_M_Detail
select 'RKM20081224001','大料','丁苯','丁苯','吨',1.00,20.000,20.00,'',20.000 union
select 'RKM20081224001','大料','丁晴','丁晴','吨',2.00,22.000,44.00,'',0      union
select 'RKM20081224002','大料','丁苯','丁苯','吨',1.00,22.000,22.00,'',22.000 union
select 'RKM20081224003','大料','丁苯','丁苯','吨',1.00,33.000,33.00,'',33.000 union
select 'RKM20081224004','大料','丁苯','丁苯','吨',1.00,50.000,50.00,'',50.000 union
select 'RKM20081224005','大料','丁苯','丁苯','吨',1.00,30.000,30.00,'',30.000 union
select 'RKM20081224006','大料','丁苯','丁苯','吨',1.00,15.000,15.00,'',10.000 union
select 'RKM20081224006','大料','顺丁','顺丁','吨',1.00,30.000,30.00,'',0.000  union
select 'RKM20081224005','大料','顺丁','顺丁','吨',1.00,20.000,20.00,'',0.000 

解决方案 »

  1.   

    自己建立dataset table 一行一行的写 包括你的统计行 列字段类型都改为字符串的 不要绑定 先构造dataset 自动装载datagridview.datsoure=dataset.table[0]
    在构造的时候遇到统计行 将统计数据写入到需要的列 不需要的置空
    笨办法 希望能帮到你了 
      

  2.   

    你到网上搜一搜winform datagridview如何制作统计行 原理差不多了
      

  3.   

    首先使用SQL select× from InCome_M_Detail order by 规格编号这样的话,相同 规格编号 的记录就被放到一起了然后你不是要使用 dataview控件来显示吗??你就一条一条自己添加上去,但是记得申明一个临时的string 用来存放上一个 规格编号,在你添加一条数据之前,通过这个string判断上个记录是否和当前的记录是一条(在我的想法中,相同的产品应该是规格编号相同),如果是同一个产品的话,那么好类,你可以用一个集合来记录你要统计的数据了,如果不是同一个产品,那么你就清空这个集合,并且当前这条记录的统计结果就是当前这条记录了。办法是笨点,但是直接,也不需要什么高深的算法和麻烦的要死的SQL语句。
      

  4.   

    sql。(名称,流水编号 分组) union (名称,流水编号直接查为“汇总信息”  分组)+名称,流水编号排序。
      

  5.   

    能说得详细点么?最好能给出Sql语句,万分感谢!!!!!!!!!
      

  6.   


    你这样的其实最好的做法是填充的时候把dataGridView的数据源重新构造。   
    比如dataGridView1.DataSource的数据源是ds.Tables[0],那么你可以在ds.Tables[0]里增加一统计行
    重新构建之后再填充,直接使用Convert.ToInt32(dt.Compute("要统计列的列名",""))得到汇总的信息
    赋级新增行的sum就行了,然后再将这个数据源绑定dataGridView
      

  7.   

    嗯,你还可以用两条sql语句读数据。一条读所有数据,一条用group汇总读出来
    返回两个ds.然后对两个ds进行比对插入数据
    自己试下
      

  8.   

    用listview做不可以吗?我觉得会简单些 
      

  9.   

    思想是这样的select * from 
    (
    select name,sum([Quantity]) as [Quantity],sum([TotalPrice])as [TotalPrice],sum([Use_Quantity])as [Use_Quantity],0 as [Detail_ID] ,'合计' as [AutoCode]
     , '' as [Product_Class_ID],'' as [Product_Info_ID] ,'' as [Product_Size_ID]
    ,'' as [Unit], 0 as [UnitPrice],'' as[Re] 
    from(
    select [Product_Class_ID]+[Product_Info_ID]+[Product_Size_ID] as name
            ,[Quantity],[TotalPrice],[Use_Quantity]         
        from InCome_M_Detail    
    )
    t
    group by name having count(name)>1union allselect [Product_Class_ID]+[Product_Info_ID]+[Product_Size_ID] as name,
    [Quantity] ,[TotalPrice] ,[Use_Quantity]
    ,[Detail_ID] ,[AutoCode] 
    ,[Product_Class_ID],[Product_Info_ID] ,[Product_Size_ID]
    ,[Unit], [UnitPrice],[Re]
    from InCome_M_Detail)a order by name
      

  10.   

    细节还要调整个
    先求出统计的值,再用UNION与名细合并.