C#之二十三 打印和水晶報表
視頻課堂https://edu.csdn.net/course/play/7621
C#程序設(shè)計及宿舍管理系統(tǒng)實戰(zhàn)
https://edu.csdn.net/course/detail/27107
打印組件介紹
打印是常用的的功能,打印的原理從本質(zhì)上和Windows窗體畫圖的原理是一樣的,你在窗體里面畫了一個圓,那么同樣的代碼,打印機也會在紙張的同一個位置打印了出一個圓,它們所不同的就是輸出終端而已,下面讓我們先來看一下關(guān)于打印的一些類。
1、PrintDocument類
PrintDocument組件用于設(shè)置一些屬性,這些屬性說明在基于Windows操作系統(tǒng)的應(yīng)用程序中要打印什么內(nèi)容以及打印文檔的能力,可將它與PrintDialog組件一起使用來控制文檔打印的各個方面,PrintDocument是最重的Windows打印對象,負責(zé)建立和其它打印對象的聯(lián)系,該組件的常用屬性及方法如下:
2、PrintPreviewDialog組件常用屬性及方法
屬性及方法
說明
DefalultPageSetting(屬性)
獲取或設(shè)置頁設(shè)置,這些頁設(shè)置用作打印的所有頁的默認設(shè)置
DocumentName(屬性)
獲取或廢置打印文檔時要顯示的文檔的名
OriginAtMargins(屬性)
獲取或設(shè)置 一個值該值批示與頁關(guān)聯(lián)的圖形對象的位置是位于用戶指定邊距內(nèi)還是位于該頁可打印區(qū)域的左上角
PrintController(屬性)
獲取或設(shè)置指導(dǎo)打印進程的打印控制器
PrintSetting(屬性)
獲取或設(shè)置對文檔進行打印的打印機
Print(方法)
開始文檔的打印進程
PrintPreviewDialog組件預(yù)先配置的對話框,用于顯示PrintDocument組件在打印時的外觀。該組件的常用屬性及方法如下:
屬性及方法
說明
Document(屬性)
獲取或設(shè)置要預(yù)覽的文檔
UseAntiAlia(屬性)
獲取或設(shè)置一個值,該值批示打印是否使用操作系統(tǒng)的防鋸齒功能
ShowDialog(方法)
顯示“打印預(yù)覽“窗口
3、PrintDialog組件常用屬性及方法:
屬性及方法
說明
AllowCurentpage(屬性)
獲取或調(diào)協(xié)一個值,該值指示是否顯示 “當(dāng)前頁“選項按鈕
AllowPrintToFile(屬性)
獲取或設(shè)置一個值,該值指示是否啟用“打印到文件“復(fù)選框
AllowSelection(屬性)
獲取或設(shè)置一個值,該值指示是否啟用“頁“選項按鈕
Document(屬性)
獲獲取或設(shè)置一個值,指示用于獲取PrinterSetting類的PrintDocument對象
PrintertSetting(屬性)
獲取或設(shè)置對話修改的打印機設(shè)置
AllowSomePage(屬性)
獲取或設(shè)置一個值,該值指示是否啟用“選擇“選項按鈕
PrintToFile(屬性)
獲取或設(shè)置一個值,該值批示是否選中“打印到文件“復(fù)選框
Reset(屬性)
將所有選項,最后待定的打印機和頁面設(shè)置重新設(shè)置為其?????????? 默認值
ShowDialog(方法)
顯示“打印“對話框
實現(xiàn)過程
1、新建一個Windows應(yīng)用程序,將其命名為Excell-01,默認主窗體Forml
2、Forml窗體設(shè)計時主要用到的控件及說明如下:
控件類型
控件名稱
用途
TextBox
TxetBox1
TxetBox2
TxetBox3
輸入員工姓名
輸入員工據(jù)部門
輸入員工擔(dān)任職位
Button
Button1
執(zhí)行打印操作
PrintDocument
PrintDocument1
設(shè)置要打印的文檔
PrintPreviewDialog
PrintPreviewDialog1
顯示“打印預(yù)覽“窗口
PrintDialog
PrintDialog1
顯示“打印“窗口
主要程序代碼:
Private void printDocument1_PrintPage(objectsender,System.Drawing.PrintPageEventArgs e)
{
e.Graphiscs.DrawString(label.Text,new Font(“宋體”,10,F(xiàn)ontStyle.Regular),Brushes.Brushes.Black,260,4000);
e.?e.Graphiscs.DrawString(textBox1.Text,new Font(“宋體”,10,F(xiàn)ontStyle.Regular),Brushes.Brushes.Black,260,4000);
e.Graphiscs.DrawString(label2.Text,new Font(“宋體”,10,F(xiàn)ontStyle.Regular),Brushes.Brushes.Black,260,4000);
e.Graphiscs.DrawString(textBox2.Text,new Font(“宋體”,10,F(xiàn)ontStyle.Regular),Brushes.Brushes.Black,260,4000);
e.Graphiscs.DrawString(label3.Text,new Font(“宋體”,10,F(xiàn)ontStyle.Regular),Brushes.Brushes.Black,260,4000);
e.Graphiscs.DrawString(textBox3.Text,new Font(“宋體”,10,F(xiàn)ontStyle.Regular),Brushes.Brushes.Black,260,4000);
}
水晶報表的簡介
水晶報表(Crystal Reprots)是加拿大Crystal Decisions公司出品的專業(yè)級報表分析與生成軟件,在全球經(jīng)書擁有超過1100萬用戶.水晶報表及水晶報表企業(yè)版等軟件可以與Visual Basic,Visual Studio.NET,ASP以及Java程序開發(fā)環(huán)境等平臺實現(xiàn)完美的集成.目前水晶報表組件經(jīng)書捆綁在了Visual Studio.NET系列開發(fā)工具當(dāng)中,通過Visual Studio學(xué)習(xí)2005可以輕松創(chuàng)建和設(shè)計水晶報表.水晶報表具有非常強大的功能 ,不僅可以生成復(fù)雜.漂亮的圖表報表,還可以將報表導(dǎo)出成Word,Excel,RTE,HTML等格式,是進行Web和Windows報表 開發(fā)的必備知識.與其他報表相比,水晶報表軟件具有高穩(wěn)定性,高可伸縮性以及應(yīng)用平臺廣泛等杰出優(yōu)點,水晶報表幾乎可以從任何數(shù)據(jù)源中生成你需要的報表.內(nèi)置報表專家在你生成和完成一般的報表任務(wù)過程中,會一步一步地指導(dǎo)你進行了操作.報表專家通過公式,交叉表,子報表和設(shè)置條件格式幫助表現(xiàn)數(shù)據(jù)的實際意義,揭示可能被隱藏的重要關(guān)系.如果文字和數(shù)字確實不夠充分,則用地理地圖和圖形進行形象的信息輸出。
將報表擴展到Web水晶報表的靈活性并未停留創(chuàng)建報表這一功能上.你可以用各種各的格式發(fā)布報表,包括用微軟的Word和Excel發(fā)布,通過電子郵件甚Web報表功能允許工作組中的其他成員在他們自己的Web瀏覽器中查看或更新共享報表。
通過將水晶報表的報表處理功能不聽整合到自己的數(shù)據(jù)庫應(yīng)用程序中,應(yīng)用程序和Web開發(fā)人員可以節(jié)省開發(fā)時間并滿足用戶的需求。水晶報表支持大多數(shù)流行的開發(fā)語言。可以方便地在任何應(yīng)用程序中添加 報表。不論你是IT行業(yè)的站點管理員,還是營銷推廣經(jīng)理,也無論你是金融業(yè)的數(shù)據(jù)庫管理員還是CEO,水晶報表都堪稱是一個功能強大的工具,它可以幫助每一個人分析,解釋重要數(shù)據(jù)。
在Visual Studio 2005中系統(tǒng)為創(chuàng)建水晶報表提供了三件法定:一個是名叫CrystalReportViewer的報表查看控件,一個是ReportDocument,另外一個是水晶報表專家|(實際上Visual Studio 2005附帶兩個版本的CrystalReportViewer控件:一個用于Web應(yīng)用程序,一個用于Windows應(yīng)用程序,位于CrystalDecisions.Windows.Forms命名空間內(nèi)的CrystalReportViewer控件由Windows項目使用),其中前兩個都可以在工具箱的“Crystal Reports”的卡片中找到,報表專家需要你點擊項目菜單中的“添加新項”命令創(chuàng)建。
其中CrystalReportViewer控件就是一個顯示控件,可以讓你把報表顯示基于頁面的布局中:ReportDocument控件表示一個報表 ,它包含定義,格式化加裁,導(dǎo)出 和打印報表的屬性和方法:報表專家是一個幫助你建立報表數(shù)據(jù)源的向?qū)В幸幌盗邢驅(qū)υ捒颉?/p>
快速建立水晶報表—創(chuàng)建一個學(xué)生信息報表
我們首先建立 一個簡單的水晶報表的示例,讓你對報表有一個概念。這個報表將對一個學(xué)生表進行報表。要建立一個水晶報表,需要用到.NET為我們提供的CrystalReportViewer和ReportDocument控件以及報表專家。首先你需要用報表專家一個數(shù)據(jù)源,然后將這個數(shù)據(jù)源提供縱給ReportDocument控件,最后只要把RerportDocument綁定到CrystalReportViewer即可。它們的關(guān)系如下:
下面我們就來建立水晶報表,步驟
(1)??????新建一個Windows應(yīng)用程序,將其命名為Exll-02,默認主窗體為Forml,
(2)??????在Forml窗體中添加一個CyrstalReportViewer控件,用來查看報表,
(3)?????? 選中當(dāng)前項目上,單擊右鍵,在彈出的快捷菜單中,選擇“添加“/”新建項“選項,在彈出的”添加新項“對話框中選擇”Crystal報表“
(4)?????? 單擊“確定“按鈕,新建一個報表并打開圖所示”Crystal庫“對話框,該對話框中,在”創(chuàng)建新Crystal Report 文檔“中選擇”使用報表向?qū)А斑x項,并”選擇專家“中的”標準“選項
(5)?????? 單擊“確定“按鈕,打開”標準報表創(chuàng)建向?qū)А皩υ捒颍鐖D所示。該對話框用來選擇和配置數(shù)據(jù)源,如果項目中存在數(shù)據(jù)源,則在”可用數(shù)據(jù)源“中選擇”項目數(shù)據(jù)“項,并從選擇合適的數(shù)據(jù)源,如果沒有數(shù)據(jù)源,可以新建一個數(shù)據(jù)源,本實例以SQL Server 2005為例。
(6)?????? 選擇“可用數(shù)據(jù)源“中“創(chuàng)建新連接”下的OLEDB(ADO)命令打開對話框,選定數(shù)據(jù)源后,單擊“下一步“按鈕,在界面中填寫正確的數(shù)據(jù)庫連接信息,單擊”下一步“按鈕,進入高級信息編輯界面,可以通過雙擊或選擇需要編輯的項,單擊”編輯值“按鈕進行適當(dāng)?shù)木庉嫞庉嬐瓿珊螅瑔螕簟蓖瓿伞鞍粹o即可完成新連接的創(chuàng)建,如圖所示。
(7)?????? 從已創(chuàng)建連接的“標準報表創(chuàng)建向?qū)А爸羞x擇合適的數(shù)據(jù)表作為數(shù)據(jù)源,選擇數(shù)據(jù)表,通過相左或相右的按鈕,對選定的數(shù)據(jù)表進行單一添加或移除,如圖所示。也可以利用<Ctrl+數(shù)據(jù)表>快捷鍵選擇多個數(shù)據(jù)表進行添加和移除。
(8)?????? 選定數(shù)據(jù)表后,,單擊“下一步“按鈕,出現(xiàn)報表字段選擇界面,如圖所示 在報表字段選擇界面中需要在報表中顯示的字段,單擊”下一步“按鈕,進入報表分組界面,用戶可以選擇合適的字段對數(shù)據(jù)進行分組,也可以不對字段分組,本實例無分組字段,如圖所示。
(9)?????? 選定完成后,單擊“下一步“按鈕,即可出現(xiàn)記錄選定界面,用戶可以通過篩選字段來控制輸出結(jié)果,如圖所示。
(10)?? 完成以上步驟后,最后一項就是為報表選擇樣式了,報表專家為用戶提供了10種可選樣式供用戶筢,用戶可以選擇自己喜歡的樣式來顯示報表數(shù)據(jù)。本實例選擇可選樣式中的“標準“樣式,如圖所示 。單擊”完成“按鈕,完成報表設(shè)計。
調(diào)用Office進行打印
在程序中查看一些信息資料時,經(jīng)常需要將這些資料通過Word文檔或Excel格式打印出來,那么如何在Windows應(yīng)用程序中使用這些Office組件呢?本節(jié)將通過 兩個具體實例介紹如何將Windows窗體中的內(nèi)容以Word文檔或Excels格式顯示打印出來。
1???????????利用Word打印員工報表
Microsoft Word 是微軟公司提供的文檔處理軟件,在處理文檔和資料的過程中顯示出了強大的功能。本實例在打印某企業(yè)的員工信息時,實現(xiàn)了通過將數(shù)據(jù)導(dǎo)入到Word文檔中進行打印的功能。運行本實例,如圖所示,單擊“輸出Word“按鈕,DataGridView控件中的數(shù)據(jù)便以Word文檔方式打開。
技術(shù)要點
本實例通過使用Microsoft Word自動化對象模型中的Cell對象 ,將DataGRIDview控件中的數(shù)據(jù)導(dǎo)出到Word文檔表格中。
在Microsoft Word自動化對象模型中,Tables集合中是同Table對象組成的集合,這些對象代表選定內(nèi)容,范圍或文檔中的表格。Table對象 的Cell對象 代表表格中的單個單元格,Cell對象是Cells集合中的元素,Cells集合中指定對象中所有的單元格。本實例中主要用到了Cell對象 的InsertAfter(方法)。
InsertAter()方法用來將指定文本插入某區(qū)域或選定內(nèi)容的后面,其使用語法格式如下:
public void InsertAfter(string Text)
參數(shù)說明如下
Text:要插入的文本
實現(xiàn)過程
(1)???? 新建一個Windows應(yīng)用程序,將其命名為Exll-03,默認主窗體為Forml;
(2)???? 在Forml窗體中添加一個DataGridView控件和一個Button控件,其中,DataGridView控件用來顯示數(shù)據(jù)庫中的記錄,Button控件用來將DataGridView控件中的數(shù)據(jù)以Word文檔格式輸出;
(3)???? 主要程序代碼,在DataGridView控件中顯示數(shù)據(jù)的實現(xiàn)代碼如下:
private void Form1_Load(objectsender,EventArg P s e)
{
Myda = new SqlDataAdapter("select* from studentinfor", sqlcon);
Myds = new DataSet();
sqlcon.Open();
Myda.Fill(Myds);
sqlcon.Close();
dataGridView1.DataSource= Myds.Tables[0];
}
“輸出Word”按鈕的Click事件實現(xiàn)代碼如下:
private void button1_Click(objectsender,EventArgs e)
{
ExportDataGridview(dataGridView1, true);
}
自定交方法ExportDataGridview()用來實現(xiàn)將DataGridView控件中數(shù)據(jù)導(dǎo)出到Word,該方法主要代碼如下:
public bool ExportDataGridview(DataGridView dgv,bool isShowWord)
{
Word.Document mydoc = newWord.Document();
Word.Table mytabel;
Word.Selection? myself;
object myobj;
if (dgv.Rows.Count == 0)
return false;
Word.Application word = newWord.Application();
myobj = System.Reflection.Missing.Value;
mydoc= word.Documents.Add(ref myobj,ref myobj, ref myobj,ref myobj);
word.Visible = isShowWord;
mydoc.Select();
myself = word.Selection;
mytabel = mydoc.Tables.Add(myself.Range, dgv.RowCount, dgv.ColumnCount,ref myobj,ref myobj);
mytabel.Columns.SetWidth(30, Word.WdRulerStyle.wdAdjustNone);
for (int i = 0; i< dgv.ColumnCount; i++)
{
mytabel.Cell(1, i + 1).Range.InsertAfter(dgv.Columns[i].HeaderText);
}
for (int i = 0; i< dgv.RowCount - 1; i++)
{
for (int j = 0;j { mytabel.Cell(i + 2, j + 1).Range.InsertAfter(dgv[j,i].Value.ToString()); ; } } return true; } } 注意:在程序中對Word進行操作控制時,需要引用Word動態(tài)鏈接庫(Mircorsoft Word9.0 ObjectLibray),添加方法如下:選中當(dāng)前項目,單擊右鍵,選擇“添加引用”選項,在彈出的“添加引用“對話框中選擇”COM“選項卡,然后找到要引用的Word動態(tài)鏈接庫,單擊“確定”按鈕即可。 Microsoft? Excel是微軟公司提供的用于辦公的應(yīng)用軟件,具有強大的報表統(tǒng)計等功能。本實例在打印學(xué)生信息時,通過將數(shù)據(jù)導(dǎo)入到Excel 文件中進行打印。運行本實例,如圖(1)所示:單擊[輸出Excel]按鈕,DataGridView控件中的數(shù)據(jù)便以Excel 文件方式打開,如圖(2)所示,然后用戶可以用Excel 自帶的打印功能對學(xué)生信息進行打印。 (1) (2)輸出的Excel報表 技術(shù)要點: 本實例中首先調(diào)用MicrosoftExcel自動化對象模型的Workbooks對象的Add()方法創(chuàng)建一個新的工作薄,然后通過設(shè)置Excel對象的Cells屬性,向新建的工作薄中添加數(shù)據(jù)記錄。下面對Workbooks對象的Add()方法和Excel對象Cells屬性進行詳細介紹。 (1)Workbooks對象的Add()方法 該方法主要用來創(chuàng)建一個新的工作薄,其使用語法格式如下: Workbook Add([In,Optional]object Template) 參數(shù)說明如下: Template:指定是否添加工作薄,如果為True ,表示添加;否則,表示不添加。 返回值:返回Workbook類型,表示一個Excel工作薄。 (2)Excel對象的Cell屬性 Excel.Cells[0,0]=”Excel”; 該屬性用來指定Excel工作薄中單元格的內(nèi)容。例如,下面的代碼用來指定Excel工作薄中第一行第一列的單元格中的內(nèi)容為“Excel”: 實現(xiàn)過程: (1)?????????????新建一個Windows應(yīng)用程序,默認主窗體為Form1. (2)?????????????在Form1窗體中添加一個DataGridView控件和一個Button控件其中DataGridView控件用來顯示數(shù)據(jù)庫中的記錄,Button控件用來將DataGridView控件中的數(shù)據(jù)以Excel格式輸出。 (3)?????????????主要程序代碼。 按鈕的Click事件實現(xiàn)代碼如下: private void button1_Click(object sender, EventArgs e) { ExportDataGridview(dataGridView1, true); } 自定義方法ExportDataGridView()用來實現(xiàn)將DataGridView控件中數(shù)據(jù)導(dǎo)出到Excel,該方法 主要代碼如下: public boolExportDataGridview(DataGridView dgv, bool isShowExcel) { if (dgv.Rows.Count == 0) return false; //建立Excel對象 Excel.Application excel = new Excel.Application(); excel.Application.Workbooks.Add(true); excel.Visible = isShowExcel; //生成字段名稱 for (int i = 0; i < dgv.ColumnCount; i++) { excel.Cells[1, i + 1] =dgv.Columns[i].HeaderText; } //填充數(shù)據(jù) for (int i = 0; i < dgv.RowCount - 1; i++) { for (int j = 0; j { if (dgv[j, i].ValueType== typeof(string)) { excel.Cells[i + 2, j +1] = "" + dgv[j, i].Value.ToString(); } 注意:在程序中對Excel進行操作控制時,需要引用Excel動態(tài)鏈接庫(MicrosoftExcel 11.0 Object Library)。添加方法如下:選中當(dāng)前項目,單擊,選擇“添加引用”選項,在彈出的“添加引用”對話框中選擇“COM”選項卡,然后找到要引用的Excel動態(tài)鏈接庫,單擊“確定”按鈕即可。 C# Windows
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。