動態(tài)(萬能)水晶報表任意表,任意列,動態(tài)格線調(diào)整_第1頁
動態(tài)(萬能)水晶報表任意表,任意列,動態(tài)格線調(diào)整_第2頁
動態(tài)(萬能)水晶報表任意表,任意列,動態(tài)格線調(diào)整_第3頁
動態(tài)(萬能)水晶報表任意表,任意列,動態(tài)格線調(diào)整_第4頁
動態(tài)(萬能)水晶報表任意表,任意列,動態(tài)格線調(diào)整_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、本文并沒有什么技術(shù)性,主要是實現(xiàn)的思路。本文的圖文版本同步發(fā)布于:轉(zhuǎn) 載請注明出處。=有 很多很多次被問到:為什么水晶報表那么麻煩,每做一張報表都要選表,畫線畫格子,有沒有一種方法可以一勞永逸?做一個模板,然后用不同的 表都能用?還有就是能不能動態(tài)選擇列,而且選擇列后能報表能自動適用這個變化?甚至有些人也因為放棄了水晶報表,實際上這些都是水晶報表 可以做到的。我之前曾零散地寫過幾篇,在論壇和博客中都曾反復(fù)講解過思路,但是并沒有系統(tǒng)地去解決這個問題,在這里,我來講解一下原理和 實現(xiàn)。希望該文章,能基本上解決這個問題。當(dāng)然,這個也不是真正萬能的,也有其適用環(huán)境和局限。本文適用于普通列表型(表格型)

2、清單顯示,不適于復(fù)雜格式及模板上運算的情況。本文開發(fā) 環(huán)境:VS2005 / CR XI R2 for .Net第一步:新建一個C#的水晶報表的WinForm空白項目。在彈出報表數(shù)據(jù) 源選擇框的時候,不要選擇任何任何數(shù)據(jù)源,直接點確定,創(chuàng)建一個空白報表。第二步:項目中添加一個Dataset1.xsd,手 工建立一個DataTable,命名為BigTable。建立6個字段,全部為String型。為什么用6個呢?這個數(shù)字6的確立,是根據(jù)你的實 際需要,這個表的列的數(shù)目,需要大于等于你所需要操作的事實表的最大列數(shù)。為什么用String型呢?我們知道基本上所有的基礎(chǔ)數(shù)據(jù)類型都可以轉(zhuǎn) 換為String,

3、這樣我們的這個表基本上可以容納所有的數(shù)據(jù)類型。在報表中添加這個Bigtable.將6個字段拖到詳細(xì)資料節(jié)。對齊。注意!不要使用框和線來畫格子,這里用的是字段邊框,初次操作可以暫時不用,我后面會專門講一下這個格線的處理。好 了,這樣我們的萬能模板就做成了。很簡單,是嗎?呵呵。第三步:在winform上拖上一個combox,一個button,用默認(rèn)名稱 即可。combox1用來選表的名稱。 這樣界面也完成了。第四步:實現(xiàn)原理上面的幾步下來,有經(jīng)驗的朋友基本上看出來我們是要用PUSH模式來實現(xiàn)了。既 然我們已經(jīng)在報表里用到了BigTable,那么我們要傳遞給報表的數(shù)據(jù),也就要整形成BigT

4、able的樣子。也就是說,只要能把來源數(shù)據(jù)表的 數(shù)據(jù),整形成BigTable的樣子,就能用這一個模板顯示出來。而不用管來源表從哪里來,表名是什么,有幾個字段(但是字段數(shù)目需要小于等于 6),字段名是什么,有多少數(shù)據(jù)。從而達到“萬能”的目的。我把這個工作簡單封裝了一下,做了個小方法。 C# codeclass clsDyCrystalReportCore / <summary> / 將傳入的datatable轉(zhuǎn)換成報表模板所需要的datatable / 數(shù)據(jù)全部轉(zhuǎn)換為string / </summary> / <param name="dt&qu

5、ot;>來源表</param> / <returns>報表模板所需要的datatable</returns> public DataTable dtx(DataTable dt) DataSet1.BigTatableDataTable dtx1 = new DataSet1.BigTatableDataTable(); object obj = new object /特別注意:所選擇的表的列的數(shù)目需<=Bigtable的字段數(shù)目 /請自行填寫保護代碼 for (int i = 0 for (int j = 0 dtx1.Rowsij = dt

6、.Rowsij.ToString(); return dtx1; 就是來源表按照BigTable的結(jié)構(gòu)寫到BigTable里面去。很簡單的代碼,但也是這個方案的核 心。第五步:功能實現(xiàn)。C# codeusing System;usingusing System.ComponentModel;using System.Data;using System.Text;usingusing CrystalDecisions.Shared;usingusingusingnamespace DyCrystalReportDemo public partial class Form1 : Form publ

7、ic Form1() InitializeComponent(); private void button1_Click(object sender, EventArgs e) String tblName = comboBox1.Text ; String connstr = "bbtcrall.mdb" + "" if (tblName = "") MessageBox.Show("請選擇表名"); comboBox1.Focus(); return; /打開數(shù)據(jù)庫連接 DataTable dt1 = new

8、DataTable(); DataTable dtx = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter(); OleDbConnection cn = new OleDbConnection(connstr); /打開選擇的表(注意進行錯誤保護) /如果要實現(xiàn)任意列,只要更改此處的SQL為具體的字段即可 da = new OleDbDataAdapter("SELECT * From " + tblName, cn); da.Fill(dt1); /處理ds1 clsDyCrystalReportCo

9、re xCore = new clsDyCrystalReportCore(); dtx = xCore.dtx(dt1); ReportDocument myReport = new ReportDocument(); string"crystalreport1.rpt" myReport.Load(reportPath); /綁定數(shù)據(jù)集,注意,一個報表用一個數(shù)據(jù)集。 myReport.SetDataSource(dtx); crystalReportViewer1.ReportSource = myReport; crystalReportViewer1.RefreshReport(); private void Form1_Load(objec

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論