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 kita melihat menampilkan data dengan kontrol GridView, DetailsView, dan FormView yang terikat ke kontrol ObjectDataSource yang memanggil GetProducts()
metode dari ProductsBLL
kelas . Metode mengembalikan GetProducts()
DataTable yang ditik dengan kuat yang diisi dengan semua rekaman dari tabel database Products
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 ke halaman yang menampilkan informasi tentang produk tertentu, yaitu Gumbo Mix 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 kontrol ObjectDataSource.
ProductsBLL
Pilih kelas 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. Hanya GetProductByProductID(productID)
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 deklaratif kontrol ObjectDataSource menyertakan Parameter
objek dalam SelectParameters
koleksi untuk setiap parameter input yang diharapkan oleh metode yang ditentukan dalam SelectMethod
properti . Karena metode yang kita gunakan dalam contoh ini hanya mengharapkan satu parameter input, parameterID
, hanya ada satu entri di sini. Koleksi SelectParameters
dapat berisi kelas apa pun yang berasal dari Parameter
kelas di System.Web.UI.WebControls
namespace layanan. 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 InsertMethod
properti , , 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 ObjectDataSource Select
, yang akan memanggil ProductsBLL
metode kelas GetProductByProductID(productID)
menggunakan nilai yang dikodekan secara permanen 5 untuk productID
parameter input. Metode ini akan mengembalikan objek yang sangat diketik 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)
Mengatur Nilai Parameter ke Nilai Properti 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 kontrol Web Tombol.
Gambar 6: Tambahkan Kotak Teks ke Halaman dengan ID
CountryName
(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 SuppliersBLL
kelas dari layar pertama wizard. Dari layar kedua, pilih GetSuppliersByCountry(country)
metode .
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; CountryName
pilih kontrol 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
. memiliki ControlParameter
properti tambahan untuk menentukan ID
kontrol Web dan nilai properti yang akan 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 GetSuppliersByCountry(country)
dalam metode . TableAdapter mengonversi Nothing
menjadi nilai database NULL
(DBNull.Value
), tetapi kueri yang digunakan oleh GetSuppliersByCountry(country)
metode ditulis sedih sehingga tidak mengembalikan nilai apa pun saat NULL
nilai ditentukan untuk @CategoryID
parameter . Singkatnya, tidak ada pemasok yang dikembalikan.
Namun, setelah pengunjung masuk di negara/wilayah, dan mengklik tombol Tampilkan Pemasok untuk menyebabkan postback, metode ObjectDataSource Select
dikueri ulang, meneruskan nilai kontrol Text
TextBox sebagai country
parameter.
Gambar 9: Pemasok dari Kanada ditampilkan (Klik untuk melihat gambar ukuran penuh)
Menampilkan Semua Pemasok Secara Default
Alih-alih menunjukkan tidak ada pemasok saat pertama kali melihat halaman yang mungkin ingin kami tampilkan pada awalnya, memungkinkan pengguna untuk memanjakan daftar dengan memasukkan nama negara di Kotak Teks. Saat TextBox kosong, SuppliersBLL
metode kelas GetSuppliersByCountry(country)
diteruskan Nothing
untuk parameter inputnya country
. Nilai ini Nothing
kemudian diteruskan ke dalam metode DAL GetSupplierByCountry(country)
, di mana nilai database diterjemahkan ke nilai database NULL
untuk @Country
parameter 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.
Untuk mengembalikan semua pemasok ketika TextBox negara kosong, kita dapat menambah GetSuppliersByCountry(country)
metode di BLL untuk memanggil GetSuppliers()
metode ketika parameter negaranya adalah Nothing
dan untuk memanggil metode DAL GetSuppliersByCountry(country)
sebaliknya. Ini akan berdampak pada pengembalian semua pemasok ketika tidak ada negara yang ditentukan dan subset pemasok yang sesuai ketika parameter negara disertakan.
GetSuppliersByCountry(country)
Ubah metode di kelas menjadi SuppliersBLL
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 prospek untuk tutorial ini adalah Hilton Giesenow. Tertarik untuk meninjau artikel MSDN saya yang akan datang? Jika demikian, hubungi saya di mitchell@4GuysFromRolla.com.