Menggunakan kontrol ReportViewer di ASP.NET 2.0
Penulis:Eve Cole
Waktu Pembaruan:2009-07-01 16:43:40
Terjemahan artikel ini: webabcd
memperkenalkan
Persyaratan umum untuk aplikasi berbasis data apa pun adalah pelaporan. Namun, fitur yang sangat penting ini tidak disediakan kepada kami di ASP.NET 1.x. Untungnya, kontrol ReportViewer yang disertakan dengan .NET 2.0 dapat memenuhi beberapa kebutuhan dasar Anda akan laporan. Saya akan menunjukkan cara menggunakan kontrol ini di artikel ini. Kontrol ReportViewer dapat digunakan di program web dan program windows. Di sini, saya hanya akan memperkenalkan cara menggunakannya dalam program web.
Contoh laporan
Kami berasumsi bahwa kami ingin membuat daftar informasi pelanggan seperti yang ditunjukkan di bawah ini:
Laporan di atas adalah daftar informasi pelanggan yang sangat sederhana yang dikelompokkan berdasarkan negara. Data untuk laporan diperoleh dari tabel Pelanggan di database Northwind. Secara default, ini menampilkan semua informasi pelanggan. Namun, Anda juga dapat menampilkan informasi tentang pelanggan dari negara yang Anda tentukan.
Laporan ini dirancang menggunakan kontrol ReportViewer, yang dapat memperoleh data dari DataSet yang diketik dengan kuat atau kumpulan objek kustom. Dalam pengembangan program sebenarnya, kita sering menggunakan arsitektur tiga tingkat, dan data yang diperoleh sering kali berupa DataSet atau kumpulan umum yang diperoleh dari lapisan bisnis. Di sini, saya berencana menggunakan koleksi umum sebagai sumber data, bukan DataSet yang diketik dengan kuat.
Buat perpustakaan kelas
Pertama, buka Visual Studio dan buat proyek perpustakaan kelas bernama ReportViewerLib. Tambahkan kelas bernama Pelanggan seperti yang ditunjukkan di bawah ini:
menggunakan Sistem; menggunakan Sistem.Data; menggunakan Sistem.Konfigurasi; menggunakan Sistem.Data.SqlClient; menggunakan System.Collections.Generik; ruang nama ReportViewerLib { Pelanggan kelas publik { string publik strCustomerID; string publik strNamaPerusahaan; string publik strContactName; string publik strCountry;
string publik ID Pelanggan { mendapatkan { kembalikan strCustomerID; } mengatur { strCustomerID = nilai; } }
string publik Nama Perusahaan { mendapatkan { kembalikan strNamaPerusahaan; } mengatur { strNamaPerusahaan= nilai; } }
string publik Nama Kontak { mendapatkan { kembalikan strContactName; } mengatur { strContactName= nilai; } }
string publik Negara { mendapatkan { kembalikan strCountry; } mengatur { strNegara= nilai; } }
Daftar statis publik |
GetCustomersForCountry(string negara) { SqlConnection cnn=SqlConnection baru( ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd=baru SqlCommand(); cmd.Koneksi=cnn; cmd.CommandText="pilih ID Pelanggan, Nama Perusahaan, Nama Kontak, Negara dari pelanggan di mana negara=@negara"; SqlParameter p=SqlParameter baru ("@negara",negara); cmd.Parameter.Tambahkan(p); cnn.Buka(); Pembaca SqlDataReader = cmd.ExecuteReader(); Daftar |
(); sementara (pembaca.Baca()) { Pelanggan c = Pelanggan baru(); c.ID Pelanggan = pembaca.GetString(0); c.NamaPerusahaan = pembaca.GetString(1); c.ContactName = pembaca.GetString(2); c.Negara = pembaca.GetString(3); daftar.Tambahkan(c); } cnn.Tutup(); daftar pengembalian; }
Daftar statis publik |
DapatkanSemua Pelanggan() { SqlConnection cnn = SqlConnection baru( ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = baru SqlCommand(); cmd.Koneksi = cnn; cmd.CommandText = "pilih IDPelanggan,NamaPerusahaan,NamaKontak,Negara dari pelanggan"; cnn.Buka(); Pembaca SqlDataReader = cmd.ExecuteReader(); Daftar |
(); sementara (pembaca.Baca()) { Pelanggan c = Pelanggan baru(); c.ID Pelanggan = pembaca.GetString(0); c.NamaPerusahaan = pembaca.GetString(1); c.ContactName = pembaca.GetString(2); c.Negara = pembaca.GetString(3); daftar.Tambahkan(c); } cnn.Tutup(); daftar pengembalian; }
} }
|
Kelas Pelanggan mendefinisikan empat properti publik, yaitu CustomerID, CompanyName, ContactName dan Country. Setelah itu, ada dua metode statis yang terdapat dalam kelas ini – GetCustomersForContry() dan GetAllCustomers(). Kedua metode ini relatif sederhana. Metode yang satu mengembalikan semua informasi pelanggan milik negara tertentu, dan metode lainnya mengembalikan semua informasi pelanggan. Pertama buka koneksi ke database Northwind, lalu jalankan kueri SELECT melalui objek SqlCommand. Setelah itu, gunakan objek SqlDataReader untuk mendapatkan datanya. Lintasi objek SqlDataReader ini, buat objek Pelanggan setiap kali berada di dalamnya, lalu atur berbagai propertinya, dan terakhir tambahkan ke kumpulan umum objek Pelanggan. Di akhir kelas, koleksi umum objek Pelanggan dikembalikan ke pemanggil.
Buat sumber data
Saat mendesain laporan, Anda perlu menentukan sumber data untuk laporan tersebut di proyek Anda. Untuk menambahkan sumber data pada proyek Anda, Anda dapat melakukannya dengan memilih menu Data -> Tambahkan Sumber Data Baru. Maka akan muncul kotak dialog seperti dibawah ini:
Sumber data Anda bisa berupa database, layanan web, atau objek. Dalam hal ini kami memilih Objek. Kemudian klik tombol "Berikutnya", dan antarmuka bagi kita untuk memilih sumber data akan muncul. Kami memilih kelas Pelanggan (seperti yang ditunjukkan pada gambar di bawah).
Klik tombol "Selesai" untuk menyelesaikan wizard konfigurasi sumber data. Dengan cara ini, Anda telah menambahkan sumber data baru ke perpustakaan kelas Anda. Jika ingin melihat sumber datanya, bisa pilih menu “Data” -> Tampilkan sumber data, maka akan muncul tampilan antarmuka seperti di bawah ini:
Laporan desain
Selanjutnya tambahkan laporan. Klik kanan pada proyek dan pilih "Tambahkan Item Baru". Pilih "Laporkan" di kotak dialog dan klik tombol "Tambah" (seperti yang ditunjukkan pada gambar di bawah). Dengan cara ini, kami telah menambahkan file bernama "Report1.rdlc". File .rdlc adalah file laporan yang menyimpan tata letak laporan dan pemetaan data.
Setelah Anda membuka file Report1.rdlc, serangkaian kontrol terkait laporan akan ditampilkan di kotak alat Visual Studio (seperti yang ditunjukkan di bawah).
Di antara kontrol-kontrol ini, kontrol "Kotak Teks" dan kontrol "Tabel" sangat umum digunakan. Kontrol "Kotak Teks" digunakan untuk menampilkan sepotong teks statis atau ekspresi. Kontrol "Tabel" digunakan untuk menampilkan data tabular, dan hasil yang dihasilkannya akan ditampilkan di "isi" laporan Anda.
Laporan yang dirancang ditunjukkan di bawah ini:
Di kepala bagian "Header" laporan, terdapat kotak teks yang properti Nilainya adalah "Daftar Pelanggan". Ada kotak teks lain di bawah kotak teks ini, dan nilai properti Nilainya adalah "=Parameters!SubTitle.Value". Artinya nilai kotak teks berasal dari parameter bernama SubJudul. Bagaimana cara kita mendefinisikan parameter? Hal ini memerlukan penambahan parameter di properti ReportParameters pada laporan. Kotak dialog parameter laporan yang terbuka ditunjukkan pada gambar di bawah ini:
Harap diperhatikan: Pengaturan parameter dilakukan dalam kode .NET kami.
Jika Anda ingin menampilkan tanggal pada laporan, cukup setel properti Nilai pada kotak teks yang relevan ke "=FormatDateTime(ToDay(),DateFormat.ShortDate)". Salah satu kelebihan laporan adalah laporan memiliki banyak fungsi bawaan, seperti ToDay() dan FormatDateTime. Dalam contoh ini, kami menggunakan fungsi FormatDateTime() untuk menampilkan tanggal saat ini (ToDay()) dalam format ShortDate.
Sekarang, seret kontrol "Tabel" dari kotak alat ke laporan Anda. Secara default, kontrol "Tabel" memiliki 3 baris dan 3 kolom. 3 baris tersebut adalah: header tabel, informasi detail, dan footer tabel. Tentu saja, Anda juga bisa menambahkan baris dan kolom ke kontrol Tabel. Tarik properti CustomerID, CompanyName, ContactName, dan Country dari jendela sumber data ke baris detail kontrol Tabel Anda. Dengan cara ini, sistem akan secara otomatis menambahkan kotak teks dan mengatur propertinya menjadi =Fields!CustomerID.Value, =Fields!CompanyName.Value dan seterusnya. Pada titik ini, tajuk kolom juga akan ditambahkan secara otomatis. Tentunya Anda juga dapat melakukan modifikasi yang Anda perlukan sesuai dengan kebutuhan Anda.
Selanjutnya, kami ingin mengelompokkan catatan berdasarkan negara tempat pelanggan berada. Klik kanan pada batas baris detail dan pilih Sisipkan Grup (seperti yang ditunjukkan pada gambar di bawah).
Maka akan muncul kotak dialog seperti dibawah ini:
Di tab "Sort", pilih "=Fields!Country.Value" sebagai ekspresi dan "Ascending" sebagai arah pengurutan.
Itu adalah hal-hal yang sangat sederhana. Dengan cara ini, kami telah menyelesaikan desain laporan.
Tampilkan laporan
Buat situs web baru bernama "ReportViewerDemo". Tambahkan referensi ke rakitan ReportViewerLib sehingga rakitan tersebut akan disalin ke direktori BIN situs web Anda. Setelah itu, tambahkan file Report1.rdlc ke situs web Anda. Seret kontrol ReportViewer di tab "Data" pada kotak alat ke halaman Default.aspx Anda, buka panel tag pintar pada kontrol ReportViewer, dan pilih Report1.rdlc di kotak drop-down "Pilih Laporan", seperti yang ditunjukkan pada gambar di bawah ini:
Setelah memilih file laporan, sistem akan secara otomatis menambahkan kontrol sumber data objek dengan properti TypeName sebagai Pelanggan. Anda dapat memverifikasi ini di panduan konfigurasi kontrol sumber data objek.
Selanjutnya, seret kontrol DropDownList ke header halaman dan tetapkan empat opsi untuk kontrol tersebut – Semua, AS, Inggris, dan Brasil. Atur juga properti AutoPostBack ke True. Kemudian, buka panduan konfigurasi kontrol sumber data dan atur operasi "PILIH" ke metode SelectCustomersForCountry().
Tetapkan parameter negara metode SelectCustomersForCountry() ke SelectedValue dari DropDownList1.
Secara default, semua informasi pelanggan ditampilkan dalam laporan. Saat Anda memilih negara di DropDownList, informasi pelanggan dari negara yang Anda pilih akan ditampilkan di laporan. Untuk menyelesaikan fungsi tersebut, kita hanya perlu menangani event SelectedIndexChanged dari DropDownList.
kekosongan yang dilindungi DropDownList1_SelectedIndexChanged (pengirim objek, EventArgs e) { if (DropDownList1.SelectedValue == "Semua") { ObjectDataSource1.SelectMethod = "DapatkanSemua Pelanggan"; ObjectDataSource1.SelectParameters.Clear(); Parameter ReportParameter = Parameter Laporan baru ("SubJudul", "Daftar semua pelanggan"); ReportParameter[] p ={ param }; ReportViewer1.LocalReport.SetParameters(p); } kalau tidak { ObjectDataSource1.SelectMethod = "GetCustomersForCountry"; ObjectDataSource1.SelectParameters[0].DefaultValue = DropDownList1.Nilai yang Dipilih;
Parameter ReportParameter = Parameter Laporan baru ("SubJudul", "Daftar pelanggan suatu negara"); ReportParameter[] p ={ param }; ReportViewer1.LocalReport.SetParameters(p); } } |
Kode ini pertama-tama memeriksa properti SelectedValue dari kontrol DropDownList. Jika "Semua", atur properti SelectMethod dari kontrol sumber data ke GetAllCustomers. Selain itu, kita juga perlu menghapus koleksi SelectParameters karena metode GetAllCustomers() tidak memerlukan parameter apa pun. Selanjutnya, kita membuat instance kelas ReportParameter dan menetapkan nama dan nilai parameter laporan di konstruktornya. Ingat kembali parameter yang kami tentukan saat mendesain laporan. Kemudian buat array ReportParameter. Panggil metode SetParameters() dengan array ini sebagai parameternya. Blok kode "else" juga sangat sederhana, yaitu metode yang digunakan menjadi GetCustomersForCountry().
Itu adalah hal-hal yang sangat sederhana. Laporan telah selesai. Anda dapat menjalankan halaman Default.aspx untuk melihat efeknya. Perhatikan bahwa kontrol ReportViewer memiliki fitur ekspor bawaan, yang memungkinkan Anda mengekspor laporan ke format Excel atau PDF. Kontrol ReportViewer juga memiliki banyak properti, Anda dapat menjelajahinya sendiri.
Meringkaskan
Kontrol ReportViewer dari ASP.NET menyediakan banyak fungsi dasar laporan. Dalam artikel ini, kami menggunakan kontrol sumber data objek untuk mengembangkan laporan. Kami membuat perpustakaan kelas dan sumber data. Terakhir, gunakan kontrol ReportViewer untuk menampilkan laporan.