标签:
博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢!
想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式。
借由这个中转站,我们可以通过为它动态输入数据,然后再将数据导出到水晶报表,来达到得到有动态数据的水晶报表的目的。
仅在vs2008中,很多它自带的应用也可以达到中转站的作用,比如数组,数据集等。
博主最近刚在学SQL所以尝试了用VS连接数据库来做水晶报表。
1.首先,博主在SQL中创建了名为xxs的数据库,然后再在数据库xxs中创建了一张名为xxs_1的表格,同时在其中建立了名为ques的列。
2.然后回到vs2008,创建windows窗体应用程序(博主是为了给数据库录入数据才用窗体的,网友有其他方法就随意了。)
为程序写入代码:
1 SqlConnection conn2 = new SqlConnection(); 2 conn2.ConnectionString = "server=.;database=xxs;uid=sa;pwd=123"; 3 conn2.Open(); 4 SqlCommand cmd2 = new SqlCommand(); 5 cmd2.Connection = conn2; 6 cmd2.CommandType = CommandType.Text; 7 string sql2 = "insert into xxs_1(ques) values(@ques)"; 8 SqlParameter[] parameters2 = new SqlParameter[] 9 { 10 new SqlParameter("@ques", f) 11 12 }; 13 cmd2.CommandText = sql2; 14 cmd2.Parameters.AddRange(parameters2); 15 cmd2.ExecuteNonQuery(); 16 conn2.Close(); 17 cmd2.Dispose();
其中conn2.ConnectionString是SQL数据库的路径,字符串sql2是将要在SQL中执行的SQL语句,字符串f是要为 “列ques”添加的数据。
为了给列添加足够多的数据,博主用了循环语句,在这里就不细说了,毕竟只是对以上语句进行循环,为f反复赋值,再写入列而已。
3.完成了对数据的录入以后,我们就可以建立水晶报表了。
就如上所说,博主为了给数据库xxs录入数据,所以用了form窗体。
在窗体中博主应用了如下两个button组件。
其中“生成题库”就是应用第2步中的代码为数据库输入数据,而“预览报表”就是我们现在要讲的建立水晶报表了。
在写代码之前,博主先做了一些准备工作。
(1)连接数据库。
点击菜单栏的数据按钮/在打开的菜单中点击添加新的数据源/在弹出的数据源配置向导中选择从“数据库”获取数据源,点击下一步/点击新建连接/在弹出的添加连接窗口中写入服务器名(一般都是.(对,就是个“点”)),选择用SQL SEVER 身份验证,输入用户名和密码,然后就可以在“选择或输入一个数据库名”中写入数据库名了,然后点击确定,点击下一步/进入"选择数据库对象",选择你需要在水晶报表中显示的表和列,点击完成。
(2)创建水晶报表。
右键解决方案资源管理器下的第一个项目/在弹出的菜单栏中选择添加,点击新建项。/在弹出的添加新项中选择Reporting中的Crysal报表(如下)。/
/然后会弹出Crystal report库窗体,选择使用“报表向导“和”标准“,选择确定。/在标准报表创建向导中打开项目数据,打开ADO.NET数据集选择需要的数据库中的表,将它添加到右侧。点击下一步/选择需要的列,将它添加到右侧,点击下一步。/分组和记录选定我没用到,所以直接点击了下一步,样式我选择了表,点击完成。
至此,我们已经完成了对水晶报表的创建。
4,为水晶报表添加数据。
为了使”预览报表“功能可以完善一些,博主又在项目中添加了一个窗体应用程序Form2(如下)。
Form2中只添加一个CrystalReportViewer控件。
然后双击Form2窗体,写入代码:
1 CrystalReport1 cry = new CrystalReport1(); 2 SqlConnection conn = new SqlConnection(); 3 conn.ConnectionString = "server=.;database=xxs;uid=sa;pwd=123"; 4 conn.Open(); 5 SqlCommand cmd = new SqlCommand(); 6 cmd.Connection = conn; 7 cmd.CommandType = CommandType.Text; 8 string sql = "select ques from xxs_1 "; 9 cmd.CommandText = sql; 10 DataSet ds = new DataSet();//新建一个临时数据库 11 SqlDataAdapter adt = new SqlDataAdapter(); 12 adt.SelectCommand = cmd; 13 adt.Fill(ds, "inf");//将数据导入到ds中 14 DataTable dt = ds.Tables["inf"];//只是为了后面引用时方便点,直接写ds.Tables["inf"]也是可以的。
用以上代码取出数据库 xxs 中表 xxs_1 中的列 ques 中的数据。
最后再写入代码:
1 cry.SetDataSource(dt);
2 this.crystalReportViewer1.ReportSource = cry;
就可以将数据写入到水晶报表中去了。
5.当然,为了能够反复输入数据到SQL,再导出数据到水晶报表,我们需要在建立水晶报表后清空SQL数据库中数据,所以在结束了以上的一切后还要在最后写入代码:
1 SqlConnection conn1 = new SqlConnection(); 2 conn1.ConnectionString = "server=.;database=xxs;uid=sa;pwd=123"; 3 conn1.Open(); 4 SqlCommand cmd1 = new SqlCommand(); 5 cmd1.Connection = conn1; 6 cmd1.CommandType = CommandType.Text; 7 string sql1 = "truncate table xxs_1"; 8 cmd1.CommandText = sql1; 9 cmd1.ExecuteNonQuery(); 10 conn1.Close();
这样就完成了一张用SQL数据库作为数据中转站的动态数据水晶报表。
下面是效果演示:
当我运行程序按下“生成题库”是,程序会往数据库中添加数据,比如我要生成40道运算题,就可以得到这样的表
再当我按下”预览报表“时,便得到了这样的水晶报表:
标签:
原文地址:http://www.cnblogs.com/bg5247/p/4921874.html