Pendahuluan:
Artikel ini adalah link yang diberikan oleh Kanyuanzi kemarin lusa, saya lupa pemiliknya siapa . mengatakan itu karena Untuk beberapa alasan itu tidak diterjemahkan. Saya kemudian melihatnya dan kebetulan berguna bagi saya, karena seseorang di perusahaan sedang mengerjakan hal-hal RS, dan departemen optoelektronik di lantai bawah juga sering memiliki kebutuhan BS. Saya sudah mengetahui hal ini sejak lama tetapi tidak pernah memilikinya Saatnya mempelajarinya, kebetulan saya menemukan artikel ini. Jadi saya mempelajarinya dengan cermat sepanjang sore, menerjemahkannya terlebih dahulu, lalu menambahkan beberapa wawasan.
Selama proses penerjemahan, saya mencoba melokalkannya sebanyak mungkin, tetapi tetap mempertahankan arti dari penulis aslinya. Jika ada ketidakakuratan dalam terjemahan, mohon kritik dan koreksi saya.
Ada banyak sekali mode layanan (Server Mode) dari SqlServer RS di Internet, dan saya menghabiskan banyak waktu mempelajari mode lokal (Local Mode), terutama ketika ada panggilan parameter.
Alasan mengapa mode lokal digunakan daripada mode server adalah karena setiap kali klien dalam mode layanan meminta laporan, server harus mengatur data ke dalam laporan dan kemudian mengirimkannya ke klien. Meskipun ini lebih aman, laporan besar akan melakukannya tidak pernah diproses. Transmisi server-ke-browser mengurangi kinerjanya.
Jadi artikel ini menjelaskan cara mengatur laporan dan membacanya menggunakan kontrol ReportViewer ASP.NET2.0 Di sini kita memilih mode lokal dan menggunakan prosedur tersimpan dengan parameter. Yang saya gunakan adalah ASP.NET2.0, VisualStudio2005, dan SQLServer2005 plus Application Block. Jika Anda tidak memiliki alat Blok Aplikasi Microsoft, silakan ganti kode yang memanggil prosedur tersimpan melalui SQL Helper pada contoh dengan Perintah SQL.
Di sini kita memilih database Northwind. Contoh kita menunjukkan pengguna untuk memilih nama produk dari daftar drop-down dan kemudian memfilter informasi dalam laporan.
Langkah pertama adalah membuat prosedur tersimpanALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
dengan parameter
AS
SELECT Kategori.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Kategori INNER JOIN Produk ON
Kategori.CategoryID = Produk . CategoryID
WHERE CategoryName=@CategoryName
RETURN
Langkah kedua adalah menggunakan perancang DataSet untuk membuat DataTable di bawah
antarmuka manajer solusi, klik kanan file App_Code dan pilih "Tambahkan Item Baru". Pilih "DataSet" di kotak dialog pop-up, beri nama, seperti DataSetProducts.xsd, lalu klik tombol "Tambah". Pada saat ini, alat konfigurasi TableAdapter akan muncul secara otomatis. Jika tidak muncul atau ditutup secara tidak sengaja, klik kanan di mana saja di perancang DataSet, pilih Tambah, lalu pilih TableAdapter, dan alat tersebut akan muncul lagi. Buat DataTable sesuai dengan wizard, pilih "User eksisting prosedur tersimpan" sebagai perintah ketik di antarmuka yang muncul, lalu tentukan "ShowProductByCategory" sebagai perintah Pilih.
Prosedur tersimpan yang dibuat pada langkah pertama menjadi DataTable pada langkah kedua, dan data laporan disediakan melalui DataTable ini.
Gambar 1: DataSetProducts.xsd yang berisi DataTable adalah sumber data laporan
Langkah 3: Buat file laporan.
Klik kanan di manajer solusi dan pilih Tambahkan Item Baru, lalu pilih Templat laporan. Dalam contoh ini, nama default Report.rdlc digunakan secara langsung. RDL berarti bahasa definisi laporan, dan c berarti klien. Dengan kata lain, rdl adalah laporan server, dan rdlc adalah laporan lokal.
Tarik Tabel dari toolbox ke formulir desain laporan. "Tabel" ini memiliki tiga bagian, header, konten, dan ekor. Tabel adalah area yang menampilkan data, dan area menampilkan elemen data di bawah Kumpulan Data yang terikat padanya. Meskipun sebuah laporan dapat memiliki banyak area, setiap area hanya dapat menampilkan konten dari satu Kumpulan Data. Berdasarkan hal ini, kita dapat menggunakan prosedur tersimpan untuk menggabungkan data dari beberapa tabel ke dalam Kumpulan Data untuk mengisi laporan.
Gambar 2: Kontrol pada toolbar yang didedikasikan untuk template laporan
Buka jendela "Sumber Data Situs Web" dan temukan kumpulan data "DataSetProducts", yang dibuat pada langkah kedua. Perluas hingga Anda melihat DataTable bernama "ShowProductByCategory". Tabel ini disebut dengan nama ini karena sebelumnya kita memilih "Gunakan prosedur tersimpan yang ada" di wizard konfigurasi TableAdapter, dan nama prosedur tersimpan kita adalah ShowProductByCategory.
Di jendela sumber data situs web, seret ProductName, UnitPrice, dan UnitsInStock ke baris yang memperlihatkan detail di perancang laporan, yaitu kolom pertama, kedua, dan ketiga di baris tengah. Dan Anda dapat mengklik kanan bidang mana pun di baris detail tampilan, lalu temukan tab Format di bilah properti untuk menentukan format tampilannya untuk Harga Satuan dan Persediaan Unit.
Gambar 3. Formulir sumber data situs web memperlihatkan Kumpulan Data yang ditentukan dalam program Anda dan kolom yang dimilikinya.
Langkah 4: Tambahkan kontrol ReportViewer ke halaman ASP.NET2.0
. Pertama, seret kontrol DropDownList ke dalam formulir, lalu ikat bidang Nama Kategori di Kategori dengan memilih opsi sumber data. Dalam skenario lain, pengguna dapat memasukkan parameter melalui metode lain seperti kotak teks dan kemudian meneruskannya ke prosedur tersimpan.
Lalu, seret kontrol Tampilan Laporan ke formulir dan atur properti Terlihat ke False. Hal lain yang perlu diperhatikan adalah Penampil Laporan ASP.NET 2.0 menyediakan metode ekspor Excel dan PDF. Namun, selama proses sebenarnya, saya menemukan bahwa akan selalu ada sedikit perbedaan antara laporan yang dicetak dan cara Anda mendesainnya.
Gambar 4, atur halaman ini ke halaman StartUp
Selanjutnya, panggil tag cerdas Penampil Laporan dan pilih file Report.rdlc yang baru saja Anda buat.
Gambar 5: Gabungkan file definisi laporan ke dalam kontrol Penampil Laporan.
Langkah 5: Tulis kode untuk memungkinkan pengguna memilih nama yang berbeda di kotak drop-down dan kemudian menampilkan data yang berbeda dalam laporan.
Jangan lupa untuk menambahkan namespace Microsoft.Reporting.WebForms ke belakang kode (atau file kode) Anda. mengajukan.
1<PRE lang=cs id=pre1 style="MARGIN-TOP: 0px">menggunakan Sistem;
2menggunakan Sistem.Data;
3menggunakan Sistem.Data.SqlClient;
4menggunakan Sistem.Konfigurasi;
5menggunakan System.Collections;
6menggunakan Sistem.Web;
7menggunakan Sistem.Web.Keamanan;
8menggunakan Sistem.Web.UI;
9menggunakan System.Web.UI.WebControls;
10menggunakan System.Web.UI.WebControls.WebParts;
11menggunakan System.Web.UI.HtmlControls;
12menggunakan Microsoft.ApplicationBlocks.Data;
13menggunakan Microsoft.Reporting.WebForms;
14
15kelas parsial publik ReportViewerLocalMode : System.Web.UI.Page
16{
17 string publik thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*Saya menggunakan pernyataan berikut untuk menunjukkan apakah Anda memiliki banyak
22 parameter masukan, nyatakan parameter dengan nomor
23 parameter dalam aplikasi Anda, mis. SqlParameter Baru[4];
dua puluh empat
25 publik SqlParameter[] SearchValue = SqlParameter[1] baru;
26
27 void terlindung RunReportButton_Click(pengirim objek, EventArgs e)
28 {
29 //ReportViewer1.Visible disetel ke false dalam mode desain
30 ReportViewer1.Visible = benar;
31 SqlConnection thisConnection = SqlConnection baru(thisConnectionString);
32 Sistem.Data.DataSet thisDataSet = Sistem.Data.DataSet() baru;
33 SearchValue[0] = SqlParameter baru("@CategoryName",
34 DropDownList1.Nilai yang Dipilih);
35
36 /**//* Memasukkan hasil prosedur tersimpan ke dalam dataset */
37 thisDataSet = SqlHelper.ExecuteDataset(Koneksi ini,
38 "TampilkanProdukBerdasarkan Kategori", Nilai Pencarian);
39
40 /**//*atau thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "TampilkanProdukBerdasarkan Kategori", dropdownlist1.nilai yang dipilih);
42 jika Anda hanya memiliki 1 parameter input */
43
44 /**//* Kaitkan thisDataSet (sekarang dimuat dengan file yang disimpan
45 hasil prosedur) dengan sumber data ReportViewer */
46 Sumber data ReportDataSource = baru
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tabel[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(sumber data);
52 jika (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "Maaf, tidak ada produk dalam kategori ini!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59}</PRA>
Langkah 6: Untuk menjalankan laporan,
tekan tombol F5 dan klik tombol "Jalankan Laporan" untuk menjalankan laporan.
Gambar 6, laporan berjalan
Terakhir, pastikan ReportViewer dimasukkan ke situs web dan konfigurasikan file web.config.
<httpHandlers>
<tambahkan path="Reserved.ReportViewerWebControl.axd" verb="*"
type="Microsoft.Reporting.WebForms.HttpHandler,
Microsoft.ReportViewer.WebForms,
Versi=8.0.0.0, Budaya=netral,
PublicKeyToken=?? ??????????"
validasi="false" />
</httpHandlers>
Saat menyebarkan proyek situs web dengan kontrol ReportViewer ke server lain, Anda perlu menyalin file C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe Kemudian jalankan di server sasaran.
Pengalaman penerjemahan: Tampaknya ini adalah terjemahan paling sederhana yang pernah saya lakukan, tetapi mungkin karena penulis mengatakan terjemahannya relatif ringkas dan jelas.
Pengalaman pembelajaran: Penulis menguraikan dua metode pelaporan yang dapat diterima oleh ReportViewer dan membuat analisis sederhana. Namun, dalam proyek sebenarnya, lebih banyak orang mungkin menggunakan Mode Server. Mode Lokal masih dapat menghasilkan beberapa laporan yang tidak terlalu besar atau terlalu rumit.
Saya tahu ada orang di perusahaan yang spesialis RS, katanya butuh waktu seminggu untuk mengerjakannya, tergantung kualitas tulisannya. Anda mungkin perlu mempertimbangkan untuk mengubah algoritme. Kedengarannya menakutkan haha, tapi kalau bisa digunakan untuk kebutuhan pelaporan departemen fotovoltaik di lantai bawah, saya ingin lebih nyaman dari metode GridView to Excel sebelumnya.
Jika hal ini bisa diteliti dan dipahami, saya berencana membuat video pengantar penjelasan khusus untuk membantu lebih banyak orang memahami kontrol ini.