Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Scott Mitchell
Dalam tutorial ini kita akan mengilustrasikan cara menggunakan parameter yang diatur ke nilai yang dikodekan secara permanen untuk memilih data yang akan ditampilkan dalam kontrol DetailsView.
Pendahuluan
Dalam tutorial terakhir ini kita melihat cara menampilkan data dengan kontrol GridView, DetailsView, dan FormView yang terikat ke kontrol ObjectDataSource, yang memanggil metode dari kelas ProductsBLL. Metode GetProducts() mengembalikan DataTable bertipe kuat yang diisi dengan semua catatan dari tabel Products dari database Northwind. Kelas ProductsBLL berisi metode tambahan untuk mengembalikan hanya subset produk - , GetProductByProductID(productID), GetProductsByCategoryID(categoryID)dan GetProductsBySupplierID(supplierID). Ketiga metode ini mengharapkan parameter input yang menunjukkan cara memfilter informasi produk yang dikembalikan.
ObjectDataSource dapat digunakan untuk memanggil metode yang mengharapkan parameter input, tetapi untuk melakukannya, kita harus menentukan dari mana nilai untuk parameter ini berasal. Nilai parameter dapat dikodekan secara permanen atau dapat berasal dari berbagai sumber dinamis, termasuk: nilai querystring, variabel Sesi, nilai properti kontrol Web di halaman, atau lainnya.
Untuk tutorial ini mari kita mulai dengan mengilustrasikan cara menggunakan parameter yang diatur ke nilai yang dikodekan secara permanen. Secara khusus, kita akan melihat menambahkan DetailsView pada halaman yang akan menampilkan informasi tentang produk tertentu, yakni Gumbo Mix milik Chef Anton, yang memiliki ProductID 5. Selanjutnya, kita akan melihat cara mengatur nilai parameter berdasarkan kontrol Web. Secara khusus, kita akan menggunakan TextBox untuk membiarkan pengguna mengetik di negara/wilayah, setelah itu mereka dapat mengklik Tombol untuk melihat daftar pemasok yang berada di negara/wilayah tersebut.
Menggunakan Nilai Parameter Yang Dikodekan Secara Permanen
Untuk contoh pertama, mulailah dengan menambahkan kontrol DetailsView ke DeclarativeParams.aspx halaman di BasicReporting folder. Dari tag pintar DetailsView, pilih <Sumber> data baru dari daftar drop-down dan pilih untuk menambahkan ObjectDataSource.
Gambar 1: Tambahkan ObjectDataSource ke Halaman (Klik untuk melihat gambar ukuran penuh)
Ini akan secara otomatis memulai wizard Pilih Sumber Data dari kontrol ObjectDataSource. Pilih kelas ProductsBLL dari layar pertama wizard.
Gambar 2: Pilih ProductsBLL Kelas (Klik untuk melihat gambar ukuran penuh)
Karena kami ingin menampilkan informasi tentang produk tertentu, kami ingin menggunakan metode ini GetProductByProductID(productID) .
Gambar 3: Pilih GetProductByProductID(productID) metode (Klik untuk melihat gambar ukuran penuh)
Karena metode yang kami pilih menyertakan parameter, ada satu layar lagi untuk wizard, di mana kami diminta untuk menentukan nilai yang akan digunakan untuk parameter. Daftar di sebelah kiri menunjukkan semua parameter untuk metode yang dipilih. Untuk GetProductByProductID(productID), hanya ada satu productID. Di sebelah kanan kita dapat menentukan nilai untuk parameter yang dipilih. Daftar drop-down sumber parameter menghitung berbagai kemungkinan sumber untuk nilai parameter. Karena kita ingin menentukan nilai yang dikodekan secara permanen 5 untuk productID parameter , biarkan sumber Parameter sebagai Tidak Ada dan masukkan 5 ke dalam kotak teks DefaultValue.
Gambar 4: Nilai Parameter Hard-Coded 5 Akan Digunakan untuk productID Parameter (Klik untuk melihat gambar ukuran penuh)
Setelah menyelesaikan wizard Konfigurasi Sumber Data, markup kontrol ObjectDataSource yang bersifat deklaratif menyertakan objek Parameter dalam kumpulan SelectParameters untuk setiap parameter input yang diharapkan oleh metode yang ditentukan oleh properti SelectMethod. Karena metode yang kita gunakan dalam contoh ini hanya mengharapkan satu parameter input, parameterID, hanya ada satu entri di sini. Koleksi SelectParameters dapat memuat kelas apa pun yang diturunkan dari kelas Parameter di namespace System.Web.UI.WebControls. Untuk nilai parameter yang dikodekan secara permanen, kelas dasar Parameter digunakan, tetapi untuk opsi sumber parameter lainnya, kelas turunan Parameter digunakan; Anda juga dapat membuat jenis parameter kustom Anda sendiri, jika diperlukan.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5"
Name="productID" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Catatan
Jika Anda mengikuti di komputer Anda sendiri, markup deklaratif yang Anda lihat pada titik ini mungkin menyertakan nilai untuk properti InsertMethod, UpdateMethod, dan DeleteMethod, serta DeleteParameters. Wizard Pilih Sumber Data ObjectDataSource secara otomatis menentukan metode dari ProductBLL yang akan digunakan untuk menyisipkan, memperbarui, dan menghapus, jadi kecuali Anda secara eksplisit menghapusnya, metode tersebut akan disertakan dalam markup di atas.
Saat mengunjungi halaman ini, kontrol Web data akan memanggil metode Select dari ObjectDataSource, yang akan memanggil metode GetProductByProductID(productID) dari kelas ProductsBLL, menggunakan nilai 5 yang sudah ditetapkan sebagai parameter input productID. Metode ini akan mengembalikan objek bertipe kuat ProductDataTable, yang berisi satu baris dengan informasi tentang Gumbo Mix Chef Anton (produk dengan ProductID 5).
Gambar 5: Informasi Tentang Gumbo Mix Chef Anton Ditampilkan (Klik untuk melihat gambar ukuran penuh)
Menetapkan Nilai Parameter menjadi Nilai Properti dari Kontrol Web
Nilai parameter ObjectDataSource juga dapat diatur berdasarkan nilai kontrol Web pada halaman. Untuk mengilustrasikan hal ini, mari kita memiliki GridView yang mencantumkan semua pemasok yang terletak di negara yang ditentukan oleh pengguna. Untuk menyelesaikan awal ini dengan menambahkan TextBox ke halaman tempat pengguna dapat memasukkan nama negara. Atur properti kontrol ID TextBox ini ke CountryName. Tambahkan juga Tombol kontrol Web.
Gambar 6: Tambahkan Kotak Teks ke Halaman dengan IDCountryName (Klik untuk melihat gambar ukuran penuh)
Selanjutnya, tambahkan GridView ke halaman dan, dari tag pintar, pilih untuk menambahkan ObjectDataSource baru. Karena kami ingin menampilkan informasi pemasok, pilih kelas SuppliersBLL pada layar pertama wizard. Dari layar kedua, pilih metode GetSuppliersByCountry(country).
Gambar 7: Pilih GetSuppliersByCountry(country) Metode (Klik untuk melihat gambar ukuran penuh)
GetSuppliersByCountry(country) Karena metode memiliki parameter input, wizard sekali lagi menyertakan layar akhir untuk memilih nilai parameter. Kali ini, atur Sumber parameter ke Kontrol. Ini akan mengisi daftar drop-down ControlID dengan nama kontrol di halaman. Pilih kontrol CountryName dari daftar. Ketika halaman pertama kali dikunjungi, CountryName Kotak Teks akan kosong, sehingga tidak ada hasil yang dikembalikan dan tidak ada yang ditampilkan. Jika Anda ingin menampilkan beberapa hasil secara default, atur kotak teks DefaultValue yang sesuai.
Gambar 8: Atur Nilai Parameter ke CountryName Nilai Kontrol (Klik untuk melihat gambar ukuran penuh)
Markup deklaratif ObjectDataSource sedikit berbeda dari contoh pertama kami, menggunakan ControlParameter alih-alih objek standar Parameter . Sebuah ControlParameter memiliki properti tambahan untuk menentukan ID dari kontrol Web dan nilai properti yang digunakan untuk parameter (PropertyName). Wizard Konfigurasi Sumber Data cukup cerdas untuk menentukan bahwa, untuk TextBox, kami mungkin ingin menggunakan Text properti untuk nilai parameter. Namun, jika Anda ingin menggunakan nilai properti yang berbeda dari kontrol Web, Anda bisa mengubah PropertyName nilai di sini atau dengan mengklik tautan "Perlihatkan properti tingkat lanjut" di wizard.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Saat mengunjungi halaman untuk pertama kalinya CountryName Kotak Teks kosong. Metode ObjectDataSource Select masih dipanggil oleh GridView, tetapi nilai Nothing diteruskan ke metode GetSuppliersByCountry(country). TableAdapter mengonversi Nothing menjadi nilai database NULL (DBNull.Value), namun kueri yang digunakan oleh metode GetSuppliersByCountry(country) ditulis sedemikian rupa sehingga tidak mengembalikan nilai apa pun saat nilai NULL ditentukan untuk parameter @CategoryID. Singkatnya, tidak ada pemasok yang dikembalikan.
Setelah pengunjung memasuki suatu negara/wilayah, dan mengklik tombol Tampilkan Pemasok untuk memicu postback, metode Select ObjectDataSource akan dikueri ulang, meneruskan nilai dari kontrol TextBox Text sebagai parameter country.
Gambar 9: Pemasok dari Kanada ditampilkan (Klik untuk melihat gambar ukuran penuh)
Menampilkan Semua Pemasok Secara Default
Daripada tidak menampilkan pemasok saat pertama kali melihat halaman, kami mungkin ingin menampilkan semua pemasok terlebih dahulu, memungkinkan pengguna untuk mempersempit daftar dengan memasukkan nama negara di Kotak Teks. Saat TextBox kosong, kelas SuppliersBLL metode GetSuppliersByCountry(country) diteruskan Nothing untuk parameter inputnya country. Nilai Nothing ini kemudian diteruskan ke dalam metode DAL GetSupplierByCountry(country), di mana nilainya diterjemahkan menjadi nilai database NULL untuk parameter @Country dalam kueri berikut:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
Ekspresi Country = NULL selalu mengembalikan False, bahkan untuk rekaman yang kolomnya Country memiliki NULL nilai; oleh karena itu, tidak ada rekaman yang dikembalikan.
Mengembalikan semua pemasok ketika TextBox negara kosong dapat dilakukan dengan memodifikasi metode GetSuppliersByCountry(country) di BLL untuk memanggil metode GetSuppliers() ketika parameter negaranya adalah Nothing, atau memanggil metode DAL GetSuppliersByCountry(country) jika tidak. Ini akan berdampak pada pengembalian semua pemasok ketika tidak ada negara yang ditentukan dan subset pemasok yang sesuai ketika parameter negara disertakan.
Ubah metode GetSuppliersByCountry(country) dalam kelas SuppliersBLL menjadi yang berikut:
Public Function GetSuppliersByCountry(country As String) _
As Northwind.SuppliersDataTable
If String.IsNullOrEmpty(country) Then
Return GetSuppliers()
Else
Return Adapter.GetSuppliersByCountry(country)
End If
End Function
Dengan perubahan ini, DeclarativeParams.aspx halaman menunjukkan semua pemasok ketika pertama kali dikunjungi (atau setiap kali CountryName TextBox kosong).
Gambar 10: Semua Pemasok Sekarang Ditampilkan secara Default (Klik untuk melihat gambar ukuran penuh)
Ringkasan
Untuk menggunakan metode dengan parameter input, kita perlu menentukan nilai untuk parameter dalam koleksi ObjectDataSource SelectParameters . Berbagai jenis parameter memungkinkan nilai parameter diperoleh dari sumber yang berbeda. Jenis parameter default menggunakan nilai yang dikodekan secara permanen, tetapi sama mudahnya (dan tanpa baris kode) nilai parameter dapat diperoleh dari querystring, Variabel sesi, cookie, dan bahkan nilai yang dimasukkan pengguna dari kontrol Web di halaman.
Contoh yang kita lihat dalam tutorial ini menggambarkan cara menggunakan nilai parameter deklaratif. Namun, mungkin ada kalanya kita perlu menggunakan sumber parameter yang tidak tersedia, seperti tanggal dan waktu saat ini, atau, jika situs kami menggunakan Keanggotaan, ID Pengguna pengunjung. Untuk skenario tersebut, kita dapat mengatur nilai parameter secara terprogram sebelum ObjectDataSource memanggil metode objek yang mendasarinya. Kita akan melihat cara mencapainya di tutorial berikutnya.
Selamat Pemrograman!
Tentang Penulis
Scott Mitchell, penulis tujuh buku ASP/ASP.NET dan pendiri 4GuysFromRolla.com, telah bekerja sama dengan teknologi Microsoft Web sejak 1998. Scott bekerja sebagai konsultan, pelatih, dan penulis independen. Buku terbarunya adalah Sams Teach Yourself ASP.NET 2.0 dalam 24 Jam. Dia dapat dijangkau di mitchell@4GuysFromRolla.com.
Terima kasih khusus untuk
Seri tutorial ini ditinjau oleh banyak peninjau yang bermanfaat. Peninjau utama untuk tutorial ini adalah Hilton Giesenow. Tertarik untuk meninjau artikel MSDN saya yang akan datang? Jika demikian, hubungi saya di mitchell@4GuysFromRolla.com.