Table轻松实现报表
最近做了十几个报表模块,对Table控件颇有心得,与大家分享一下
首先看看为什么要使用Table控件
看一下这个报表,各位可能要笑了,这个用DataGrid做就可以了
但问题是数据并不是直接从数据库取出来的,要经过程序的多重循环统计,这个表在数据库中没有原形,所以要使用DataTable 就要重新构造表结构,很烦人地: P
而使用Table 就容易的多了,构造表用两层循环,外层循环生成TableRow,内层循环再循环统计出数据然后把数据生成TableCell添加入TableRow
下面再看看
这个用于分类统计,怎么样,你的DataGrid是否能如此自由的输出
动态生成列
怎么样,是否你的程序也需要这种更容易控制的输出呢
优势与劣势
注意(MSDN) 通过编程方式对表行或单元格进行的添加或修改,不会在向服务器执行发送操作后仍继续保留。表行和单元格是其自身的控件,而不是 Table 控件的属性。对表行或单元格进行的更改必须在向服务器进行各次发送之后重建。如果需要进行大量修改,则使用 DataList 或 DataGrid 控件而不是 Table 控件。
不保存ViewState,性能没话说,缺点是无法交互。各取所需吧
下面看看Table 的用法
Table本身没有方法为自己添加行,添加行的操作是这样的
TableRow trow = new TableRow();//创建TableRow对象
Table.Rows.Add(trow);//将对象添加到Table的Rows 集合
只添加行是没有意义的,下面给行添加单元格
TableCell tcell = new TableCell();//创建
tcell.Text = "测试单元格";
trow.Cells.Add(tcell);//添加入Cells集合
这就是所有操作。。。
下面是一点心得
对于列比较多的表但是生成新TableCell就够受了,用如下函数
public static TableCell newCell(string Text)
{
TableCell cell=new TableCell();
if(Text!="0"&&Text!="0.00") //为了过滤0,满屏幕的0没准会把你的客户吓跑
cell.Text=Text;
else
cell.Text="";
return cell;
}
public static TableCell newCell(string Text,string ToolTip) //重载函数,对于比较长的表给单元格添加ToolTip不会让你的客户手足无措
{
TableCell cell=new TableCell();
if(Text!="0"&&Text!="0.00")
cell.Text=Text;
else
cell.Text="";
cell.ToolTip=ToolTip;
return cell;
}
public static TableCell newCell(string Text,string ToolTip,System.Web.UI.WebControls.HorizontalAlign align) //还没找到更好的控制整列水对齐方式的方法: (
{
TableCell cell=new TableCell();
if(Text!=""&&Text!="0.00")
{
cell.Text=Text;
cell.HorizontalAlign=align;
}
else
cell.Text="";
cell.ToolTip=ToolTip;
return cell;
}
so,over