Minying's Blog

Just another WordPress.com weblog

定義RDLC報表資料來源

Posted by minying 於 22 一月, 2009

ReportViewer支援的資料包含物件(Object)及資料表(DataTable),我想資料表的方式應是比較常用的方式吧!在設計RDLC報表時,需要有資料來源,加入資料來源有兩個步驟。

1.增加資料來源到專案中:

   1.1在資料來源視窗中,"加入新資料來源…",透過資料來源組態精靈來設定。會產生DataSet資料集及DataSet檔案(.xsd)。

   1.2可在專案中加入新項目,指定加入資料集(DataSet1.xsd)的方式,手動新增DataTable,並為DataTable加入資料行。

這樣就可以提供報表設計時所需使用的資料來源。目前我大都使用1.2的方式,產生一個空的DataSet及DataTable及DataColumn,再動態將要使用的資料填入這個DataTable中。

2.新增專案的資料來源到報表:

使用"報表資料來源"對話方塊,在設計.rdlc的畫面時,從功能表中的報表->資料來源。

p07

這個動作並不是每次一定要做的,因為從資料來源視窗中將欄位拖拉到報表頁面時,會自動產生相關的設定;但如果報表不再使用先前所使用的資料來源時,它並不會自動偵測而改變;或者DataSet及DataTable稱名變更後,也不會自動變動,必須手動去修改這裡的值。專案資料來源的名稱是以DataSet的Name + 底線 + DataTable的Name。DataSet及DataTable的Name,可以在.xsd的設計屬性中修改。這個名稱在Coding時,是會用到的,重要。

當執行專案時,在ReportViewer中出現錯誤訊息如下時,"尚未提供資料來源’DataSet1_DataTable1’的資料來源執行個體“,就必須手動去.rdlc中的報表資料來源對話方塊中去修改相關的值。

7 回應 to “定義RDLC報表資料來源”

  1. 路經貴寶地 said

    版主您好:
    您的RDLC教學很寶貴
    外面不多專門介紹RDLC的書籍
    最近正好在研究RDLC的使用
    想要Load已寫好的查詢的DataTable給版主1.2所描述的DataSet.xsd
    卻不知道怎麼載入DataSet.xsd
    想要請問版主如何Load

    感恩

    頭大的過路人

    • minying said

      以下是我的做法,如果其他的做法,歡迎大家提出來分享!
      1.切換到資料來源視窗,可以看到所建立的DataSet及DataTable的名稱。
      2.如果你用預設的名稱,則為DataSet1及DataTable1
      3.將資料載入的語法:DataSet1.Tables(“DataTable1″).Load(cmd.ExecuteReader)

  2. 路經貴寶地 said

    版主您好:
    您的RDLC教學很寶貴
    現在外面不多專門介紹RDLC的書籍
    最近正好在研究RDLC的用法
    想要把已經寫好的查詢的DataTable傳到版主1.2所描述的DataSet.xsd
    卻不知道該怎麼做
    該寫的DT和該建的.xsd等都建好了
    想請問版主究竟如何傳過去呢?

    感恩

    頭大的過路人

  3. 路經貴寶地 said

    不好意思
    請問一下"cmd.ExecuteReader"是什麼呢?
    如果是SQL指令的字串
    VB.NET顯示.ExecuteReader不是字串的成員的錯誤訊息
    也不是TableAdapter的成員
    之後嘗試將"cmd.ExecuteReader"直接用已寫好的DataTableName置換
    執行後卻顯示[並未將物件參考設定為物件的執行個體](try…catch截出的例外訊息)
    顯然它應該沒有吃進去
    試了好久仍試不出來
    還希望版主解惑

    感恩

    頭大的過路人

    • minying said

      cmd是我宣告的OledbCommand物件
      Dim cmd As New OleDbCommand
      cmd.Connection = cnDB ‘cnDB是我宣告的oleDbConnection物件
      cmd.CommandText = “Select * from ………"

      再來把資料載入DataTable中
      MyDataSet.Tables(“DataTable1″).Load(cmd.ExecuteReader)

      若你是用OleDbDataAdapter也可以這樣寫
      Dim cmd As New OleDbCommand
      cmd.Connection = cnDB
      cmd.CommandText = “Select * from ……."
      Dim da As New OleDbDataAdapter(cmd)
      da.Fill(MyDataSet, “DataTable1″)

  4. 路經貴寶地 said

    感謝版主的熱心指導
    我因為從頭到尾沒有用到OleDbCommand
    無怪乎找不到
    我是宣告一個string去做SQL指令
    用OleDbDataAdapter去link這個string執行
    按版主新提供的方法便可以解套
    感激不盡
    後來又發現了還有Merge()的方法也可以Load程式自建的DataSet資料進MyDataSet.xsd內
    再次感謝

    頭大的過路人

    • minying said

      Merge 方法用來合併具有大量相似結構描述的兩個 DataTable 物件。合併通常用於用戶端應用程式,來將資料來源的最新變更加入現有的 DataTable。這讓用戶端應用程式擁有具資料來源的最新資料的已重新整理 DataTable。
      用於資料載入的時機,可能還要考量一下吧!

發表留言