数据库中的数据如下:部门      车型   数量
A公司     type1     2
A公司     type2     3
A公司     type3     1B公司     type1     3
B公司     type3     2C公司     type2     1报表格式要求如下:部门    序号(自动计算)  车型     数量
A公司    1                type1     2
A公司    2                type2     3
A公司    3                type3     1
合计                                6 
B公司    1                type1     3
B公司    2                type3     2
合计                                5
C公司    1                type2     1
合计                                1
总计                                12求datagrid的实现方法,其它控件能实现也行 

解决方案 »

  1.   

    不好意思,报表格式有误,更正如下:部门    序号(自动计算)  车型     数量
             1                type1     2
    A公司    2                type2     3
             3                type3     1
    合计                                6 
             1                type1     3
    B公司    2                type3     2
    合计                                5
    C公司    1                type2     1
    合计                                1
    总计                                12更正说明:相同公司的行需要合并
      

  2.   

    DataSet ds = new DataSet();
    DataTable dr = new DataTable("Table"); DataColumn dc = new DataColumn("Department", typeof(string));
    dr.Columns.Add(dc);
    dc = new DataColumn("ID", typeof(int));
    dc.AutoIncrement = true;
    dr.Columns.Add(dc);
    dc = new DataColumn("Type", typeof(string));
    dr.Columns.Add(dc);
    dc = new DataColumn("Count", typeof(int));
    dr.Columns.Add(dc); ds.Tables.Add(dr);创建个这样的DataSet,然后应该使用Repeater控件来做模板,最后绑定上去。不过我想如果要一次性的做到表格那样估计比较麻烦。
      

  3.   

    表格够复杂的,你想一次绑定几乎不可能,建议自己写随机生成的表格。
    建议楼主还是放弃使用datagrid或其它控件的好,感觉有点自寻烦恼。 
      

  4.   

    一次绑定搞定!!!
    select * from (
    select deptname,type,amount,deptname as tmp1,1 as tmp2 from table1
    union 
    select '合计',type,sum(amount),deptname as tmp1,2 as tmp2 from table1 group by deptname,type
    union
    select '总计','',sum(amount),'' as tmp1,3 as tmp2 from table1 
    ) as t order by t.tmp1,t.tmp2有了这个sql语句绑定
    在DataGrid的ItemDataBound事件中调整合并行就可以了
    {
      if(e.Item.ItemIndex>-1)
      {
        判断下一个行是否有相同的公司名,如果是
        e.Item.Cells[0].Visible = false;
        int span = e.Item.Cells[0].RowSpan;
        DataGrid.Items[e.Item.ItemIndex+1].Cells[0].RowSpan = span+1;
      }
    }
      

  5.   

    做一个临时表(字段全为nvarchar型),把格式化好的数据存进去(按表格格式),然后查询绑定即可!
      

  6.   

    Eddie005(暴走005)的改了一下。就是你要的样子。
    SELECT deptname, Cartype, amount
    FROM (SELECT deptname, Cartype, amount, deptname AS tmp1, 1 AS tmp2
            FROM table1
            UNION
            SELECT '合计', '', SUM(amount), deptname AS tmp1, 2 AS tmp2
            FROM table1
            GROUP BY deptname
            UNION
            SELECT '总计', '', SUM(amount), '' AS tmp1, 3 AS tmp2
            FROM table1) t
    ORDER BY tmp1, tmp2
      

  7.   

    不好意思上面的“总计”在第一条,下面的就在最后了。SELECT *
    FROM (SELECT deptname, Cartype, amount, deptname AS tmp1, 1 AS tmp2
            FROM table1
            UNION
            SELECT '合计', '', SUM(amount), deptname AS tmp1, 2 AS tmp2
            FROM table1
            GROUP BY deptname
            UNION
            SELECT '总计', '', SUM(amount), 'z' AS tmp1, 3 AS tmp2
            FROM table1) table1
    ORDER BY tmp1, tmp2
      

  8.   

    DataGrid自动加一
    private void dgtest_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Item ||
    e.Item.ItemType == ListItemType.AlternatingItem)
    {
    e.Item.Cells[0].Text = Convert.ToString(this.dgtest.CurrentPageIndex*this.dgtest.PageSize+e.Item.ItemIndex + 1);
    }
    }
    先建立一个空白<asp:DataBound>在第一列,在DataGrid的_ItemCreated里写
      

  9.   

    我按照"做一个临时表(字段全为nvarchar型),把格式化好的数据存进去(按表格格式),然后查询绑定"的方法做的,不过不知道怎样将相同内容的行合并:请问这种方法怎样实现合并:
      
    DataSet   myDataSet   = new DataSet();
    DataTable myDataTable = new DataTable("tabVdata");
    DataColumn myColumn;DataRow myDataRow = myDataTable.NewRow();请问这种方法有没有类似rowspan的属性可设置