报表(一)

好吧,今天就讲一下一些有意思的报表,存储过程+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的数据库助手类,用来连接数据库然后就新建一个网站,像下面这样

clip_image001

在新建网页中拖入一个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;

}

 

页面的后台代码页代码,好了啦就这样就行了,你会发现报表会变成下面的这个样子

clip_image003

为什么会有两个表头的,这个就是为什么要做表头表插入两条数据,这样是为了能合并相同的表头,就好像下面的一样

clip_image004

好啦,不说了,下一篇在一些这个报表的一些外在的修饰,下下篇写这个报表的一些内在优化,今天就写那么多了啦,早点睡吧,亲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值