可以這樣添加rdlc ,下面為部分關(guān)鍵代碼,看了就懂 我的是C#的,思路就是這樣
創(chuàng)新互聯(lián)公司主營湞江網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),湞江h(huán)5微信小程序開發(fā)搭建,湞江網(wǎng)站營銷推廣歡迎湞江等地區(qū)企業(yè)咨詢
if (ds.Tables[0].Rows.Count 0)
{
labmsg.Text = ds.Tables[0].Rows.Count.ToString();
ReportDataSource rds = new ReportDataSource("DataSet1", ds.Tables[0]);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.ReportPath = "rdl\\YP\\rdlwtdataquery.rdlc";
ReportViewer1.LocalReport.Refresh();
}
else
{
}
沒試過封裝DLL。
提供其他的方式:rdlc文件屬性,生成操作:嵌入的資源。
VB.NET的一個示例代碼:
Me.reportviewer.Reset()
'這個是相對路徑調(diào)用的方法Me.reportviewer.LocalReport.ReportPath
=
Application.StartupPath
".\Reports\報表名.rdlc"
'增加報表數(shù)據(jù)源
Me.reportviewer.LocalReport.DataSources.Add(New
ReportDataSource("DataSet_IntMater",
DataSet.IntMaterComplain))
'使用嵌入的資源方式調(diào)用報表
Me.reportviewer.LocalReport.ReportEmbeddedResource
=
"項目名.報表名.rdlc"
Me.reportviewer.LocalReport.DisplayName
=
"報表"
Me.reportviewer.RefreshReport()
提供一種方案,使分頁瀏覽的報表每頁只顯示N條記錄,最后一頁記錄條數(shù)不足N的,用空行補(bǔ)齊。
示例:
記錄共7條,每頁顯示5條記錄:
下載代碼(vs2008,需要安裝AdventureWorks數(shù)據(jù)庫)
原理:
由于表的分組包含“在起始處分頁”和”在結(jié)束處分頁”的功能,所以我們考慮先將數(shù)據(jù)分成若干個記錄條數(shù)為N的組,
再啟用“在結(jié)束處分頁”的功能。
那么,如何分組呢?考慮記錄的下標(biāo)為 0,1,2,3... 的自然數(shù)序列,用下標(biāo)除以N(設(shè)為3),得到以下數(shù)列:
0 /3 取整:0
1 /3 取整:0
2 /3 取整:0
3 /3 取整:1
4 /3 取整:1
5 /3 取整:1
6 /3 取整:2
所以,我們可以以下標(biāo)除以3的商的整數(shù)值對數(shù)據(jù)進(jìn)行分組,則每個分組包含3條數(shù)據(jù)。當(dāng)記錄條數(shù)不能被3整除時,最后一個分組會不足3。分組表達(dá)式為 =Int((RowNumber(Nothing) - 1) / N)。
另一個需要考慮的問題是,最后一個分組的記錄條數(shù)可能不足N,怎樣以空白行補(bǔ)齊它呢?考慮TableRow.Visibility.Hidden屬性,可通過表達(dá)式設(shè)置它的狀態(tài)。為此,我們在詳細(xì)信息組內(nèi)額外添加N-1行,如果檢查到當(dāng)前是記錄的最后一組最后一條并且該組記錄條數(shù)不足N時,將Hidden設(shè)為Flase;其它情況為True。
表達(dá)式為=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() = r,False,True)。其中r從1開始遞增。
實現(xiàn):
1.新建WinForm項目,用報表向?qū)砑右粡垐蟊?,?shù)據(jù)源為AdventureWorksDataSet的Employee數(shù)據(jù)庫表,調(diào)整詳細(xì)信息(這里只選擇了表內(nèi)前面7條數(shù)據(jù)):
2.(以下都是在報表的設(shè)計模式中)在表內(nèi)添加組,分組表達(dá)式為 =Int((RowNumber(Nothing) - 1) / 3),取消包括組頭和包括組尾,勾選在結(jié)尾處分頁:
3.連續(xù)插入兩行:
4.選擇插入的第一行(TableRow3),在Visibility的Hidden屬性下選擇“表達(dá)式”,在打開的文本框內(nèi)填入
=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() = 1, False, True);同理,在插入的第二行(TableRow4)同位置填入
=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() = 2, False, True):
5.運(yùn)行程序,可以看到前兩頁分別只有3條記錄,最后一頁1條,空白處用空行補(bǔ)齊了:
以MSServer自帶Northwind庫文件內(nèi)的Customers及Orders這兩個表為例,建立兩個報表文件,在查詢得出Customers的表數(shù)據(jù)后,點擊此表內(nèi)的CustomerID數(shù)據(jù),報表將轉(zhuǎn)入至下一個報表,并顯示與之相關(guān)的Orders的數(shù)據(jù),即VS中所謂的鉆取式報表。
1、打開一個工程,并新建一個From,放入一個Button及一個ReportViewer控件。
2、在工程內(nèi)新建一個數(shù)據(jù)源,連接到Northwind庫文件,顯示Customers及Orders這兩個表
3、新建一個報表文件,并以表格的形式來顯示數(shù)據(jù),將Customers表內(nèi)的CustomerID、CompanyName及Address三個字段放入,形成一份有表頭及數(shù)據(jù)的簡單報表,并將此報表保存命名為customerReport
4、再建一個報表文件,與customerReport相同,也以表格的形式來顯示報表,將Orders內(nèi)的OrderID、CustomerID、ShipName及OrderDate四個字段放入表格內(nèi),報表保存為orderReport
5、orderReport的數(shù)據(jù)源根據(jù)主報表customerReport的數(shù)據(jù)來確定數(shù)據(jù)源的數(shù)據(jù),查看表格的數(shù)據(jù)集名稱,我的顯示為NorthwindDataSet_Orders,也可以自己另建一個,具體方法見我的《RDLC報表(二)》
6、再打開customerReport報表,將CustomerID設(shè)置成為可點擊的索引字段,以便轉(zhuǎn)入下一個報表。選擇CustomerID字段,按鼠標(biāo)右鍵,在”文本框?qū)傩浴按翱谥?,選擇”導(dǎo)航“選項卡,在下面的”超鏈接“中選擇”跳至報表“,在報表名稱中選擇”orderReport“,再按下后面的”參數(shù)...“按鈕,輸入一個參數(shù)名稱,如customerid,參數(shù)值選擇=Fields!CustomerID.Value。為了與其它數(shù)據(jù)相區(qū)分,可以將此列數(shù)據(jù)根據(jù)自己的習(xí)慣改變顏色或加下劃線
7、在orderReport中,設(shè)置一個報表參數(shù),與CurtomerReprot中的名稱相同,以接收父表中傳入的參數(shù)
8、新建兩個取得數(shù)據(jù)的方法,一個從Customers中取得數(shù)據(jù)集,另一個從Orders中取得數(shù)據(jù)集,且?guī)?shù)。此兩個方法可以自己編寫類庫來實現(xiàn),也可以在VS的數(shù)據(jù)集內(nèi)添加。為了演示方便,我直接使用了Customers的GetData(),并編寫了一個Orders的GetDataByCustomerID(@cid)的方法。
9、在From的Button中編寫如下代碼:
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、使用報表的Drillthrough事件,當(dāng)選擇了鉆取項時會發(fā)生此事件,給下一個報表取值,代碼如下:
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)));
}