原來寫過的,當時不會上傳圖片,對不住各位。現在重整理了一下,有圖,比較詳細。
RDLC 報表開發
開啟Visual Studio 2005
建立ASP.NET 網站
添加資料集
會自動調出資料集配置視窗TableAdapter
如果上面的視窗沒有自動調出,可以如
可以調出上面的TableAdapter 視窗
建立立資料庫連接
下面的這一步會將資料庫連接儲存到config 檔案中
下面的這一步可以,選擇產生SQL的方式
讓我們先回到SQL Server Query Analyzer
開啟SQL Server 查詢分析器
建立如的預存程序
然後回到 Visual Studio 2005
選擇使用現在的預存程序,下一步
這裡,我們只需要選擇所需要的預存程序,如剛才建立的EmployeeReport 即可
點擊 完成。完成TableAdapter嚮導的配置.
添加報表專案
拖動一個Table 到報表設計師中
選擇網站資料集中的欄位,把它拖動到表格的列中
建立立一個ASPX頁面,拖動一個Report Viewer控制項到頁面中
在ReportViewer任務視窗中,選擇剛才建立的rdlc檔案
產生解決方案,然後執行
看到結果,報表執行完成
至此報表開發成功。
注意
1. 剛才的SQL 指令碼
CREATE PROC EmployeeReport
AS
SELECT * FROM Employee
GO
實際的報表開發中,一定不要用SELECT * ,只取報表中需要查看的欄位。
2. 有時候,可能需要使用者選擇一些條件,有選擇性的查看報表。而不是全部綁定資料
如,使用者可能只需要查看2008-9-29至2008-9-30時間段之間的資料
則作法如下
先建立好如的ASPX頁面,在View Report 事件中寫如下的程式
ReportViewer1.LocalReport.ReportPath = AppDomain.CurrentDomain.BaseDirectory + "/Report/Request.rdlc";
DateTime dtFrom =Convert.ToDateTime(txtDateFrom.Text);
DateTime dtTo =Convert.ToDateTime(txtDateTo.Text);
string requester = txtRequester.Text;
string dept = txtRequestDept.Text;
string material = ddlMaterial.SelectedValue;
string iprstatus = ddlStatus.SelectedValue;
DataTable reqrpt = ReportDB.RequestReport(dtFrom, dtTo, material, dept,requester, iprstatus);
if (reqrpt != null)
{
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(
new Microsoft.Reporting.WebForms.ReportDataSource("Request_RequestReport", reqrpt));
ReportViewer1.LocalReport.Refresh();
}
ReportViewer1.LocalReport.Refresh();
根據使用者所選的參數,把資料值傳到SQL語句中即可.下面是RequestReport方法的源碼
DataTable RequestReport(DateTime dtFrom, DateTime dtTo, string pMaterial, string pDept, string pRequester, string pIPRStatus) {
string MySQL = Purchase;
string whDate = " RequestDate BETWEEN '{0}' AND '{1}' ";
MySQL = MySQL + string.Format(whDate, dtFrom, dtTo);
string whMaterial = " AND MaterialCode='{0}' ";
if (pMaterial != "ALL")
{
MySQL = MySQL + string.Format(whMaterial, pMaterial);
}
string whDept = " AND RequestDepartment='{0}' ";
MySQL = MySQL + string.Format(whDept, pDept);
string whRequester=" AND Requester='{0}' ";
if(pRequester!="ALL")
MySQL = MySQL + string.Format(whRequester, pRequester);
string whIPRStatus = " AND IPRStatus={0} ";
if (pIPRStatus != "ALL")
{
MySQL = MySQL + string.Format(whIPRStatus, pIPRStatus);
}
IDataProvider privider = DataProvider.CreateDataProvider();
DataSet ds = privider.RetriveDataSet(MySQL);
if (ds != null && ds.Tables.Count > 0)
return ds.Tables[0];
else
return null;
}
const string Purchase="SELECT SerialNO,LedgerAcc,CostCenter,Requester,"+
" RequestDate,RequestDepartment,MaterialCode, " +
" Brand,Specifications,Unit,Quantity,Usage, "+
" ExpectedDeliveryDate,Currency "+
" ,Quotation1Supplier,Quotation1UnitPrice,Quotation1Amount, "+
" Quotation2Supplier,Quotation2UnitPrice,Quotation2Amount, "+
" Quotation3Supplier, Quotation3UnitPrice, Quotation3Amount, "+
" ProposedQuotationSupplier, ProposedQuotationUnitPrice, "+
" ProposedQuotationAmount,QuotationRemarks ,IPRStatus,QtyTo, UnitPriceTo FROM IPR WHERE ";
3. 設計報表時,可以用上述的方法,實際運行時,可以替換成SQL 陳述式,傳到ReportDataSource中即可,只要相當的表結構欄位是存在的。
4. 報表的定義是XML結構的,如果熟悉報表的定義格式規範,可以用文字編輯器開啟直接修改。
5. 如果採用SQL Server 2005的伺服器端報表,可能還會有進一步的方便設計和開發的地方.這裡採用的是.net framework的組件,用戶端只需要安裝.net framework2.0即可,無需安裝額外的組件.
原文串連如下
RDLC 報表開發