C# rdlc 报表学习总结
生活随笔
收集整理的這篇文章主要介紹了
C# rdlc 报表学习总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C# 創(chuàng)建報(bào)表過(guò)程詳解
http://www.jb51.net/article/68481.htm本文給大家介紹的是使用vs2012 c#創(chuàng)建報(bào)表的全部過(guò)程的記錄,十分的詳細(xì),有需要的小伙伴可以參考下。
..1、新建windows窗體,項(xiàng)目-->添加新項(xiàng)-->Visual C#項(xiàng)-->Windows Form-->windows窗體。
2、窗體中加入button按鈕和報(bào)表控件。
3、新建報(bào)表,項(xiàng)目-->添加新項(xiàng)-->reporting-->報(bào)表,生成.rdlc文件。
4、在.rdlc上插入表格-->新建數(shù)據(jù)源-->數(shù)據(jù)庫(kù)-->數(shù)據(jù)集-->新建連接,步驟如下:
5、這里輸入數(shù)據(jù)庫(kù)連接的服務(wù)器名,登錄數(shù)據(jù)庫(kù)的用戶名和密碼,選擇數(shù)據(jù)庫(kù)名稱。
6、選擇需要用的表。
7、名稱可以自己寫(xiě),本人沒(méi)改,數(shù)據(jù)源為自己選擇的數(shù)據(jù)庫(kù)名稱,可用數(shù)據(jù)集為表名。
8、.rdlc界面在表格的第一行輸入字段名,第二行點(diǎn)擊每列右上角的小圖標(biāo)選擇該列要顯示的字段名。
9、回到Form窗體點(diǎn)擊報(bào)表右上角的小三角,選擇剛剛創(chuàng)建的報(bào)表Report1.rdlc,數(shù)據(jù)源默認(rèn)的就可以,本人在這里沒(méi)有修改數(shù)據(jù)源名稱還是DataSet1.
10、后臺(tái)代碼
public Form1()
{
InitializeComponent();
this.reportViewer1.Load -= new System.EventHandler(this.reportViewer1_Load);
}
private void button1_Click(object sender, EventArgs e)//button點(diǎn)擊事件
{
reportViewer1_Load(sender, e);
}
private void Form1_Load(object sender, EventArgs e)
{
this.reportViewer1.Load -= new System.EventHandler(this.reportViewer1_Load);
}
private void reportViewer1_Load(object sender, EventArgs e)
{
DataTable table = helps.GetDataTable("select ID,UserID,OID from User_Org where 1=1");
this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", table));
this.reportViewer1.RefreshReport();
}
運(yùn)行程序加載:
點(diǎn)擊button
這里寫(xiě)的是點(diǎn)擊button后才加載數(shù)據(jù)。
========
C#中使用RDLC報(bào)表(1)
http://blog.csdn.net/panting8/article/details/73205401 建立數(shù)據(jù)源
啟動(dòng)VS2005新建一個(gè)窗體項(xiàng)目,命名為T(mén)estProj
在左邊的窗體內(nèi)選擇“添加新數(shù)據(jù)源”或在菜單上操作“添加新數(shù)據(jù)源”:
選擇后出現(xiàn)對(duì)話窗體,選擇“數(shù)據(jù)庫(kù)”,進(jìn)入“下一步”:
本數(shù)據(jù)源以SqlServer2000所提供的Northwind數(shù)據(jù)庫(kù)為例,因此在數(shù)據(jù)庫(kù)內(nèi)選擇驅(qū)動(dòng)程序?yàn)镾qlServer,具體操作視所用數(shù)據(jù)庫(kù)而定(如果連接為Oracle,建議用Oracle所提供的ODP for .NET,地址:http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html)。
選擇數(shù)據(jù)源后,指定數(shù)據(jù)庫(kù)文件,并進(jìn)行測(cè)試,如果連接不通,請(qǐng)檢查你的軟件設(shè)置。
進(jìn)行下一步,至顯示出庫(kù)文件內(nèi)的表及視圖,然后打開(kāi)表,并選擇其中的Employees,選擇完成。
在數(shù)據(jù)源窗口中顯示出所選擇表及表內(nèi)的字段,以備使用。
同時(shí)在資源管理器中,也可以看到新增加的數(shù)據(jù)文件。
2 ?報(bào)表瀏覽器
在新建的窗體內(nèi),放入報(bào)表瀏覽控件:
此報(bào)表瀏覽控件集成了報(bào)表查看及打印預(yù)覽的功能,可直接輸出至打印機(jī),也可直接輸出至Excel文件或PDF文件,對(duì)于喜歡看Excel表格的客戶來(lái)說(shuō),這個(gè)報(bào)表控件非常不錯(cuò)。關(guān)于此報(bào)表的來(lái)源及臺(tái)前幕后的各種說(shuō)法,請(qǐng)自己查詢相關(guān)的網(wǎng)站。
3 ?建立報(bào)表文件
選中報(bào)表瀏覽器控件后,在控件的右上角會(huì)出現(xiàn)一個(gè)小三角,點(diǎn)擊后,出現(xiàn)一個(gè)菜單,選擇“設(shè)計(jì)新報(bào)表”或在解決方案資源管理器中添加一個(gè)新的報(bào)表文件:
雙擊“報(bào)表項(xiàng)”內(nèi)的“表”,則設(shè)計(jì)空白表內(nèi)生成一個(gè)表格,我們可以在表格內(nèi)添加數(shù)據(jù)項(xiàng)。
此報(bào)表的設(shè)計(jì)方式類似于MS以前的VB下報(bào)表設(shè)計(jì)環(huán)境。在報(bào)表設(shè)計(jì)器中,我將一份報(bào)表分為五個(gè)部分,從上至下為:報(bào)表標(biāo)題區(qū)、列標(biāo)題區(qū)、數(shù)據(jù)顯示區(qū)、合計(jì)及頁(yè)腳。如果將報(bào)表的設(shè)計(jì)形式顯示出頁(yè)眉及頁(yè)腳,報(bào)表的形式會(huì)看得更清楚些:
選擇頁(yè)眉及頁(yè)腳:
顯示結(jié)果:
現(xiàn)在開(kāi)始設(shè)計(jì)報(bào)表:
在“頁(yè)眉”區(qū)內(nèi)放入一個(gè)文本框,將內(nèi)容更改為“測(cè)試報(bào)表”,居中,字體放大加粗:
從數(shù)據(jù)源窗口中選擇合適的列,用鼠標(biāo)拖到報(bào)表內(nèi)的“詳細(xì)信息”表格上,數(shù)據(jù)會(huì)自動(dòng)填入:
將設(shè)計(jì)的報(bào)表保存后,返回報(bào)表瀏覽窗口,并為報(bào)表瀏覽器選擇我們?cè)O(shè)計(jì)的報(bào)表:
選中報(bào)表文件后,菜單也有所改變:
再為此報(bào)表文件指定數(shù)據(jù)源,選擇數(shù)據(jù)源:
確定,保存文件并運(yùn)行測(cè)試文件。
4 ? 預(yù)覽
報(bào)表生成后預(yù)覽如下:
是不是很簡(jiǎn)單?我們也可以對(duì)這個(gè)簡(jiǎn)單的報(bào)表進(jìn)行美化,當(dāng)然,我加上美化的一些功能后,可能效果更差,但此處只是為了演示用法。
? ? ? ? ? 為數(shù)據(jù)加表格。
在報(bào)表設(shè)計(jì)器中,選擇需要加表格框的區(qū)域
然后在工具欄中選擇邊框工具
加什么樣的框線根據(jù)需要,此處我選擇“所有框線”。
看上去比原來(lái)的灰線能稍黑一些,在預(yù)覽時(shí)就能看出來(lái)了。
? ? ? ? ? 加打印時(shí)間顯示
加入一個(gè)顯示打印時(shí)間的文本框,在上面按右鍵,選屬性:
在“文件框?qū)傩浴眱?nèi),選擇“值”后面的表達(dá)式生成:
在表達(dá)式中選擇時(shí)間:
不要忘記表達(dá)式的前面一定要有一個(gè)“=”,如果沒(méi)有,手工加上一個(gè)。為了更符合我們的習(xí)慣,前面可以加個(gè)說(shuō)明,如打印時(shí)間等,表達(dá)式的寫(xiě)法就要稍做改變:還是以“=”開(kāi)頭,后面加上“打印時(shí)間:”,再以“&”連接生成的Now函數(shù)即可得到我們想要的樣子。
? ? ? ? ? 為行加序號(hào)
為了演示,我將序號(hào)列加在了表格了最后列
加入一個(gè)新的列:
在顯示序號(hào)的列中輸入相關(guān)的值:
在此表達(dá)式的后面是Nothing,不是null,不要搞錯(cuò)。
三項(xiàng)功能已經(jīng)完成,預(yù)覽:
比原來(lái)漂亮嗎?至少實(shí)用了一些。
使用RDLC報(bào)表(二)--使用自定義數(shù)據(jù)集
1 新建窗體
2 建立數(shù)據(jù)源
3 建立報(bào)表
新的數(shù)據(jù)報(bào)表已經(jīng)生成,下面開(kāi)始對(duì)數(shù)據(jù)源進(jìn)行設(shè)置。
4 對(duì)報(bào)表自動(dòng)生成的數(shù)據(jù)源進(jìn)行設(shè)置
選擇工具欄 à 報(bào)表 à 數(shù)據(jù)源,選中所要修改的數(shù)據(jù)源后,用“重命名”對(duì)其進(jìn)行修改,如myds。
修改完成后,確定退出此窗口。
選中報(bào)表設(shè)計(jì)器內(nèi)的表格,顯示屬性。將表格的數(shù)據(jù)集名稱更改為上面修改的名稱。
如果一個(gè)報(bào)表文件內(nèi)只有一個(gè)數(shù)據(jù)源,則表格內(nèi)的數(shù)據(jù)值可直接寫(xiě)為“=Fields!字段.Value”的格式,如果包含多個(gè)數(shù)據(jù)源,則要對(duì)此字段的取值進(jìn)行指定,如“=(Fields!字段.value,“數(shù)據(jù)集名稱””。
5 手動(dòng)生成數(shù)據(jù)源
手動(dòng)生成的數(shù)據(jù)集內(nèi)必須包含報(bào)表文件內(nèi)設(shè)計(jì)的字段名稱,否則會(huì)運(yùn)行出現(xiàn)錯(cuò)誤。
生成數(shù)據(jù)集:
? ? ? ? ? ?// 報(bào)表執(zhí)行操作
? ? ? ? private void button1_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //取得數(shù)據(jù)集
? ? ? ? ? ? string connstring = "Data Source=.;Initial Catalog=Northwind;Integrated Security=True";
? ? ? ? ? ? System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);
? ? ? ? ? ? System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand("select * from customers", conn1);
? ? ? ? ? ? System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);
? ? ? ? ? ? DataSet c_ds = new DataSet();
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? conn1.Open();
? ? ? ? ? ? ? ? ada1.Fill(c_ds);
? ? ? ? ? ? }
? ? ? ? ? ? finally
? ? ? ? ? ? {
? ? ? ? ? ? ? ? conn1.Close();
? ? ? ? ? ? ? ? command1.Dispose();
? ? ? ? ? ? ? ? conn1.Dispose();
? ? ? ? ? ? }
? ? ? ? ? ? ?//為報(bào)表瀏覽器指定報(bào)表文件
? ? ? ? ? ? this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";
? ? ? ? ? ? //指定數(shù)據(jù)集,數(shù)據(jù)集名稱后為表,不是DataSet類型的數(shù)據(jù)集
? ? ? ? ? ? this.reportViewer1.LocalReport.DataSources.Clear();
? ? ? ? ? ? this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));
? ? ? ? ? ? //顯示報(bào)表
? ? ? ? ? ? this.reportViewer1.RefreshReport();
? ? ? ? }
運(yùn)行后的數(shù)據(jù)顯示:
使用RDLC報(bào)表(三)--向RDLC報(bào)表傳入?yún)?shù)
在使用報(bào)表向客戶展示結(jié)果數(shù)據(jù)時(shí),實(shí)時(shí)的在報(bào)表中顯示某些特定的數(shù)據(jù)是必需的,如:顯示的部門(mén)、打印的日期等。本文只簡(jiǎn)單的演示向報(bào)表內(nèi)傳入一個(gè)字符值。如有其它問(wèn)題,歡迎討論。
1、新建一個(gè)工程TestReport,一個(gè)Form窗體,放入一個(gè)TextBox、一個(gè)Button按鈕,再放入一個(gè)ReportViewer控件。
2、在ReportViewer上選擇新建一個(gè)報(bào)表
3、在打開(kāi)的報(bào)表設(shè)計(jì)器中,選擇工具欄的“報(bào)表”中的“報(bào)表參數(shù)”,新加一個(gè)參數(shù),名稱為content,數(shù)據(jù)類型為string,確定。
4、 在報(bào)表設(shè)計(jì)器的頁(yè)面上放入一個(gè)文本框,在文本框上按鼠標(biāo)右鍵->屬性,在“文本框?qū)傩浴贝翱谥?#xff0c;選擇“常規(guī)”選項(xiàng)卡內(nèi)下部的“值”后面的“編輯表達(dá) 式”按鈕(就是那個(gè)Fx),在此窗口內(nèi),左下框內(nèi)選擇參數(shù),在右下框?qū)?huì)出現(xiàn)在上一步中設(shè)置的參數(shù),雙擊此參數(shù),在上面的框內(nèi)將出現(xiàn)所需要的表達(dá) 式:=Parameters!content.Value。保存此報(bào)表。報(bào)表默認(rèn)名稱為Report1.rdlc。
5、在Form窗體內(nèi)雙擊按鈕,編寫(xiě)如下代碼:
? ? ? ? ? ? this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
? ? ? ? ? ? ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
? ? ? ? ? ? this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });
? ? ? ? ? ? this.reportViewer1.RefreshReport();
6、運(yùn)行工程,在文本輸入框內(nèi)輸入數(shù)據(jù),按下按鈕,數(shù)據(jù)是不是已經(jīng)傳入報(bào)表了?
//報(bào)表參數(shù)
ReportParameter[] RP = new ReportParameter[8];
//報(bào)表參數(shù)名稱
string[] RptParmsName = new string[8] { "p_BillNo", "p_compForshort", "p_LuptDate", "p_compFullname", "p_RecoverSigner", "p_deptname", "p_Issuer", "p_DeliveryDate" };
//報(bào)表參數(shù)值
object[] RptParmsValue = new object[8] { dt.Rows[0]["BillNo"].ToString(), dt.Rows[0]["compForshort"].ToString(), dt.Rows[0]["LuptDate"], dt.Rows[0]["compFullname"].ToString(), dt.Rows[0]["RecoverSigner"].ToString(), dt.Rows[0]["deptname"].ToString().Trim(), UserName, dt.Rows[0]["DeliveryDate"] };
//為報(bào)表傳遞參數(shù)
for (int i = 0; i < RP.Length; i++)
{
? RP[i] = new ReportParameter(RptParmsName[i], RptParmsValue[i].ToString());
? this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { RP[i] });
}
使用RDLC報(bào)表(四)--鉆取式報(bào)表
本文內(nèi)以MSServer自帶Northwind庫(kù)文件內(nèi)的Customers及Orders這兩個(gè)表為例,建立兩個(gè)報(bào)表文件,在查詢得出 Customers的表數(shù)據(jù)后,點(diǎn)擊此表內(nèi)的CustomerID數(shù)據(jù),報(bào)表將轉(zhuǎn)入至下一個(gè)報(bào)表,并顯示與之相關(guān)的Orders的數(shù)據(jù),即VS中所謂的鉆 取式報(bào)表。
1、打開(kāi)一個(gè)工程,并新建一個(gè)From,放入一個(gè)Button及一個(gè)ReportViewer控件。
2、在工程內(nèi)新建一個(gè)數(shù)據(jù)源,連接到Northwind庫(kù)文件,顯示Customers及Orders這兩個(gè)表
3、新建一個(gè)報(bào)表文件,并以表格的形式來(lái)顯示數(shù)據(jù),將Customers表內(nèi)的CustomerID、CompanyName及Address三個(gè)字段放入,形成一份有表頭及數(shù)據(jù)的簡(jiǎn)單報(bào)表,并將此報(bào)表保存命名為customerReport
4、再建一個(gè)報(bào)表文件,與customerReport相同,也以表格的形式來(lái)顯示報(bào)表,將Orders內(nèi)的OrderID、CustomerID、ShipName及OrderDate四個(gè)字段放入表格內(nèi),報(bào)表保存為orderReport
5、orderReport的數(shù)據(jù)源根據(jù)主報(bào)表customerReport的數(shù)據(jù)來(lái)確定數(shù)據(jù)源的數(shù)據(jù),查看表格的數(shù)據(jù)集名稱,我的顯示為NorthwindDataSet_Orders,也可以自己另建一個(gè),具體方法見(jiàn)我的《RDLC報(bào)表(二)》
6、 再打開(kāi)customerReport報(bào)表,將CustomerID設(shè)置成為可點(diǎn)擊的索引字段,以便轉(zhuǎn)入下一個(gè)報(bào)表。選擇CustomerID字段,按鼠標(biāo) 右鍵,在”文本框?qū)傩浴按翱谥?#xff0c;選擇”導(dǎo)航“選項(xiàng)卡,在下面的”超鏈接“中選擇”跳至報(bào)表“,在報(bào)表名稱中選擇”orderReport“,再按下后面 的”參數(shù)...“按鈕,輸入一個(gè)參數(shù)名稱,如customerid,參數(shù)值選擇=Fields!CustomerID.Value。為了與其它數(shù)據(jù)相區(qū) 分,可以將此列數(shù)據(jù)根據(jù)自己的習(xí)慣改變顏色或加下劃線
7、在orderReport中,設(shè)置一個(gè)報(bào)表參數(shù),與CurtomerReprot中的名稱相同,以接收父表中傳入的參數(shù)
8、 新建兩個(gè)取得數(shù)據(jù)的方法,一個(gè)從Customers中取得數(shù)據(jù)集,另一個(gè)從Orders中取得數(shù)據(jù)集,且?guī)?shù)。此兩個(gè)方法可以自己編寫(xiě)類庫(kù)來(lái)實(shí)現(xiàn),也可 以在VS的數(shù)據(jù)集內(nèi)添加。為了演示方便,我直接使用了Customers的GetData(),并編寫(xiě)了一個(gè)Orders的 GetDataByCustomerID(@cid)的方法。
9、在From的Button中編寫(xiě)如下代碼:
? ? ? ? private void button2_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? NorthwindDataSet.CustomersDataTable dt1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter().GetData();
? ? ? ? ? ? this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.customerReport.rdlc";
? ? ? ? ? ? this.reportViewer1.LocalReport.DataSources.Clear();
? ? ? ? ? ? this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Customers", dt1));
? ? ? ? ? ? this.reportViewer1.RefreshReport();
? ? ? ? }
10、使用報(bào)表的Drillthrough事件,當(dāng)選擇了鉆取項(xiàng)時(shí)會(huì)發(fā)生此事件,給下一個(gè)報(bào)表取值,代碼如下:
? ? ? ? private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
? ? ? ? {
? ? ? ? ? ? LocalReport lp = (LocalReport)e.Report;
? ? ? ? ? ? string customerid = lp.GetParameters()["customerid"].Values[0].Trim();
? ? ? ? ? ? lp.DataSources.Clear();
? ? ? ? ? ? lp.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders",
? ? ? ? ? ? ? ? new NorthwindDataSetTableAdapters.OrdersTableAdapter().GetDataByCustomerID(customerid)));
? ? ? ? }
運(yùn)到結(jié)果:
運(yùn)行第一份報(bào)表:
鉆取后運(yùn)行第二份報(bào)表:
========
?使用RDLC報(bào)表(二)--使用自定義數(shù)據(jù)集
http://blog.csdn.net/panting8/article/details/7320555新建窗體
<!--[if !supportLists]-->2<!--[endif]-->建立數(shù)據(jù)源
3<!--[endif]-->建立報(bào)表
新的數(shù)據(jù)報(bào)表已經(jīng)生成,下面開(kāi)始對(duì)數(shù)據(jù)源進(jìn)行設(shè)置。
<!--[if !supportLists]-->4<!--[endif]-->對(duì)報(bào)表自動(dòng)生成的數(shù)據(jù)源進(jìn)行設(shè)置
選擇工具欄 à 報(bào)表 à 數(shù)據(jù)源,選中所要修改的數(shù)據(jù)源后,用“重命名”對(duì)其進(jìn)行修改,如myds。
修改完成后,確定退出此窗口。
選中報(bào)表設(shè)計(jì)器內(nèi)的表格,顯示屬性。將表格的數(shù)據(jù)集名稱更改為上面修改的名稱。
如果一個(gè)報(bào)表文件內(nèi)只有一個(gè)數(shù)據(jù)源,則表格內(nèi)的數(shù)據(jù)值可直接寫(xiě)為“=Fields!字段.Value”的格式,如果包含多個(gè)數(shù)據(jù)源,則要對(duì)此字段的取值進(jìn)行指定,如“=(Fields!字段.value,“數(shù)據(jù)集名稱””。
<!--[if !supportLists]-->5<!--[endif]-->手動(dòng)生成數(shù)據(jù)源
手動(dòng)生成的數(shù)據(jù)集內(nèi)必須包含報(bào)表文件內(nèi)設(shè)計(jì)的字段名稱,否則會(huì)運(yùn)行出現(xiàn)錯(cuò)誤。
生成數(shù)據(jù)集:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> ? ? ? /// <summary>
? ? ? ? /// 報(bào)表執(zhí)行操作
? ? ? ? /// </summary>
? ? ? ? /// <param name="sender"></param>
? ? ? ? /// <param name="e"></param>
? ? ? ? private void button1_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //取得數(shù)據(jù)集
? ? ? ? ? ? string connstring = "Data Source=.;Initial Catalog=Northwind;Integrated Security=True";
? ? ? ? ? ? System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);
? ? ? ? ? ? System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand("select * from customers", conn1);
? ? ? ? ? ? System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);
? ? ? ? ? ? DataSet c_ds = new DataSet();
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? conn1.Open();
? ? ? ? ? ? ? ? ada1.Fill(c_ds);
? ? ? ? ? ? }
? ? ? ? ? ? finally
? ? ? ? ? ? {
? ? ? ? ? ? ? ? conn1.Close();
? ? ? ? ? ? ? ? command1.Dispose();
? ? ? ? ? ? ? ? conn1.Dispose();
? ? ? ? ? ? }
? ? ? ? ? ? //為報(bào)表瀏覽器指定報(bào)表文件
? ? ? ? ? ? this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";
? ? ? ? ? ? //指定數(shù)據(jù)集,數(shù)據(jù)集名稱后為表,不是DataSet類型的數(shù)據(jù)集
? ? ? ? ? ? this.reportViewer1.LocalReport.DataSources.Clear();
? ? ? ? ? ? this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));
? ? ? ? ? ? //顯示報(bào)表
? ? ? ? ? ? this.reportViewer1.RefreshReport();
? ? ? ? }
運(yùn)行后的數(shù)據(jù)顯示:
========
使用RDLC報(bào)表(三)--向RDLC報(bào)表傳入?yún)?shù)
http://blog.csdn.net/panting8/article/details/7320559在使用報(bào)表向客戶展示結(jié)果數(shù)據(jù)時(shí),實(shí)時(shí)的在報(bào)表中顯示某些特定的數(shù)據(jù)是必需的,如:顯示的部門(mén)、打印的日期等。本文只簡(jiǎn)單的演示向報(bào)表內(nèi)傳入一個(gè)字符值。如有其它問(wèn)題,歡迎討論。
1、新建一個(gè)工程TestReport,一個(gè)Form窗體,放入一個(gè)TextBox、一個(gè)Button按鈕,再放入一個(gè)ReportViewer控件。
2、在ReportViewer上選擇新建一個(gè)報(bào)表
3、在打開(kāi)的報(bào)表設(shè)計(jì)器中,選擇工具欄的“報(bào)表”中的“報(bào)表參數(shù)”,新加一個(gè)參數(shù),名稱為content,數(shù)據(jù)類型為string,確定。
4、在報(bào)表設(shè)計(jì)器的頁(yè)面上放入一個(gè)文本框,在文本框上按鼠標(biāo)右鍵->屬性,在“文本框?qū)傩浴贝翱谥?#xff0c;選擇“常規(guī)”選項(xiàng)卡內(nèi)下部的“值”后面的“編輯表達(dá)式”按鈕(就是那個(gè)Fx),在此窗口內(nèi),左下框內(nèi)選擇參數(shù),在右下框?qū)?huì)出現(xiàn)在上一步中設(shè)置的參數(shù),雙擊此參數(shù),在上面的框內(nèi)將出現(xiàn)所需要的表達(dá)式:=Parameters!content.Value。保存此報(bào)表。報(bào)表默認(rèn)名稱為Report1.rdlc。
5、在Form窗體內(nèi)雙擊按鈕,編寫(xiě)如下代碼:
? ? ? ? ? ? this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
? ? ? ? ? ? ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
? ? ? ? ? ? this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });
? ? ? ? ? ? this.reportViewer1.RefreshReport();
6、運(yùn)行工程,在文本輸入框內(nèi)輸入數(shù)據(jù),按下按鈕,數(shù)據(jù)是不是已經(jīng)傳入報(bào)表了?
========
ReportViewer動(dòng)態(tài)報(bào)表開(kāi)發(fā)完整步驟
http://blog.csdn.net/waterxcfg304/article/details/45788639在朋友的邀請(qǐng)下,給他們公司開(kāi)發(fā)一個(gè)簡(jiǎn)單的公司門(mén)戶網(wǎng)站。本人都多年沒(méi)有寫(xiě)ASP.NET C#代碼了。這幾年都在做數(shù)據(jù)庫(kù)和商務(wù)智能這塊。反正朋友說(shuō)網(wǎng)站不難,就個(gè)簡(jiǎn)單的展現(xiàn)網(wǎng)站,于是就答應(yīng)了,找了一天到他們公司去聽(tīng)具體的開(kāi)發(fā)需求,聽(tīng)了需求后,覺(jué)得難道不是很大,主要的難點(diǎn)在一個(gè)在線租賃平臺(tái)。朋友的公司是做檢測(cè)設(shè)備租賃的。于是就答應(yīng)了。承諾在1個(gè)月內(nèi)做好。主要是周末和晚上做。
所有的框架和頁(yè)面展示功能都還可以,很快就開(kāi)發(fā)好了。但是當(dāng)在開(kāi)發(fā)打印報(bào)表的時(shí)候,遇到了就障礙,主要是自己以前做的大多是C/S的開(kāi)發(fā)。B/S的做的不多,更沒(méi)有開(kāi)發(fā)個(gè)B/S報(bào)表,而且該報(bào)表的數(shù)據(jù)源是動(dòng)態(tài)的。
于是只能找度娘了,找了好多都沒(méi)有滿足我的要求的,大部分都是簡(jiǎn)單的直接的從數(shù)據(jù)庫(kù)表里拉一個(gè)靜態(tài)表做為數(shù)據(jù)源。要不就是草草的寫(xiě)點(diǎn)步驟,步驟還不是完整的,誤導(dǎo)特大。說(shuō)誤導(dǎo)是我自己按照他們的說(shuō)法做,調(diào)試都不成功,那個(gè)心情是想罵娘啊。天不負(fù)苦心人。終于搞定了。于是下定決心來(lái)寫(xiě)一個(gè)完整的步驟。希望能給找這方面需求的朋友能直接按照我的步驟一步一步做下去就可以實(shí)現(xiàn)結(jié)果。
ReportViewer連接靜態(tài)的數(shù)據(jù)表就不說(shuō)了,下面來(lái)寫(xiě)下如何實(shí)現(xiàn)讓ReportViewer綁定動(dòng)態(tài)的數(shù)據(jù)源:
一,創(chuàng)建一個(gè)Web窗體,命名為WebPrintOrder。 在工具箱里拉一個(gè)MicrosoftReportViewer控件到該Web窗體里
1,把MicrosoftReportViewer拉到頁(yè)面自動(dòng)生成如下頁(yè)面代碼:
<rsweb:ReportViewer ID="ReportViewer1" runat="server">
</rsweb:ReportViewer>
2,查看頁(yè)面設(shè)計(jì)就會(huì)顯示一個(gè)報(bào)表控件如下:
二,為報(bào)表設(shè)置數(shù)據(jù)源
1,添加RDLC報(bào)表控件,名稱report.rdlc
2,返回到WebPrintOrder設(shè)計(jì)界面,點(diǎn)擊報(bào)表的右上角的>,選擇我剛才添加的Report.rdlc如下圖:
,3
3,雙擊選擇report.rdlc,這個(gè)時(shí)候顯示的是report.rdlc的設(shè)計(jì)頁(yè)面,點(diǎn)擊【添加新數(shù)據(jù)源】,這時(shí)候就會(huì)顯示如下的樣式,左邊多了一個(gè)DataSet1,右側(cè)在App_Code的目錄下面多了一個(gè)DataSet1.xsd的文件。
4,雙擊DataSet1.xsd文件,并且在該頁(yè)面上【右鍵】添加DataTable顯示如下圖:
5,我創(chuàng)建了一個(gè)名稱為PrintOrder的表,然后添加具體的表字段如下圖:
6,由于我的報(bào)表里需要兩個(gè)數(shù)據(jù)源,于是我再次添加數(shù)據(jù)源如下圖:
7,當(dāng)我點(diǎn)擊【添加新數(shù)據(jù)源】的時(shí)候,系統(tǒng)自動(dòng)又幫我創(chuàng)建了一個(gè)DataSet2.xsd 的文件在App_Code下面,如下圖:
8,再次雙擊DataSet2.xsd, 添加新的表如下圖:
9,添加一個(gè)表名稱為RentInfo的表如下:
10,回到report.rdlc設(shè)計(jì)界面就可以看到兩個(gè)數(shù)據(jù)源了,分別叫DataSet1 和 DataSet2
三,開(kāi)始設(shè)計(jì)報(bào)表
1, 在report.rdlc設(shè)計(jì)頁(yè)面,把文本框,折線圖和表拖到報(bào)表頁(yè)面上
2,表里的數(shù)據(jù)直接從網(wǎng)站數(shù)據(jù)源里把相應(yīng)的表字段拉到表的明細(xì)里就可以了。如下圖:
3,這里需要重點(diǎn)介紹的是如何在報(bào)表里添加參數(shù),選擇【報(bào)表】----》【報(bào)表參數(shù)】 如下圖:
4, 我的參數(shù)設(shè)計(jì)如下:
5,上面是報(bào)表設(shè)計(jì)和數(shù)據(jù)源設(shè)計(jì)完成,下面來(lái)看代碼如何和此報(bào)表關(guān)聯(lián)起來(lái)。
四,報(bào)表數(shù)據(jù)源的綁定代碼
[csharp]
protected void Page_Load(object sender, EventArgs e) ?
? ?{ ?
? ? ? ?if (!IsPostBack) ?
? ? ? ?{ ?
? ? ? ? ? ?if (!string.IsNullOrEmpty(Request.QueryString["ID"])) ?
? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ?strRentDateCode = Request.QueryString["ID"].ToString(); ?
? ? ? ? ? ?} ?
??
? ? ? ? ? ?BindData(); ?
? ? ? ? ? ?BindPrintOrder(); ?
??
??
? ? ? ? ? ?string CompanyName=Session["Member"].ToString(); ?
? ? ? ? ? ?QueryParam queryparam = new QueryParam(); ?
??
? ? ? ? ? ?if (!string.IsNullOrEmpty(CompanyName)) ?
? ? ? ? ? ? ? ?queryparam.Add("CompanyName", QueryParam.RELATION.EQ, "'" + CompanyName + "'"); ?
??
? ? ? ? ? ?memberModel = member.GetMemberModel(CompanyName); ? ? ? ? ? ?
??
??
? ? ? ? ? ?DataTable dtPrintOrder = GetPrintOrderData(); ?
? ? ? ? ? ?DataTable dtRentInfo = GetRentInfoData(); ?
??
? ? ? ? ? ?ReportViewer1.LocalReport.ReportPath = "Report.rdlc"; ?
? ? ? ? ? ?Microsoft.Reporting.WebForms.ReportDataSource rds = new Microsoft.Reporting.WebForms.ReportDataSource("DataSet1_PrintOrder", dtPrintOrder); ?
? ? ? ? ? ?Microsoft.Reporting.WebForms.ReportDataSource rds2 = new Microsoft.Reporting.WebForms.ReportDataSource("DataSet2_RentInfo", dtRentInfo); ?
??
? ? ? ? ? ?//ReportParameter rptParaA = new ReportParameter("rptParaA", "申請(qǐng)日期"); ?
? ? ? ? ? ?//ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaA }); ?
??
? ? ? ? ? ?//ReportParameter rptParaB = new ReportParameter("rptParaB", "公司名稱"); ?
? ? ? ? ? ?//ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaB }); ?
??
??
? ? ? ? ? ?ReportViewer1.LocalReport.DataSources.Clear(); ?
? ? ? ? ? ?List<ReportParameter> para = new List<ReportParameter>(); ?
? ? ? ? ? ?//這里是添加兩個(gè)字段 ?
? ? ? ? ? ?para.Add(new ReportParameter("RentDate", strRentDateCode)); ?
? ? ? ? ? ?para.Add(new ReportParameter("CompanyName", memberModel.CompanyName)); ?
??
? ? ? ? ? ?para.Add(new ReportParameter("Address", memberModel.Address)); ?
? ? ? ? ? ?para.Add(new ReportParameter("Person", memberModel.Person)); ?
??
? ? ? ? ? ?para.Add(new ReportParameter("Phone", memberModel.Phone)); ?
? ? ? ? ? ?para.Add(new ReportParameter("Email", memberModel.Email)); ?
??
? ? ? ? ? ?para.Add(new ReportParameter("Count", dtPrintOrder.Rows.Count.ToString())); ?
??
??
? ? ? ? ? ?this.ReportViewer1.LocalReport.SetParameters(para); ?
? ? ? ? ? ?ReportViewer1.LocalReport.DataSources.Add(rds); ?
? ? ? ? ? ?ReportViewer1.LocalReport.DataSources.Add(rds2); ?
??
? ? ? ? ? ?this.ReportViewer1.ZoomMode = Microsoft.Reporting.WebForms.ZoomMode.Percent; ?
? ? ? ? ? ?this.ReportViewer1.ZoomPercent = 100; ?
??
? ? ? ? ? ?ReportViewer1.LocalReport.Refresh(); ? ?
??
? ? ? ?} ?
? ?} ?
五, 運(yùn)行程序查看報(bào)表如下:
導(dǎo)出成PDF如下:
六,至此ASP.Net C# 動(dòng)態(tài)ReportViewer開(kāi)發(fā)完成。如果您能一直看到這里,我相信您肯定能開(kāi)發(fā)出此類報(bào)表。希望此文章能給您幫助。歡迎互相學(xué)習(xí)!我也是B/S報(bào)表開(kāi)發(fā)的二把刀,呵呵!
========
總結(jié)
以上是生活随笔為你收集整理的C# rdlc 报表学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Win32 鼠标绘图代码研究
- 下一篇: C# 泛型编程学习总结