開發環境: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.運行效果圖:

