水晶報表主從關系


開發環境:VS2010

水晶報表連接數據源有兩種模式,Pull和Push兩種,即拉和推。

  •     用水晶報表的“數據庫專家”直接連接數據庫,報表數據會即時顯示在報表上就是“拉”模式,即把數據直接從數據庫拉到報表上,這樣與程序沒有直接關系,即報表與數據庫之間多了一個數據連接,與程序的數據庫連接沒有直接關系。
  •     先在程序中建立數據集,然后設計報表,再用程序填充數據到數據集,這樣報表會顯示這些數據,這就是“推”模式。

以下為開發水晶報表的步驟:

  1. 下載水晶報表的插件並安裝
  2. 打開vs2010,新建一個WinForm程序,在“資源管理器”中設置此項目的屬性,把應用程序的目標框架“.Net Framework 4 Client Profile”改成“.Net Framework 4”即可。這樣才能把工具箱中的crystalReportViewer和crystalReportDocument組件顯示出來。
  3. 建立“數據庫連接”新連接,本例以數據庫為原sql2000中的 Northwind數據庫,用它的orders 及order details表來做報表。
  4. 在此項目右鍵->"添加-新建項"彈出框中選擇左邊的“數據”並選擇右邊的“數據集”,會產生一個*.xsd的頁面,把第3步中建立的orders及order details表拖到此頁面中即可(兩者關系已建立),如下圖
  5. 給此項目添加一水晶報表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.運行效果圖:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM