Bildirim Temelli Parametreler (C#)

tarafından Scott Mitchell

PDF’yi İndir

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.

Sayfaya ObjectDataSource Ekleme

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

ProductsBLL Sınıfını 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.

GetProductByProductID(productID) yöntemini seçin

Ş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 productIDvar. 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.

productID Parametresi için Hard-Coded Parametre Değeri 5 Kullanılacak

Ş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, parameterIDburada 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 , UpdateMethodve DeleteMethod özelliklerinin yanı sıra DeleteParametersdeğerlerini InsertMethodde 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.

Chef Anton'un Gumbo Mix'i Hakkında Bilgiler Görüntüleniyor

Ş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 CountryNameayarlayın. Ayrıca bir Düğme Web denetimi de ekleyin.

Id CountryName ile Sayfaya TextBox Ekleme

Şekil 6: Ile IDCountryName 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.

GetSuppliersByCountry(ülke) 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.

Parametre Değerini CountryName Denetim Değeri olarak ayarlama

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

Kanada'dan Bu Tedarikçiler Gösteriliyor

Ş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 SuppliersBLLGetSuppliersByCountry(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.

Tüm Tedarikçiler Artık Varsayılan Olarak Gösteriliyor

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