中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

自定義數據的RDLC報表開發入門(一)

發布時間:2020-06-26 08:47:06 來源:網絡 閱讀:6076 作者:shengqin105 欄目:編程語言

(1)前言


使用了VS好多年,一直認為制作報表是件很頭痛的事,不是自己沒有研究過,但說真的的確是很頭痛的事,尤其是C#下面的各種數據綁定,網上蠟人張的BLOG對RDLC就有很透徹的詳細說明,我看了半天,就給那些報表結構回路搞得莫名其妙,大師級別的人果然功力與我不一樣。因為項目的需要,這兩天回爐一下自己從前的報表知識,順便寫篇東西,好讓后來者別多太多像我一般的無謂腦力跟體力勞動。


本人是位明顯的實用主義者,程序開發有太多的理論,量你一輩子的時間也絕對不可能全部了解清楚的,可當你實際操作過一個工程的話,有些理論或許會不言而喻,很多專家都說,RDLC是很容易上手的,個人實踐證明,確實不難——只要你能硬著頭皮撐過我這篇入門級別的教程就好了,進階的時候就真別問我,我也是菜鳥。


(2)自定義數據集(DataSet)


網上挺多關于RDLC的例子其實都用了Northwind的那個例子,個人認為,只是報表練練手就要動用數據庫好樣的龐然大物顯得有點過份,所以在本教程里我寧愿選擇自定義的數據,代碼填充數據的內容,作為一個簡單的教程而言,單獨的示例工程就能運行很重要,而且,不管是自定義的數據集還是取自SQLServer的數據集,在實際報表操作上沒什么差別,個人認為自定義的數據集更靈活一點。


DataSet在VS上面的昵稱是“數據集”,可能探討過數據庫的童鞋對這個的理解得比我要多,我的理解是比較像圖形化的Struct集合體,可以更方便更靈活創建你所需要的數據結構體,接下來就依照這樣定義好的結構生成一個實例(myDataSet),再填充你獲得的數據,一但你的報表跟實例作了綁定,那樣數據呈現就不需要我們多想了,微軟會自動幫你做好的——這便是RDLC的整個開發思路而已,內容不多。


下面是實操部分,我的開發環境是VS2012,好像以前用VS2008也是差不多的樣子。


1)新建一個VS2012的WinFrom工程項目,我的工程命名是“RdlcTest”;


2)在解決方案資源管理器中,右鍵工程,“添加”--“新建項”,選擇“數據集(DataSet)”,工程便增加了一個MyDataSet.xsd的項,這個就是你自己定義的數據集啦;


3)雙擊MyDataSet.xsd,在圖形界面下新建你自己的數據結構體,以下是我自己的例子,數據類型全部是String(右鍵打開列的屬性可以設置),有什么意義你就自己猜吧;

自定義數據的RDLC報表開發入門(一)


(2)新建報表及關聯數據集


1)在工程中添加一張報表(Report1.rdlc),我這里沒用“報表向導”,新建好后雙擊打開,你會看到一個報表設計頁面跟一個“報表數據”的窗口(話說VS2012查找窗口還是相當的方便的),在“報表窗口”里添加一個數據集,你會看到下面這個對話框,選好剛剛建好的DataSet后,點確定即可。

自定義數據的RDLC報表開發入門(一)


2)添加報表數據集后的“報表數據”窗體是這樣一副模樣:

自定義數據的RDLC報表開發入門(一)


3)在報表設計窗口新建一個表,我們一條數據是7條個變量,就建一個七列的表(添加列的操作不需要詳解了吧),然后用鼠標將“報表數據”里的DataSet1下的項逐個拖到表頭里去,會有下面的效果。

自定義數據的RDLC報表開發入門(一)


4)雖然新建好了表跟添加數據集,但現在因為還沒填充數據,所以也不可能有東西出來,何況你報表的容器還沒有弄好呢是吧。回顧一下上面的步驟,我們姑且可以這么理清一下思路:一張報表(RDLC)、一個與報表關聯的數據集(DataSet)、N多數據的容器(表或文本框)構成一張報表的全部元素,ReportView只是用來裝報表的容器而已。


(3)添加ReportViewer及關聯報表


1)打開你工程的MainForm的設計窗體,從“工具箱”中將“ReportViewer”拖到你的MainForm里去,當你選擇ReportViewer時,其右上角有個小三角形,點擊一下,可以看到很多選項:

自定義數據的RDLC報表開發入門(一)


2)第一項選擇報表,當然選剛剛你添加的“Report1.rdlc”,意思就是這個ReportViewer只顯示Report1.rdlc這張表;第二項選擇數據源,這里需要點思考,如下圖所示,報表數據源“DataSet1”是剛剛在“報表數據”窗口添加的一個數據集,而數據源實例又是什么呢?我選了項目里的MyDataSet--TestRecord,于是在這個MainForm的窗體下面會自動生成一個myDataSet的數據集實例及testRecordBindingSource的綁定實例(同參考下圖),我的想法是“DataSet1”像個接口,“myDataSet”則是已經實例化的變量,類似吧?至于“父容器停靠”的選項,個人建議還是選了吧,好看一點。

自定義數據的RDLC報表開發入門(一)


3)假如你myDataSet里面已經有內容的話,你可以生成看到以下的這副樣子:

自定義數據的RDLC報表開發入門(一)


4)如何填充myDataSet的數據,參見下面MainForm的窗體代碼,代碼應該是不難理解的,重要的是我想數據多樣化一點,方便進行下一步的報表呈現講解,示例工程我放到51CTO下載里了,編譯環境是VS2012,下載地址是http://down.51cto.com/data/898719,下面博文的上傳機制貌似有問題,有興趣的朋友可以隨便看看,高手莫拍。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RdlcTest
{
    public partial class MainFrom : Form
    {
        public MainFrom()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 加載窗體
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            //更新數據集的內容
            this.UpdateDataSet();
            //刷新報表
            this.reportViewer1.RefreshReport();
        }
        /// <summary>
        /// 為myDataSet手動添加數據
        /// </summary>
        private void UpdateDataSet()
        {
            for (int i = 0; i < 5; i++)
            {
                string id = DateTime.Now.ToString() + "-" + i.ToString("D2");
                for (int j = 0; j < 4; j++)
                {
                    this.myDataSet.TestRecord.AddTestRecordRow(id, "001", "shengqin", "Man", "Change Road", DateTime.Now, "describe : " + i.ToString("D3"));
                }
            }
            for (int j = 0; j < 4; j++)
            {
                this.myDataSet.TestRecord.AddTestRecordRow(DateTime.Now.ToString() + "-10", "002", "Joey", "Man", "Testing Speed", DateTime.Now, "describe : Joey's testing.");
            }
            for (int j = 0; j < 4; j++)
            {
                this.myDataSet.TestRecord.AddTestRecordRow(DateTime.Now.ToString() + "-11", "003", "Lily", "Woman", "Testing Speed", DateTime.Now, "describe : Lily's testing.");
            }
            for (int i = 20; i < 25; i++)
            {
                string id = DateTime.Now.ToString() + "-" + i.ToString("D2");
                for (int j = 0; j < 4; j++)
                {
                    this.myDataSet.TestRecord.AddTestRecordRow(id, "001", "shengqin", "Man", "Testing Speed", DateTime.Now, "describe : " + i.ToString("D3"));
                }
            }
        }
    }
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

合山市| 股票| 屏边| 宁远县| 五家渠市| 固镇县| 白银市| 安福县| 孝义市| 石柱| 若尔盖县| 仙居县| 萨迦县| 鄂托克旗| 重庆市| 桐乡市| 水富县| 盐山县| 红原县| 龙胜| 北京市| 莲花县| 罗山县| 聂拉木县| 荃湾区| 桓仁| 新绛县| 保德县| 辛集市| 共和县| 略阳县| 绥江县| 乡城县| 梁山县| 慈溪市| 额济纳旗| 山阳县| 新建县| 崇明县| 泾川县| 寿宁县|