Using CrystalReportPartsViewer Control In ASP.NET

Created at : May/17/2008   [Click this link to download code sample]
3861 Views   14 Comments

CrystalReportPartsViewer Control (saya singkat saja menjadi CRPV), merupakan control lain selain CrystalReportViewer (CRV) yang digunakan sebagai container untuk Crystal Report file. Bila kita menggunakan CRV maka semua record yang terdapat di dalam data source akan ditampilkan semua. Lain halnya dengan CRPV, ia akan menampilkan record sesuai dengan kebutuhan. Artinya data tertentu dapat kita jadikan sebagai link yang apabila kita klik link nya maka ia akan menampilkan detail dari record tersebut, atau dengan kata lain CRPV akan menampilkan datanya dengan mode DrillDown.

CRPV ini berguna jika data report yang ditampilkan sangat banyak dan kita ingin melihat sesuai dengan kriteria yang diinginkan. Hasil web preview dari CRPV ini berbeda dengan CRV, artinya design report yang sudah dibuat tidak akan ditampilkan sesuai dengan aslinya, kita harus melakukan customisasi di page.

Pada posting kali ini saya akan memperlihatkan perbedaan hasil preview dan perbedaan langkah-langkah yang harus ditempuh dalam membuat CRPV dibandingkan dengan CRV. Report yang saya design menggunakan view Invoices yang terdapat di dalam database Northwind. Report tersebut datanya dikelompokkan ke dalam kelompok berdasarkan Country kolom sebagai outer group dan kelompok CustomerName sebagai inner group. Sehingga nanti diharapkan dalam web preview report tersebut pertama kali akan menampilkan list country sebagai link / DrillDown yang jika diklik akan menampilkan data CustomerName beserta total summary dari invoices yang sudah pernah dilakukan, dan juga pada akhirnya CustomerName tersebut juga berlaku sebagai link yang bila di klik akan menampilkan detail dari transaksi tersebut seperti misalnya OrderID, OrderDate, ProductName, TotalPrice.

Berikut tampilan design crystal report yang digunakan (Visual Studio yang digunakan yaitu VS 2008 dengan Crystal Reports 2008 yang sudah include didalamnya) :

Jika kita lihat Report Previewnya kalau menggunakan CRV maka hasilnya akan seperti ini :

Sekarang mari kita lihat bagaimana caranya merubah report menjadi report yang akan di consume oleh CRPV. Untuk membuat report yang akan digunakan oleh CRPV maka kita harus tentukan data yang mana yang akan dijadikan sebagai link untuk DrillDown report. Kita bisa gunakan data yang terdapat didalam section GroupHeader atau section GroupFooter untuk dijadikan target link, sedangkan data yang terdapat didalam section details dijadikan sebagai target terakhir untuk display data detail dari link tersebut. Berikut langkah-langkahnya :

1. Klik kanan Group1Name yang terdapat didalam GroupHeaderSection, pilih Copy :

2. Klik kanan pada area yang kosong di report tsb, pilih Report -> Report Options :

3. Klik tombol Paste Link, field Object Name akan diisi dengan nama yang sesuai dengan nama Group1Name yang ada di GroupHeader dengan sedikit modifkasi agar tidak bentrok (Leave it default).

4. Lakukan langkah-1, akan tetapi sekarang pilih Format Object :

5. Setelah muncul Format Editor form, pilih tab Hyperlink...check pilihan Report Part Drilldown radio button. Pada avalilable fields anda bebas memilih object-object apa saja yang akan dijadikan sebagai target link object yang telah dibuat. Pada report ini saya memilih object-object yang terdapat didalam GroupFooterSection CustomerID, sehingga apabila link Country di klik maka report akan menampilkan data CustomerName beserta Total Invoice.

6. Langkah berikutnya yaitu membuat target link apabila CustomerName link di klik. Klik kanan Group2Name yang terdapat didalam GroupFooterSection2.

7. Pada Format Editor, pilih tab Hyperlink...check opsi Report Part Drilldown. Pada available fields, pilih object-object yang akan ditampilkan apabila link CustomerName dipilih.

8. Buat sebuah page. Tambahkan control CRPV dan CrystalReportSource control. Set properti FileName report dari CrystalReportSource control tersebut ke file .rpt yang telah dibuat pada langkah sebelumnya diatas. Setelah itu rubah property ReportSourceID CRPV ke id dari control CrystalReportSource.

<CR:CrystalReportPartsViewer ID="CRPartsViewer1" runat="server" 
    AutoDataBind="True" ReportSourceID="CReportSource1" />
    
<CR:CrystalReportSource ID="CReportSource1" runat="server">
    <Report FileName="rptCustOrders.rpt">
        <Parameters>
            <CR:ControlParameter ControlID="ddlCountry" 
            ConvertEmptyStringToNull="False" 
                DefaultValue="" Name="Country" 
                PropertyName="SelectedValue" ReportName="" />
        </Parameters>
    </Report>
</CR:CrystalReportSource>

9. Web preview report menampilkan data Country berupa hyperlink.

10.  Bila salah satu link country tersebut di klik maka akan menampilkan data customer yang terdapat didalam country tsb yang juga merupakan hyperlink. Berikut data Customer untuk country Argentina.

11. Detail data dari salah satu link CustomerName diatas :

Bila kita lihat dari hasil web preview, maka tampilan reportnya berubah, tidak sesuai dengan design report yang telah dibuat sebelumnya, semua header text hilang. Memang begitu konsekuensinya :) ...akan tetapi kita dapat melakukan customisasi layout nya di page. Sekarang bagaimana caranya apabila kita hanya ingin menampilkan data country yang kita pilih sendiri, jadi ketika page di load pertama kali data country belum akan ditampilkan sampai user nantinya memilih country tertentu. Tentu...anda dapat melakukannya :D

Langkah yang harus dilakukan yaitu :

12. Buat Parameter Fields di Crystal Report. Beri nama Country, pilih opsi Discrete Value.

13. Drag and Drop field tersebut ke GroupHeaderSection1 yang digunakan sebagai pengelompok data customer berdasarkan country.

14. Klik kanan Group1Name yang terdapat di dalam GroupHeaderSection1 -> pilih Select Expert...atur Formula nya seperti ini : {Invoices.Country} = {?Country}

15. Tambahkan control DropDownList ke page. Atur control tersebut agar dapat menampilkan Distinct Country dari tabel Customer.

<asp:DropDownList ID="ddlCountry" runat="server" 
    DataSourceID="sdsCountry" AutoPostBack="True"
    DataTextField="Country" DataValueField="Country" 
    AppendDataBoundItems="true">
    <asp:ListItem Text="All Country" />
</asp:DropDownList> &nbsp;
    
<asp:Label ID="lblInfo" runat="server" ForeColor="Green" 
Font-Bold="True" Visible="False" Font-Italic="True" />
    
<asp:SqlDataSource ID="sdsCountry" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
    SelectCommand="SELECT DISTINCT [Country] FROM [Customers]" />

16. Ada satu property yang berguna pada DropDownList diatas yaitu AppendDataBoundItems yang di set ke True. Properti tersebut digunakan jika kita ingin menyisipkan value kedalam control tersebut dimana control tersebut sebenarnya menggunakan data yang diambil dari database. Contohnya diatas saya menyisipkan value "All Country"

17. Lalu bagaimana caranya Record Selection Formula yang telah dibuat pada langkah 12-14 dapat di enable atau disable secara runtime? Langkah ini perlu dilakukan jika user memilih "All Country", maka Record Selection Formula tersebut harus di disable / di clear.

Protected Sub ClearSelectionFormula(ByVal Clear As Boolean)
    Dim report = CReportSource1.ReportDocument

    If Clear Then
        If report.DataDefinition.RecordSelectionFormula.ToLower = _
        "{invoices.country} = {?country}" Then
            report.DataDefinition.RecordSelectionFormula = _
            String.Empty
        End If
    Else
        report.DataDefinition.RecordSelectionFormula = _
        "{Invoices.Country} = {?Country}"
    End If
End Sub

Code VB diatas (C# codenya anda translate sendiri aja ya, males bikin dua versi :D ) memperlihatkan bagaimana caranya mendisable / enable Record Selection Formula,  yang penting anda perhatikan Formula nya yang harus sesuai dengan yang ada di Crystal Report.

18. Berikut code event Handler DropDownList :

Protected Sub ddlCountry_SelectedIndexChanged() _
Handles ddlCountry.SelectedIndexChanged
    lblInfo.Visible = False
    Dim clear = False
    If ddlCountry.Text.ToLower = "all country" Then clear = True
    ClearSelectionFormula(clear)
    CRPartsViewer1.DataBind()
End Sub

19. Bagaimana caranya saya mengambil informasi dari data yang di Drilldown? misalnya saya ingin menampilkan info mengenai link Country yang di klik dan link CustomerName yang di klik dan saya tampilkan di Label. Anda dapat menggunakan event FieldDrillDown dari CRPV nya. Berikut cuplikan codenya :

Protected Sub CRPartsViewer1_FieldDrillDown(ByVal source As Object, _
    ByVal e As CrystalDecisions.Web.DrillDownEventArgs) _
    Handles CRPartsViewer1.FieldDrillDown

    Dim custID = ""
    Dim dataContext = e.DataContext
    'DataContext isinya spt dibawah ini contohnya :
    'DataContext = /Country[Argentina]
    'DataContext = /Country[Argentina]/CustomerID[ALFKI]

    Dim objName = e.ObjectName
    Select Case objName.ToLower
        Case "groupnamecountry1"
            Dim firstIdx = dataContext.IndexOf("[")
            Dim lastIdx = dataContext.LastIndexOf("]")
            Dim intDiff = lastIdx - firstIdx

            ViewState("country") = dataContext.Substring( _
            firstIdx + 1, intDiff - 1)

        Case "groupnamecustomerid2"
            Dim lastIdx1 = dataContext.LastIndexOf("[")
            Dim lastIdx2 = dataContext.LastIndexOf("]")
            Dim intDiff = lastIdx2 - lastIdx1

            custID = dataContext.Substring( _
            lastIdx1 + 1, intDiff - 1)
    End Select

    Dim country = ViewState("country").ToString

    If custID <> "" Then
        lblInfo.Text = "==> " & custID & " / " & country
    Else
        lblInfo.Text = "==> " & country
    End If
    lblInfo.Visible = True
End Sub

20. Yang harus kita perhatikan yaitu penggunaan DataContext dan ObjectName. DataContext digunakan untuk mengambil info data dari link yang di klik, sedangkan ObjectName digunakan untuk mengambil info GroupName dimana link tersebut berada, selain itu hanya tricky code untuk menampilkan informasi Country beserta CustomerName pada label info yang saya tempatkan di sebelah DropDownList country.

21. Berikut web preview bila user memilih country tertentu, All Country, beserta detail info invoice dari CustomerName yang bersangkutan.

Ok...that's it...have a nice CrystalReportPartsViewer control day :D


[Comments]
erick Jun/25/2008 05:22:49 :
thanks mas artikelnya banyak membantu, soalnya jarang2 artikel tentang CR.NET hehehe
Rully Jun/25/2008 07:37:19 :
Hello mas Erick :) thx...saya selalu sharing everything disini :D
ABC100 Jan/29/2009 09:24:22 :
Please give sampe code & instructions in English
Rully Jan/29/2009 03:45:02 :
@ABC100 : The Code Sample is yet available, you can see the download link above (under the article's title).
PS Feb/23/2009 12:24:13 :
How to export the generated report to excel using crystalReportPartsViewer control.
wira Jun/30/2010 01:28:27 :

mas, maw tanya neh..

apakah ada cara untuk menaikkan drill downnya hanya satu level saja??

misalnya begini :

saya klik, negara->provinsi->kota....

ketika saya sudah melihat informasi kota, saya ingin kembali ke posisi memilih provinsi..

apakah crystal report parts viewer bisa seperti itu??

kalau bisa, bagaimana caranya??

trima kasih...

Rully Jun/30/2010 08:10:45 :

wira > Kebetulan saya belum pernah coba (explore) untuk kebutuhan tersebut.

wira Jul/01/2010 03:03:03 :

ow begitu..

mas, ini saya ada masalah lagi..

ceritanya begini, ketika saya sudah membuat report drill down seperti contoh diatas, saya ingin menampilkan dalam halaman saya. Tetapi ketika saya akan menampilkan muncul error seperti ini :

Sys.WebForms.PageRequestManagerParseErrorException: the message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to response.write(), response.filters, HTTPModules, or server trace is enabled, Details: Error parsing near '</tr>

</table>

|<html>

<head>

'.

error tersebut muncul dalam alert seperti javascript DAN HANYA MUNCUL SEKALI... ketika sudah muncul dan saya ok, lalu saya jalankan lagi, tidak ada masalah...nah pertanyaan saya:

1. Apa penyebab error tersebut?? apa memang error tersebut harus ada dulu baru semua berjalan normal?

2. apakah tidak ada suatu metode try catch sehingga dapat memby pass error tersebut??

Mohon bantuannya, saya sangat berterimakasih atas jawaban dari anda...terima kasih

wira Jul/01/2010 04:16:03 :

Pertanyaan di atas sudah bisa terjawab mas..ternyata harus didaftarkan pada update panel..

tetapi saya masih mempunyai masalah, haha..mohon dibantu ya mas ruly...

gini masalah saya :

apabila kita ingin menampilkan negara - provinsi - kota tentu sudah dijelaskan dalam tutorial..

saya modifikasi sedikit, saya juga bisa menampilkan negara - provinsi, banyak kota - kota

nah pertanyaan saya, apa bisa ditampilkan seperti ini,

negara, banyak provinsi - provinsi,banyak kota - kota

trima kasih..

wira Jul/01/2010 04:16:11 :

Pertanyaan di atas sudah bisa terjawab mas..ternyata harus didaftarkan pada update panel..

tetapi saya masih mempunyai masalah, haha..mohon dibantu ya mas ruly...

gini masalah saya :

apabila kita ingin menampilkan negara - provinsi - kota tentu sudah dijelaskan dalam tutorial..

saya modifikasi sedikit, saya juga bisa menampilkan negara - provinsi, banyak kota - kota

nah pertanyaan saya, apa bisa ditampilkan seperti ini,

negara, banyak provinsi - provinsi,banyak kota - kota

trima kasih..

Rully Jul/09/2010 10:45:48 :

wira > Untuk programming sebenarnya semua kemungkinan itu bisa saja dipenuhi, namun untuk kasus tersebut saya belum mencobanya, kebetulan lagi hectic :)

wira Jul/13/2010 03:55:46 :

tolong dijawab dong mas ruly...butuh bantuan ASAP

Rully Jul/14/2010 09:10:29 :

wira > maaf mas, saya belum sempat explore...lagi hectic sama jadwal training.

anie Aug/20/2010 10:59:09 :

bagaimana cara mengkoneksi crystal report dengan database SQL SERVER 2005?

THANKS


[Write your comment]
Name (required)
URL (optional)
Example : http://www.yulianmf.com  
Comment

HL90
Input code above below (Case Sensitif) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 2231 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2192 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 1523 times  
DataGridView Grouping : Downloaded 1243 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1232 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise - IT Training 
Native Enterprise Facebook Group 
My Facebook 
My LinkedIn 
Syndication (RSS 2.0) 
Powered By 
Native Enterprise News