Tambahkan bidang total ke DataGrid di ASP.NET
Penulis:Eve Cole
Waktu Pembaruan:2009-06-30 15:40:15
Salah satu pertanyaan yang paling sering diajukan di forum adalah: "Bagaimana cara menampilkan total kolom di DataGrid?". Saya pribadi telah memberikan contoh kode untuk pertanyaan ini berkali-kali, jadi saya ingin memberikan panduan seperti itu dalam judul DotNetJunkies. Dalam panduan ini Anda akan mempelajari cara menghitung nilai kolom di DataGrid secara terprogram dan menampilkan nilai total di footer DataGrid. Contoh yang dapat diunduh dalam panduan ini mencakup kode C# dan Visual Basic.NET.
Hasil akhir dari panduan ini akan terlihat seperti ini:
Seperti yang terlihat dari gambar di atas:
DataGrid pada gambar layar yang digunakan di atas adalah DataGrid yang sangat umum. Ada banyak properti yang mengontrol tampilan DataGrid, yang menggunakan dua BoundColumns untuk memanipulasi data, tapi itu bukan yang terpenting. Hal yang sangat penting untuk melakukan ini dengan baik adalah dengan menggunakan acara DataGrid.OnItemDataBound. Peristiwa ini akan dipicu setiap kali rekaman terikat ke DataGrid. Anda dapat membuat pengendali peristiwa untuk peristiwa ini guna memanipulasi catatan data. Dalam hal ini, Anda akan mendapatkan nilai total kolom Harga saat runtime.
Footer mengacu pada baris terakhir rentang data. Jika baris ini memenuhi syarat, Anda bisa mendapatkan statistik runtime kolom Harga selama pemrosesan peristiwa.
Implementasi :
Pertama mari kita cari cara untuk memanipulasi keluaran Formulir Web. Dalam tutorial ini, Anda akan menggunakan formulir Web (calcTotals.aspx) dan file kode kelas (calcTotals.aspx.cs). Maksud dari panduan ini adalah kode kelas akan dikompilasi menggunakan kompiler Just-In-Time. Berikut ini kode untuk calcTotals.aspx:
<%@ Halaman Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %>
|
AutoGenerateColumns="Salah" CellPadding="4" CellSpacing="0" BorderStyle="Padat" BorderWidth="1" Gridlines="Tidak Ada" BorderColor="Hitam" ItemStyle-Font-Name="Verdana" ItemStyle-Font-Ukuran = "9pt" HeaderStyle-Font-Name="Verdana" HeaderStyle-Font-Ukuran = "10pt" HeaderStyle-Font-Bold="Benar" HeaderStyle-ForeColor="Putih" HeaderStyle-BackColor="Biru" FooterStyle-Font-Name="Verdana" FooterStyle-Font-Ukuran = "10pt" FooterStyle-Font-Bold="Benar" FooterStyle-ForeColor="Putih" FooterStyle-BackColor="Biru" OnItemDataBound="MyDataGrid_ItemDataBound" ShowFooter="Benar">
|
ItemStyle-HorizontalAlign="Kanan" HeaderStyle-HorizontalAlign="Tengah" />
|
Di Formulir Web Anda menggunakan @Page untuk mendeklarasikan secara langsung kode kelas yang diwarisi halaman tersebut. Atribut SRC menunjukkan bahwa kode kelas akan dikompilasi menggunakan kompiler JIT. Sebagian besar deklarasi gaya kode di Formulir Web digunakan untuk membuat DataGrid terlihat lebih baik.
Salah satu properti terakhir yang ditentukan adalah properti OnItemDataBound. Peristiwa ini akan dipicu ketika peristiwa OnItemDataBound terjadi.
DataGrid (MyGrid) di Formulir Web berisi dua Kolom Terikat, satu adalah Judul dan yang lainnya adalah Harga. Kolom judul dan harga tabel Judul di database Pubs (SQL Server) akan ditampilkan di sini.
Abaikan definisi kode
Kode kelas akan digunakan di mana saja. Dalam kode kelas, Anda dapat mengoperasikan dua peristiwa: peristiwa Page_Load dan peristiwa MyGrid_OnItemDataBound. Ada juga metode pribadi CalcTotal, yang dapat digunakan untuk sekadar melakukan operasi matematika pada statistik runtime.
Awal dari blok struktural dasar kode kelas:
menggunakan Sistem; menggunakan Sistem.Web; menggunakan Sistem.Web.UI; menggunakan Sistem.Web.UI.WebControls; menggunakan Sistem.Web.UI.HtmlControls; menggunakan Sistem.Data; menggunakan Sistem.Data.SqlClient;
namespace aplikasi saya { calcTotals kelas publik : Halaman { DataGrid MyGrid yang dilindungi; total lari ganda pribadi = 0; } } |
Dalam struktur dasar kode kelas, Anda harus menggunakan pernyataan yang relevan untuk mengimpor namespace (namespace). Dalam deklarasi kelas, Anda mendeklarasikan dua variabel, satu adalah variabel yang memetakan kontrol DataGrid (MyGrid) formulir Web dalam kode kelas; yang lainnya adalah nilai presisi ganda yang digunakan untuk mengoperasikan statistik runtime di kolom Harga DataGrid .
Halaman_Muat acara
Dalam acara Page_Load, yang harus Anda lakukan adalah menyambung ke SQL Server dan menjalankan SqlCommand sederhana. Anda telah memperoleh semua data judul dan harga dengan nilai Harga > 0. Anda menggunakan metode SqlCommand.ExecuteReader untuk mengembalikan SqlDataReader dan mengikatnya langsung ke DataGrid (MyGrid).
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e) { SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//Buat koneksi SQL SqlCommand myCommand = new SqlCommand("PILIH judul, harga DARI Judul WHERE harga > 0", myConnection );//Buat perintah SQL
mencoba { myConnection.Open();//Buka koneksi database MyGrid.DataSource = myCommand.ExecuteReader();//Tentukan sumber data DataGrid MyGrid.DataBind();//Ikat data ke DataGrid myConnection.Close();//Tutup koneksi data} menangkap (Pengecualian ex) { //Tangkap kesalahan HttpContext.Current.Response.Write(ex.ToString()); } } |
metode CalcTotal
Metode CalcTotals digunakan untuk menangani variabel runningTotal. Nilai ini akan diteruskan sebagai string. Anda perlu menguraikannya sebagai ganda, dan kemudian variabel runningTotal menjadi ganda.
kekosongan pribadi CalcTotal (string _price) { mencoba { runningTotal += Ganda.Parse(_harga); } menangkap { //menangkap kesalahan} } |
Acara MyGrid_ItemDataBound
Peristiwa MyGrid_ItemDataBound dipanggil ketika setiap baris di sumber data terikat ke DataGrid. Di event handler ini, Anda bisa memproses setiap baris data. Untuk keperluan Anda di sini, Anda perlu memanggil metode CalcTotals dan meneruskan teks dari kolom Harga dan memformat kolom Harga setiap baris dengan jumlah dan menampilkan nilai runningTotal di baris footer.
public void MyDataGrid_ItemDataBound(pengirim objek, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { CalcTotal(e.Item.Sel[1].Teks); e.Item.Cells[1].Teks = string.Format("{0:c}", Convert.ToDouble(e.Item.Cells[1].Teks)); } lain jika(e.Item.ItemType == ListItemType.Footer ) { e.Item.Sel[0].Teks="Total"; e.Item.Sel[1].Teks = string.Format("{0:c}", runningTotal); } } |
Di event handler MyGrid_ItemDataBound, pertama-tama Anda harus menggunakan ListItemType untuk menentukan apakah DataGridItem saat ini adalah item data atau baris AlternatingItem. Untuk item data, Anda memanggil CalcTotals dan meneruskannya nilai kolom Harga sebagai parameter; lalu Anda memformat dan mewarnai kolom Harga dalam format jumlah.
Jika DataGridItem adalah footer, runningTotal dapat ditampilkan dalam format jumlah.
Meringkaskan
Dalam panduan ini, Anda mempelajari cara menggunakan peristiwa DataGrid.OnItemDataBound untuk melakukan statistik run-time pada kolom DataGrid. Dengan menggunakan acara ini, Anda bisa membuat total kolom dan mewarnai footer baris DataGrid.