Bildirim Temelli Parametreler (C#)
tarafından Scott Mitchell
Bu öğreticide, detailsView denetiminde görüntülenecek verileri seçmek için sabit kodlanmış değere ayarlanmış bir parametrenin nasıl kullanılacağını göstereceğiz.
Giriş
Son öğreticide, sınıftan yöntemini çağıran bir ObjectDataSource denetimine bağlı GridView, DetailsView ve FormView denetimleriyle verileri görüntülemeyi GetProducts()
ProductsBLL
inceledik. yöntemi, GetProducts()
Northwind veritabanının Products
tablosundaki tüm kayıtlarla doldurulmuş, kesin türde bir DataTable döndürür. ProductsBLL
sınıfı, ürünlerin yalnızca alt kümelerini döndürmek için ek yöntemler içerir: GetProductByProductID(productID)
, GetProductsByCategoryID(categoryID)
ve GetProductsBySupplierID(supplierID)
. Bu üç yöntem, döndürülen ürün bilgilerinin nasıl filtrelendiğini gösteren bir giriş parametresi bekler.
ObjectDataSource, giriş parametreleri bekleyen yöntemleri çağırmak için kullanılabilir, ancak bunu yapmak için bu parametrelerin değerlerinin nereden geldiğini belirtmemiz gerekir. Parametre değerleri sabit kodlanabilir veya querystring değerleri, Oturum değişkenleri, sayfadaki bir Web denetiminin özellik değeri veya diğerleri gibi çeşitli dinamik kaynaklardan gelebilir.
Bu öğretici için, sabit kodlanmış bir değere ayarlanmış bir parametrenin nasıl kullanılacağını göstererek başlayalım. Özellikle sayfaya, 5'lik bir ürüne sahip olan Chef Anton's Gumbo Mix adlı belirli bir ürünle ilgili bilgileri görüntüleyen bir ProductID
DetailsView ekleme işlemini inceleyeceğiz. Ardından, bir Web denetimine göre parametre değerinin nasıl ayarlandığını göreceğiz. Özellikle, kullanıcının bir ülkede/bölgede yazmasına izin vermek için bir TextBox kullanacağız. Daha sonra söz konusu ülkede/bölgede bulunan sağlayıcıların listesini görmek için bir Düğmeye tıklayabilir.
Hard-Coded Parametre Değeri Kullanma
İlk örnek için, klasördeki BasicReporting
sayfaya DeclarativeParams.aspx
detailsView denetimi ekleyerek başlayın. DetailsView'un akıllı etiketinden açılan listeden Yeni veri kaynağı'nı> seçin <ve bir ObjectDataSource eklemeyi seçin.
Şekil 1: Sayfaya ObjectDataSource ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu, ObjectDataSource denetiminin Veri Kaynağı Seç sihirbazını otomatik olarak başlatır. Sihirbazın ProductsBLL
ilk ekranından sınıfı seçin.
Şekil 2: Sınıfı seçin ProductsBLL
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Belirli bir ürünle ilgili bilgileri görüntülemek istediğimiz için yöntemini kullanmak GetProductByProductID(productID)
istiyoruz.
Şekil 3: Yöntemi seçin GetProductByProductID(productID)
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Seçtiğimiz yöntem bir parametre içerdiğinden sihirbaz için bir ekran daha vardır ve burada parametre için kullanılacak değeri tanımlamamız istenir. Soldaki listede seçili yöntem için tüm parametreler gösterilir. Çünkü GetProductByProductID(productID)
sadece bir tane productID
var. Sağ tarafta seçili parametrenin değerini belirtebiliriz. Parametre kaynağı açılan listesi, parametre değeri için çeşitli olası kaynakları numaralandırır. Parametre için sabit kodlanmış 5 değerini belirtmek istediğimizden productID
, Parametre kaynağını Yok olarak bırakın ve DefaultValue metin kutusuna 5 girin.
Şekil 4: Parametre için productID
Hard-Coded Parametre Değeri 5 Kullanılacak (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Veri Kaynağını Yapılandırma sihirbazı tamamlandıktan sonra ObjectDataSource denetiminin bildirim temelli işaretlemesi, özelliğinde SelectParameters
tanımlanan yöntemi tarafından beklenen giriş parametrelerinin her biri için koleksiyonda SelectMethod
bir Parameter
nesne içerir. Bu örnekte kullanmakta olduğumuz yöntem yalnızca tek bir giriş parametresi beklediğinden, parameterID
burada yalnızca bir giriş vardır. Koleksiyon, SelectParameters
ad alanında System.Web.UI.WebControls
sınıfından Parameter
türetilen herhangi bir sınıf içerebilir. Sabit kodlanmış parametre değerleri için temel Parameter
sınıf kullanılır, ancak diğer parametre kaynağı seçenekleri için türetilmiş Parameter
bir sınıf kullanılır; gerekirse kendi özel parametre türlerinizi de oluşturabilirsiniz.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Not
Kendi bilgisayarınızda takip ediyorsanız, bu noktada gördüğünüz bildirim temelli işaretleme , UpdateMethod
ve DeleteMethod
özelliklerinin yanı sıra DeleteParameters
değerlerini InsertMethod
de içerebilir. ObjectDataSource'un Veri Kaynağı Seçme sihirbazı ekleme, güncelleştirme ve silme için kullanılacak yöntemleri ProductBLL
otomatik olarak belirtir. Bu nedenle, bunları açıkça temizlemediğiniz sürece yukarıdaki işaretlemeye eklenirler.
Bu sayfayı ziyaret ederken, veri Web denetimi ObjectDataSource'un Select
yöntemini çağıracak ve giriş parametresi için sabit kodlanmış 5 değerini kullanarak sınıfın GetProductByProductID(productID)
productID
yöntemini çağıracaktırProductsBLL
. yöntemi, Chef Anton'un Gumbo Mix'i (5 içeren ürünProductID
) hakkında bilgi içeren tek bir satır içeren kesin türe sahip ProductDataTable
bir nesne döndürür.
Şekil 5: Chef Anton'un Gumbo Mix'i Hakkında Bilgiler Görüntüleniyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Parametre Değerini Web Denetiminin Özellik Değerine Ayarlama
ObjectDataSource'un parametre değerleri, sayfadaki bir Web denetiminin değerine göre de ayarlanabilir. Bunu göstermek için, kullanıcı tarafından belirtilen bir ülkede/bölgede bulunan tüm sağlayıcıları listeleyen bir GridView'a sahip olalım. Bu başlangıcı gerçekleştirmek için, kullanıcının ülke/ülke adını girebileceği sayfaya bir TextBox ekleyin. Bu TextBox denetiminin ID
özelliğini olarak CountryName
ayarlayın. Ayrıca bir Düğme Web denetimi de ekleyin.
Şekil 6: Ile ID
CountryName
Sayfaya TextBox ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ardından, sayfaya bir GridView ekleyin ve akıllı etiketten yeni bir ObjectDataSource eklemeyi seçin. Sağlayıcı bilgilerini görüntülemek istediğimiz için sihirbazın SuppliersBLL
ilk ekranından sınıfı seçin. İkinci ekrandan GetSuppliersByCountry(country)
yöntemini seçin.
Şekil 7: Yöntemi Seçin GetSuppliersByCountry(country)
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Yöntemin GetSuppliersByCountry(country)
giriş parametresi olduğundan, sihirbaz bir kez daha parametre değerini seçmek için son bir ekran içerir. Bu kez Parametre kaynağını Control olarak ayarlayın. Bu, ControlID açılan listesini sayfadaki denetimlerin adlarıyla doldurur; listeden CountryName
denetimi seçin. Sayfa ilk kez ziyaret CountryName
edildiğinde TextBox boş olur, bu nedenle sonuç döndürülür ve hiçbir şey görüntülenmez. Bazı sonuçları varsayılan olarak görüntülemek istiyorsanız, DefaultValue metin kutusunu uygun şekilde ayarlayın.
Şekil 8: Parametre Değerini Denetim Değeri olarak CountryName
ayarlayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)
ObjectDataSource'un bildirim temelli işaretlemesi, standart Parameter
nesne yerine ControlParameter kullanarak ilk örneğimizden biraz farklıdır. A ControlParameter
, Web denetiminin ID
ve parametresi (PropertyName
) için kullanılacak özellik değerini belirtmek için ek özelliklere sahiptir. Veri Kaynağını Yapılandırma sihirbazı, TextBox için parametre değeri için özelliğini kullanmak Text
isteyebileceğimizi belirleyecek kadar akıllıydı. Ancak, Web denetiminden farklı bir özellik değeri kullanmak istiyorsanız, değeri burada veya sihirbazdaki "Gelişmiş özellikleri göster" bağlantısına tıklayarak değiştirebilirsiniz PropertyName
.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Sayfayı ilk kez CountryName
ziyaret ederken TextBox boş olur. ObjectDataSource'un Select
yöntemi Hala GridView tarafından çağrılır, ancak yöntemine GetSuppliersByCountry(country)
bir değeri null
geçirilir. TableAdapter değerini bir veritabanı NULL
değerine ()DBNull.Value
dönüştürürnull
, ancak yöntemi tarafından GetSuppliersByCountry(country)
kullanılan sorgu, parametre için bir NULL
değer belirtildiğinde hiçbir değer döndürmemesi için @CategoryID
yazılır. Kısacası hiçbir tedarikçi geri döndürülmüyor.
Ancak ziyaretçi bir ülkeye girdikten ve geri göndermeye neden olmak için Sağlayıcıları Göster düğmesine tıkladıktan sonra ObjectDataSource'un Select
yöntemi yeniden sorgulanır ve parametre olarak country
TextBox denetiminin Text
değeri geçirilir.
Şekil 9: Kanada'dan Gelen Tedarikçiler Gösteriliyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Varsayılan Olarak Tüm Sağlayıcıları Gösterme
Sayfayı ilk kez görüntülerken sağlayıcıların hiçbirini göstermemek yerine, ilk başta tüm sağlayıcıları göstermek isteyebiliriz; bu da kullanıcının TextBox'a bir ülke/bölge adı girerek listeyi ayrıştırmasına olanak tanır. TextBox boş olduğunda, sınıfın SuppliersBLL
GetSuppliersByCountry(country)
yöntemi giriş parametresi için country
bir null
değere geçirilir. Bu null
değer dal'ın GetSupplierByCountry(country)
yöntemine geçirilir ve burada aşağıdaki sorgudaki parametre için @Country
bir veritabanı NULL
değerine çevrilir:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
İfadeCountry = NULL
, sütunu bir değere sahip NULL
olan Country
kayıtlar için bile her zaman False döndürür; bu nedenle hiçbir kayıt döndürülür.
Ülke TextBox boş olduğunda tüm tedarikçileri döndürmek için, ülke parametresi null
olduğunda yöntemini çağırmak ve aksi takdirde DAL'nin GetSuppliersByCountry(country)
yöntemini çağırmak GetSuppliers()
için BLL'deki yöntemini genişletebilirizGetSuppliersByCountry(country)
. Bu, ülke belirtilmediğinde tüm tedarikçileri geri döndürme etkisine ve ülke parametresi dahil edildiğinde tedarikçilerin uygun alt kümesine sahip olacaktır.
sınıfındaki GetSuppliersByCountry(country)
SuppliersBLL
yöntemini aşağıdakiyle değiştirin:
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
Bu değişiklikle DeclarativeParams.aspx
, sayfa ilk ziyaret edildiğinde (veya TextBox boş olduğunda CountryName
) tüm sağlayıcıları gösterir.
Şekil 10: Tüm Sağlayıcılar Artık Varsayılan Olarak Gösteriliyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
Giriş parametreleriyle yöntemleri kullanmak için ObjectDataSource'un SelectParameters
koleksiyonundaki parametrelerin değerlerini belirtmemiz gerekir. Farklı parametre türleri, parametre değerinin farklı kaynaklardan alınmasına olanak sağlar. Varsayılan parametre türü sabit kodlanmış bir değer kullanır, ancak sayfadaki Web denetimlerinden sorgu dizesi, Oturum değişkenleri, tanımlama bilgileri ve hatta kullanıcı tarafından girilen değerlerden kolayca (ve kod satırı olmadan) parametre değerleri elde edilebilir.
Bu öğreticide incelediğimiz örneklerde bildirim temelli parametre değerlerinin nasıl kullanılacağı gösterilmiştir. Ancak, geçerli tarih ve saat gibi kullanılamayan bir parametre kaynağı kullanmamız gereken zamanlar olabilir veya sitemizde Üyelik kullanılıyorsa ziyaretçinin Kullanıcı Kimliği. Bu tür senaryolar için, ObjectDataSource temel nesnesinin yöntemini çağırmadan önce parametre değerlerini program aracılığıyla ayarlayabiliriz. Bunu nasıl gerçekleştirebileceğimizi bir sonraki öğreticide göreceğiz.
Mutlu Programlama!
Yazar hakkında
Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçireni Hilton Giesenow oldu. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresinden bir satır mitchell@4GuysFromRolla.combırakın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin