数据库中的数据如下:部门 车型 数量
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的实现方法,其它控件能实现也行
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 type1 2
A公司 2 type2 3
3 type3 1
合计 6
1 type1 3
B公司 2 type3 2
合计 5
C公司 1 type2 1
合计 1
总计 12更正说明:相同公司的行需要合并
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控件来做模板,最后绑定上去。不过我想如果要一次性的做到表格那样估计比较麻烦。
建议楼主还是放弃使用datagrid或其它控件的好,感觉有点自寻烦恼。
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;
}
}
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
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
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里写
DataSet myDataSet = new DataSet();
DataTable myDataTable = new DataTable("tabVdata");
DataColumn myColumn;DataRow myDataRow = myDataTable.NewRow();请问这种方法有没有类似rowspan的属性可设置