Bagikan melalui


Parameter Deklaratif (VB)

oleh Scott Mitchell

Unduh PDF

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.

Menambahkan ObjectDataSource ke Halaman

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.

Pilih Kelas ProductsBLL

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) .

Pilih metode 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.

Nilai Parameter Hard-Coded 5 Akan Digunakan untuk Parameter productID

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 InsertMethodproperti , , UpdateMethoddan 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).

Informasi Tentang Gumbo Mix Chef Anton Ditampilkan

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.

Menambahkan Kotak Teks ke Halaman dengan ID CountryName

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 SuppliersBLL kelas dari layar pertama wizard. Dari layar kedua, pilih GetSuppliersByCountry(country) metode .

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; 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.

Atur Nilai Parameter ke Nilai Kontrol CountryName

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.

Pemasok dari Kanada tersebut Ditampilkan

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).

Semua Pemasok Sekarang Ditampilkan secara Default

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.