水晶报表主从关系
开发环境:VS2010
水晶报表连接数据源有两种模式,Pull和Push两种,即拉和推。
- 用水晶报表的“数据库专家”直接连接数据库,报表数据会即时显示在报表上就是“拉”模式,即把数据直接从数据库拉到报表上,这样与程序没有直接关系,即报表与数据库之间多了一个数据连接,与程序的数据库连接没有直接关系。
- 先在程序中建立数据集,然后设计报表,再用程序填充数据到数据集,这样报表会显示这些数据,这就是“推”模式。
以下为开发水晶报表的步骤:
- 下载水晶报表的插件并安装
- 打开vs2010,新建一个WinForm程序,在“资源管理器”中设置此项目的属性,把应用程序的目标框架“.Net Framework 4 Client Profile”改成“.Net Framework 4”即可。这样才能把工具箱中的crystalReportViewer和crystalReportDocument组件显示出来。
- 建立“数据库连接”新连接,本例以数据库为原sql2000中的 Northwind数据库,用它的orders 及order details表来做报表。
- 在此项目右键->"添加-新建项"弹出框中选择左边的“数据”并选择右边的“数据集”,会产生一个*.xsd的页面,把第3步中建立的orders及order details表拖到此页面中即可(两者关系已建立),如下图
- 给此项目添加一水晶报表CrystalReport1.rpt,此处我建立了一个空白报表,然后在此报表左边的“字段资源管理器”中设置“数据库字段”,把第4项的两个ado.net数据集加到这里面来,“推”模式必须要用到ado.net数据集,如下图:
6.因我们建立的是主从表,以是orderid为条件分组的,所在把order details中的一些字段拖动到报表的“详细资料”段中,
7.建立分组:在“详细资料”空白处右键,插入个组,并以orders.orderid为分组条件,如下图
8.把orders表中的一些字段拖放到报表的"组头"部分,并给其它段中添加一些其它东西,设计完后如下图:
9.以上做完后,就要用程序把数据填充到数据集中,这样报表才能显示出来。打开Form1的设计部分,把工具箱中的crystalReportViewer拖放到此窗体上,主要用来显示上步中我们建立的报表。 在窗体的Load事件中写如下代码:
private void Form1_Load(object sender, EventArgs e) { string connstr = ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.NorthwindConnectionString"].ConnectionString; SqlConnection conn = new SqlConnection(connstr); conn.Open(); try { SqlDataAdapter sda = new SqlDataAdapter("select * from Orders", conn); DataSet ds = new DataSet("ds"); sda.Fill(ds, "Orders"); sda.SelectCommand.CommandText = "select * from [Order Details]"; sda.Fill(ds, "Order Details"); ReportDocument rd = new ReportDocument(); rd.Load(@"C:\Users\Administrator\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\CrystalReport1.rpt"); rd.SetDataSource(ds); this.crystalReportViewer1.ReportSource = rd; } catch (System.Exception ex) { MessageBox.Show(ex.Message); } finally { conn.Close(); } }
代码中的sda.Fill(ds,表名称)中的表名称就是建立xsd页面中表的名称,不一定是数据库表的默认名称,你可以随便改,程序集的数据库连接在app.config配置文件中。ReportDocument是报表的内容,用到填充数据的。
10.运行程序,会发现弹出错误信息,此时要改动app.config的配置文件,主要改动<startup>节,web项目中不用改动,如下为app.config的内容:
<?xml version="1.0"?> <configuration> <configSections> </configSections> <connectionStrings> <add name="WindowsFormsApplication1.Properties.Settings.NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=abc123..." providerName="System.Data.SqlClient"/> </connectionStrings> <!--<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>--> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
11.运行效果图:
分类:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统