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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、.Rowsij.ToString(); return dtx1; 就是來(lái)源表按照BigTable的結(jié)構(gòu)寫(xiě)到BigTable里面去。很簡(jiǎn)單的代碼,但也是這個(gè)方案的核 心。第五步:功能實(shí)現(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("請(qǐng)選擇表名"); comboBox1.Focus(); return; /打開(kāi)數(shù)據(jù)庫(kù)連接 DataTable dt1 = new

8、DataTable(); DataTable dtx = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter(); OleDbConnection cn = new OleDbConnection(connstr); /打開(kāi)選擇的表(注意進(jìn)行錯(cuò)誤保護(hù)) /如果要實(shí)現(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ù)集,注意,一個(gè)報(bào)表用一個(gè)數(shù)據(jù)集。 myReport.SetDataSource(dtx); crystalReportViewer1.ReportSource = myReport; crystalReportViewer1.RefreshReport(); private void Form1_Load(objec

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論