事實上微軟有一套很不錯的報表元件叫Report Viewer, 在總是被Mssql 的SSRS 要錢的狀況之下, 還是可以透過這個元件開發自已免費的報表系統
但缺點是什麼都要自已來, 目前測試的結果是可以辨識.rdlc的檔案 .rdl的檔,
若是要做成動態的報表檔, 有些地方是要注意的,
事實上主要也是要paser .rdlc 這張報表檔
而這報表檔事實上是一張xml的檔案所以可以透過xmlreader來解析它裡面的一些xml元素然後動態設定
步驟一:先產生製作一個rdlc的檔案, 在此就不說明設計報表的方法了,
步驟二:用記事本打開rdlc的檔案, 可以看到Tag<datasets>這個區段
<DataSets>
<DataSet Name="testDataSet_dbmanage">
<Fields>
<Field Name="DBid">
<DataField>DBid</DataField>
<rd:TypeName>System.UInt32</rd:TypeName>
</Field>
<Field Name="DBsource">
<DataField>DBsource</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>testConnectionString</DataSourceName>
<CommandText>SELECT `DBid`, `DBsource` FROM `dbmanage`</CommandText>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>testDataSet</rd:DataSetName>
<rd:TableName>dbmanage</rd:TableName>
<rd:TableAdapterName>dbmanageTableAdapter</rd:TableAdapterName>
<rd:TableAdapterFillMethod>Fill</rd:TableAdapterFillMethod>
<rd:TableAdapterGetDataMethod>GetData</rd:TableAdapterGetDataMethod>
</rd:DataSetInfo>
</DataSet>
</DataSets>
在這個XML的區段中有幾個必需要知道的事情, 每一個RDLC都必需要有一個資料來源,
當ReportViewer元件作編輯時就會讀根據這個區段的資料載入資料來源,
所以在DataSet Name="testDataSet_dbmanage" 代表必需要有一個名為testDataSet_dbmanage 的 Dataset
給RDLC檔案作為資料來源,
步驟三:
//用程式碼撰寫Dataset, <這裡用的是以Mysql為資料來源>
MySqlConnection dd = new MySqlConnection();
dd.ConnectionString = "server=localhost;database=test;uid=root;pwd=1234";
string qsa = "SELECT `DBid`, `DBclass`, `DBname`, `DBpassword`, `DBmark`, `DBsource` FROM `dbmanage` ";
dd.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
MySqlCommand mysqlcom = new MySqlCommand(qsa, dd);
MySqlDataAdapter mysqldap = new MySqlDataAdapter(mysqlcom);
mysqldap.Fill(ds, "testDataSet_dbmanage"); //這裡要注意的是所命名的資料表名稱需與RDLC內的dataset元素一樣
dt = ds.Tables[0];
Microsoft.Reporting.WebForms.ReportDataSource ddab = new Microsoft.Reporting.WebForms.ReportDataSource("testDataSet_dbmanage", dt);
ReportViewer1.Reset();
ReportViewer1.LocalReport.ReportPath = ("rdlcReport\\Report5.rdlc");
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(ddab);
ReportViewer1.LocalReport.Refresh();
p.s.若是要寫動能的查詢, 由textbox輸入查詢條件的話, 從dataset下手就ok了~
sqlquery = "SELECT `DBid`, `DBclass`, `DBname`, `DBpassword`, `DBmark`, `DBsource` FROM `dbmanage` where dbid = @變數"
然後mysqlcommand.parameter.add就行了!
=================================================================
留言列表