使用RDLC作為模板導出PDF


最近在公司分配的任務是做報表的PDF導出,是使用RDLC作為模版來導出PDF;折騰了快一個星期,終於弄好了,開心之余覺得網上對於RDLC應用的相關資料還是挺少的,於是就寫了這篇,希望與大家分享

在這里我假定讀者已經具備了對於RDLC文件操作的基本知識,如不懂,請谷歌

環境是VS2008,可能XML的某些節點名會和VS2010的有出入

大體想要的導出效果如下圖(為了避免不必要的麻煩,馬賽克了敏感信息)

為了實現這種列重復的效果,不能使用Table控件,而要使用List控件,然后在List控件中一個個添加TextBox來顯示數據

 

設置數據源:

 之前網上寫的拖拽式設置數據源的方法並不是很好,我更希望手動設置數據源,代碼如下

View Code
            DataTable dt = new DataTable();
            dt.Columns.Add("Race");
            dt.Columns.Add("Candidate");

            dt.Columns.Add("VoteNumber");
            dt.Columns.Add("VotePercent");

            List<EMS_EleVoteResultDetailInfo> voteList = BLLClasses.EMS_EleVoteResultDetail.GetCityCandidateResultByContestID(electionID, contestID);//從數據庫中讀取數據

            ArrayList a = new ArrayList();
            foreach (var item in voteList)
            {

                DataRow dr = dt.NewRow();
                dr["Candidate"] = item.BallotFirstName + " " + item.BallotLastName;
                if (item.CandidateEleStatus == CandidateElectionStatus.Acclaimed)
                {

                    dr["VoteNumber"] = Utility.GetEnumAlert(CandidateElectionStatus.Acclaimed);
                    dr["VotePercent"] = Utility.GetEnumAlert(CandidateElectionStatus.Acclaimed);
                }
                else
                {
                    dr["VoteNumber"] = item.FormatVoteReceived;
                    dr["VotePercent"] = item.VotePrecinct + "%";
                }
                dt.Rows.Add(dr);
            }
            ReportViewer ReportViewer1 = new ReportViewer();
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Jinn", dt));

設置好之后還要去配置RDLC文件的數據源。因為RDLC是XML格式的,所以以XML格式打開文件,添加如下代碼

View Code
  <DataSources>
    <DataSource Name="DummyDataSource">
      <rd:DataSourceID>fa7953f5-6ad6-41d7-82d4-d11193f55196</rd:DataSourceID>
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString />
      </ConnectionProperties>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="Jinn">
      <Fields>
        <Field Name="Race">
          <DataField>Race</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="Candidate">
          <DataField>Candidate</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="VoteNumber">
          <DataField>VoteNumber</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="VotePercent">
          <DataField>VotePercent</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
      </Fields>
      <Query>
        <DataSourceName>DummyDataSource</DataSourceName>
        <CommandText />
        <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
    </DataSet>
  </DataSets>

 

 

根據條件判斷是否可見:

有的時候Ward Number那一列是要不顯示的,要設置按條件隱藏。

對着某個TextBox右鍵,Properties,Visibility,Expression

=IIf(Fields!Ward.Value="",True,False)

 

模擬CheckBox顯示:

1、一個TextBox,調整大小,設置顯示邊框,設置數據源的時候做一個判斷,if true則傳一個“√”過去

2、兩張圖片,數據源傳一個值過去,判斷真則顯示有勾的,假顯示沒勾的

還是推薦第一種方法

 

這樣就基本大功告成了。其實主要的步驟是配置數據源,其他都沒什么難度

在下一篇文章里面我將介紹我是如何動態添加/刪除一列的,這玩意才是真心麻煩

 

PS:不知道有沒有更好的PDF導出方法,歡迎交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM