事實上微軟有一套很不錯的報表元件叫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就行了!

=================================================================

 

 




arrow
arrow
    全站熱搜

    斷了線的小木偶 發表在 痞客邦 留言(0) 人氣()