报表类网站项目开发过程中,往往需要利用DATAGRID控件做一些统计类的报表,如每日报表统计某日每个时间段每个工站的生产情况,每周报表统计该周每天每个工站的生产情况,每月报表统计该月每一天每个工站的生产情况,总之花样可能很多,但做法总结起来,其实很简单,以每周报表为例.
效果如下:
星 期 | Total | Pass | Fail | Total | Pass | Fail | Total | Pass | Fail | Total | Pass | Fail |
星期一 | 0 | 0 | 0 | 1 | 1 | 0 | 2 | 2 | 0 | 3 | 3 | 0 |
星期二 | 1 | 0 | 1 | 2 | 1 | 1 | 3 | 2 | 1 | 4 | 3 | 1 |
星期三 | 2 | 0 | 2 | 3 | 1 | 2 | 4 | 2 | 2 | 5 | 3 | 2 |
星期四 | 3 | 0 | 3 | 4 | 1 | 3 | 5 | 2 | 3 | 6 | 3 | 3 |
星期五 | 4 | 0 | 4 | 5 | 1 | 4 | 6 | 2 | 4 | 7 | 3 | 4 |
星期六 | 5 | 0 | 5 | 6 | 1 | 5 | 7 | 2 | 5 | 8 | 3 | 5 |
星期日 | 6 | 0 | 6 | 7 | 1 | 6 | 8 | 2 | 6 | 9 | 3 | 6 |
做法步骤:
第一步:设计报表的格式Table:
private void InitTable()
{
//string [] strTableHead=new string [8];
//报表的第一列
strTableHead[0]="<table border='0' ,cellpadding='0',cellspacing='0' width='70',height='40'><tr><td align='center'>星期</td></tr></table>";
//报表的其他列
for(int i=1;i<5;i++)
{
strTableHead[i]="<table border='0' ,cellpadding='0',cellspacing='0' width='150',height='40'><tr><td align='center' colSpan='3'>第"+i.ToString()+"个工站</td></tr><tr><td align='center'>Total</td><td align='center'>Pass</td><td align='center'>Fail</td></tr></table>";
}
if(Table1==null)
{
Table1=new DataTable();
for (int i=0;i<5;i++)
{
Table1.Columns.Add(strTableHead[i]);
}
}
}
第二步:将要填充报表的内容存储到数组中storedata[i,j,3]中其中storedata[i,j,0]表示星期i+1第j+1个工站生产的总数.其中storedata[i,j,1]表示星期i+1第j+1个工站生产的Pass总数.其中storedata[i,j,2]表示星期i+1第j+1个工站生产的Fail总数.
for (int j=0;j<7;j++)
for (int m=0;m<6;m++)
{
storedata[j,m,0]=(j+m).ToString();
storedata[j,m,1]=m.ToString();
storedata[j,m,2]=j.ToString();
}
第三步:将数组中的内容绑定到Table,再设置datagrid控件的数据源为该Table就可以了.
private void BindTable(string [,,] storedata)
{
InitTable();
System.Data.DataRow row1=null;
for (int i=1;i<8;i++)
{
row1=Table1.NewRow();//新增一行
row1[strTableHead[0]]="<table border='0' ,cellpadding='0',cellspacing='0' width='70',height='40'><tr><td align='center'>星期"+i.ToString()+"</td></tr></table>";
string temp="";
for (int k=1;k<5;k++)
{
temp="<table border='1' cellpadding='0' cellspacing='0'><tr><td width='50' height='25' align='center'>"+storedata[i-1,k-1,0].ToString()+"</td><td width='50' height='25' align='center'>"+storedata[i-1,k-1,1].ToString()+"</td><td width='50' height='25' align='center'>"+storedata[i-1,k-1,2].ToString()+"</td></tr></table>";
row1[strTableHead[k]]="<table border='1' cellpadding='0' cellspacing='0'><tr><td width='50' height='25' align='center'>"+storedata[i-1,k-1,0].ToString()+"</td><td width='50' height='25' align='center'>"+storedata[i-1,k-1,1].ToString()+"</td><td width='50' height='25' align='center'>"+storedata[i-1,k-1,2].ToString()+"</td></tr></table>";
}
Table1.Rows.Add(row1);
}
System.Data.DataView source=null;
source=new DataView(Table1);
DataGrid1.DataSource=source;
DataGrid1.DataBind();
}