报表(一)
好吧,今天就讲一下一些有意思的报表,存储过程+GridView做成的报表
今天就少一点讲一下显示数据,下一个再讲导出Execl表以及在线预览等等的其他必要功能
先上存储过程:
alter proc Text_proc as begin --创建表头表 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Temp_Head]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop TABLE Temp_Head CREATE Table Temp_Head ( FuncID varchar(100), FuncCode Varchar(100), FuncName varchar(100) ) --插入表头表数据 INSERT INTO Temp_Head(FuncID,FuncCode,FuncName) VALUES('标志','编号','名称') INSERT INTO Temp_Head(FuncID,FuncCode,FuncName) VALUES('标志','编号','名称') --创建数据源表 IF exists (SELECT 1 FROM sysobjects WHERE id=object_id('Temp_Data') AND type ='U') drop TABLE Temp_Data CREATE Table Temp_Data ( FuncID varchar(100), FuncCode Varchar(100), FuncName varchar(100) ) --将数据插入数据源表 INSERT into Temp_Data SELECT TOP 5 FuncID ,FuncCode ,FuncName FROM TbSmFunction end
还要说明的是这个表式我临时建立的表,用来测试报表的
相信各位看客都看得懂吧这个存储过程吧
可是不知道各位看客没有发现为什么表头表要插入两条数据的,哈哈,这个先不告诉你们先往后看吧
好吧,存储过程写好了,现在要编写程序的部分了
老规矩,还是要先去这里:
下载一个叫SQLHELPER的数据库助手类,用来连接数据库然后就新建一个网站,像下面这样
在新建网页中拖入一个GrridView以及一个Button并且修改Button中的Text属性为“显示数据” 还要将GridView的ShowHeader="false" 就行了
SqlHelper sh = new SqlHelper(); protected void Page_Load(object sender, EventArgs e) { //执行存储过程,将数据插入到数据表中 string ProcSQL = "Text_proc"; if (sh.ExecuteNonQuery(ProcSQL, CommandType.StoredProcedure) > 0) { Response.Write("亲,存储过程执行成功了哦"); } else { Response.Write("亲,存储过程没有执行成功哦"); } } protected void Unnamed1_Click(object sender, EventArgs e) { //显示报表数据 //获取数据表中数据 string SQL_Data = @"select * from Temp_Head"; //获取表头标中的数据 string SQL_Head = @"select * from Temp_Data"; DataTable dt_Head = sh.ExcuteQuery(SQL_Head, CommandType.Text); DataTable dt_Data = sh.ExcuteQuery(SQL_Data, CommandType.Text); //组装数据源 GridView1.DataSource = Assembly(dt_Data, dt_Head); GridView1.DataBind(); } private DataTable Assembly(DataTable dt_Head, DataTable dt_Data) { //将数据源中的表头去掉 //dt_Data.Rows.RemoveAt(0); for (int i = 0; i < dt_Data.Rows.Count; i++) { DataRow dr = dt_Data.Rows[i]; DataRow drNew = dt_Head.NewRow(); //赋值drNew for (int j = 0; j < dt_Data.Columns .Count; j++) { if (dr[j] != DBNull.Value && dr[j] != null) { drNew[j] = dr[j].ToString (); } } //将新行添加进表头表 dt_Head.Rows.Add(drNew); } //去掉表头表中的第一行 //dt_Head.Columns.RemoveAt(0); //dt_Head.Rows.RemoveAt(0); return dt_Head; }
页面的后台代码页代码,好了啦就这样就行了,你会发现报表会变成下面的这个样子
为什么会有两个表头的,这个就是为什么要做表头表插入两条数据,这样是为了能合并相同的表头,就好像下面的一样
好啦,不说了,下一篇在一些这个报表的一些外在的修饰,下下篇写这个报表的一些内在优化,今天就写那么多了啦,早点睡吧,亲