介紹Visual Studio 2005插件相關(guān)問題
首先,我認(rèn)為這是一個很有用的插件,如果繼續(xù)得到改進(jìn)和增強(qiáng),我想該插件會被更多開發(fā)者使用。對于Visual Studio 2005插件源碼的學(xué)習(xí),對于我們掌握怎樣正確創(chuàng)建Visual Studio 2005插件工程是很有幫助的,而且也可從中學(xué)到不少編程技巧,例如委托和模板方法。希望大家一起研究下
***部分 完全用控制綁定數(shù)據(jù)源
1. 建立水晶報(bào)表,注意報(bào)表要用OLE DB ADO方式連接數(shù)據(jù)源,這樣可以省去報(bào)表登錄窗口的彈出。
2. 在設(shè)計(jì)視圖中拖拉報(bào)表控件CrystalReportViewer,點(diǎn)擊右上角智能標(biāo)簽設(shè)置報(bào)表數(shù)據(jù)源,選擇報(bào)表文件,自動生成CrystalReportSource,這時(shí)在設(shè)計(jì)視圖中將顯示出報(bào)表界面,水晶報(bào)表將自動用初始數(shù)據(jù)填充報(bào)表字段。注意這里有個小Bug,如果報(bào)表在子目錄中,選擇報(bào)表文件將自動用相對路徑表示,這時(shí)報(bào)表顯示會出錯,應(yīng)改成絕對路徑才可以。
<Report FileName="report\rptOrder.rpt">這里應(yīng)改成:<Report FileName="..\report\rptOrder.rpt">
3.拖拉一個數(shù)據(jù)源控件SqlDataSource(也可以用ObjectDataSource),Visual Studio 2005插件按向?qū)蓴?shù)據(jù)源,這里可以篩選數(shù)據(jù),根據(jù)情況選擇各類數(shù)據(jù)源。 #t#
4.如何將CrystalReportSource與SqlDataSource兩個控件連接在一起呢?可以這樣:選擇CrystalReportSource控件點(diǎn)擊右側(cè)屬性中數(shù)據(jù)欄,再點(diǎn)擊Report選擇DataSource,在這個數(shù)據(jù)源集合編輯器選擇數(shù)據(jù)源指定報(bào)表名稱即可。(下面的Parameters是用來選擇報(bào)表參數(shù)用的)
另外可以參照http://xy229935.spaces.live.com/ Visual Studio 2005插件下面的第二部分即是它的精華。
第二部分 用代碼綁定數(shù)據(jù)源
采用推模式,Visual Studio 2005插件可利用上面已經(jīng)設(shè)計(jì)好的報(bào)表格式,用DateTable來作為CrystalReportViewer的數(shù)據(jù)源,這樣更靈活.此時(shí)可以刪除上面的CrystalReportSource和SqlDataSource.具體代碼如下(注意要采用OLEDB的連接方式):
- DataTable DS = new DataTable();
- string myConn = System.Configuration.ConfigurationSettings.AppSettings["Test_OLE"];
- OleDbConnection myConnection = new OleDbConnection(myConn);
- string strSql = "select * from talbe1";
- OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(strSql, myConnection);
- myDataAdapter.Fill(DS);
- CrystalDecisions.CrystalReports.Engine.ReportDocument CrystalReportSource;
- CrystalReportSource = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
- CrystalReportSource.Load(Server.MapPath("..\\query\\CrystalReport_kqhz.rpt"));
- CrystalReportSource.SetDataSource(DS);
- this.CrystalReportViewer1.ReportSource = CrystalReportSource;
- this.CrystalReportViewer1.DataBind();