Aracılığıyla paylaş


Bir ASP.NET Sayfasında BLL ve DAL Düzeyi Özel Durumları İşleme (C#)

tarafından Scott Mitchell

PDF'i indirin

Bu öğreticide, bir ASP.NET veri Web denetiminin ekleme, güncelleştirme veya silme işlemi sırasında bir özel durum oluşması durumunda kolay, bilgilendirici bir hata iletisinin nasıl görüntüleneceğini göreceğiz.

Giriş

Katmanlı uygulama mimarisini kullanarak ASP.NET bir web uygulamasındaki verilerle çalışmak aşağıdaki üç genel adımı içerir:

  1. İş Mantığı Katmanı'nın hangi yönteminin çağrılması gerektiğini ve bunu geçirmek için hangi parametre değerlerinin gerektiğini belirleyin. Parametre değerleri sabit kodlanabilir, program aracılığıyla atanabilir veya kullanıcı tarafından girilen girişler olabilir.
  2. yöntemini çağırın.
  3. Sonuçları işleme. Veri döndüren bir BLL yöntemi çağrılırken bu, verilerin bir veri Web denetimine bağlanmasını içerebilir. Verileri değiştiren BLL yöntemleri için bu, bir dönüş değerine göre bazı eylemler gerçekleştirmeyi veya 2. Adımda ortaya çıkabilecek özel durumları düzgün bir şekilde işlemeyi içerebilir.

Önceki öğreticide gördüğümüz gibi, hem ObjectDataSource hem de veri Web denetimleri 1. ve 3. Adımlar için genişletilebilirlik noktaları sağlar. Örneğin GridView, alan değerlerini ObjectDataSource RowUpdating koleksiyonuna atamadan önce olayını başlatırUpdateParameters; RowUpdated olayı ObjectDataSource işlemi tamamladıktan sonra oluşturulur.

1. Adım sırasında tetiklenen olayları zaten inceledik ve bunların giriş parametrelerini özelleştirmek veya işlemi iptal etmek için nasıl kullanılabileceğini gördük. Bu öğreticide, işlem tamamlandıktan sonra tetiklenen olaylara odaklanacağız. Bu son düzey olay işleyicileriyle, diğer şeylerin yanında, işlem sırasında bir özel durumun oluşup oluşmadığını belirleyebilir ve standart ASP.NET özel durum sayfasını varsayılan olarak kullanmak yerine ekranda kolay, bilgilendirici bir hata iletisi görüntüleyerek düzgün bir şekilde işleyebiliriz.

Bu son düzey olaylarla çalışmayı göstermek için, ürünleri düzenlenebilir bir GridView'da listeleyen bir sayfa oluşturalım. Bir ürünü güncelleştirirken bir özel durum oluşursa ASP.NET sayfamız GridView'un üzerinde bir sorun oluştuğuna ilişkin kısa bir ileti görüntüler. Haydi başlayalım!

1. Adım: Ürünlerin Düzenlenebilir GridView'ını Oluşturma

Önceki öğreticide ProductName ve UnitPrice olmak üzere yalnızca iki alanı olan düzenlenebilir bir GridView oluşturduk. Bu, her bir ürün alanı için bir parametre yerine yalnızca üç giriş parametresini (ürünün adı, birim fiyatı ve kimliği) kabul eden sınıfın ProductsBLL yöntemine ek bir overload oluşturulmasını gerektiriyordu. Bu öğreticide, ürünün adını, birim başına miktarını, birim fiyatını ve stoktaki birimleri görüntüleyen ancak yalnızca stoktaki adın, birim fiyatının ve birimlerin düzenlenmesine izin veren düzenlenebilir bir GridView oluşturarak bu tekniği yeniden uygulayalım.

Bu senaryoya UpdateProduct uyum sağlamak için yöntemin dört parametre kabul eden başka bir aşırı yüklemesine ihtiyacımız vardır: ürünün adı, birim fiyatı, stoktaki birimler ve kimlik. Sınıfına aşağıdaki yöntemi ProductsBLL ekleyin:

[System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Update, false)]
public bool UpdateProduct(string productName, decimal? unitPrice, short? unitsInStock,
    int productID)
{
    Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
    if (products.Count == 0)
        // no matching record found, return false
        return false;
    Northwind.ProductsRow product = products[0];
    product.ProductName = productName;
    if (unitPrice == null) product.SetUnitPriceNull();
      else product.UnitPrice = unitPrice.Value;
    if (unitsInStock == null) product.SetUnitsInStockNull();
      else product.UnitsInStock = unitsInStock.Value;
    // Update the product record
    int rowsAffected = Adapter.Update(product);
    // Return true if precisely one row was updated, otherwise false
    return rowsAffected == 1;
}

Bu yöntem tamamlandıktan sonra, bu dört ürün alanını düzenlemeye olanak tanıyan ASP.NET sayfasını oluşturmaya hazırız. ErrorHandling.aspx klasöründeki EditInsertDelete sayfasını açın ve Tasarım Aracı kullanarak sayfaya bir GridView ekleyin. GridView'ı yeni bir ObjectDataSource'a bağlayın, Select() yöntemini ProductsBLL sınıfının GetProducts() yöntemine ve Update() yöntemini yeni oluşturulan UpdateProduct aşırı yüklemesine eşleyin.

Dört Giriş Parametresini Kabul Eden UpdateProduct Yöntemi Aşırı Yüklemesini Kullan

Şekil 1: Dört Giriş Parametresi Kabul Eden Yöntem Aşırı Yüklemesini Kullanma UpdateProduct (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu işlem, dört parametreli bir UpdateParameters koleksiyona ve ürün alanlarının her biri için bir alana sahip bir GridView'a sahip bir ObjectDataSource oluşturur. ObjectDataSource'un bildirimsel işaretlemesi, OldValuesParameterFormatString özelliğine original_{0} değerini atar, bu da istisnaya neden olur çünkü BLL sınıfımız original_productID adlı bir giriş parametresinin geçirilmesini beklemiyor. Bu ayarı bildirim temelli söz diziminden tamamen kaldırmayı unutmayın (veya varsayılan değer olarak ayarlayın). {0}

Ardından, GridView'da yalnızca ProductName, , QuantityPerUnitUnitPriceve UnitsInStock BoundField değerlerini içerecek şekilde aşağı doğru ayrıştırın. Ayrıca, HeaderText özelliklerinin değiştirilmesi gibi, gerekli gördüğünüz herhangi bir alan düzeyinde biçimlendirmeyi uygulamaktan çekinmeyin.

Önceki öğreticide, UnitPrice BoundField'ı hem salt okunur modda hem de düzenleme modunda para birimi olarak nasıl biçimlendireceğimizi inceledik. Burada da aynısını yapalım. Bunun, Şekil 2'de gösterildiği gibi BoundField'ın DataFormatString özelliğini {0:c} olarak, HtmlEncode özelliğini false olarak ve ApplyFormatInEditMode özelliğini true olarak ayarlamayı gerektirdiğini hatırlayın.

UnitPrice BoundField'ı Para Birimi Olarak Görüntülenecek Şekilde Yapılandırma

Şekil 2: BoundField'ı UnitPrice Para Birimi Olarak Görüntülenecek Şekilde Yapılandırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

UnitPrice düzenleme arabiriminde para birimi olarak biçimlendirmek, GridView'un RowUpdating olayı için para birimi biçimli dizeyi bir değere ayrıştıran bir decimal olay işleyicisi oluşturulmasını gerektirir. RowUpdating olay işleyicisinin, kullanıcının bir UnitPrice değeri sağladığından emin olmak için kontrol ettiğini de son öğreticide hatırlayın. Ancak, bu kılavuz için kullanıcının fiyatı atlamasına izin verelim.

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    if (e.NewValues["UnitPrice"] != null)
        e.NewValues["UnitPrice"] =decimal.Parse(e.NewValues["UnitPrice"].ToString(),
            System.Globalization.NumberStyles.Currency);
}

GridView'umuz bir QuantityPerUnit BoundField içerir, ancak bu BoundField yalnızca görüntüleme amacıyla olmalıdır ve kullanıcı tarafından düzenlenemez. Bunu düzenlemek için BoundFields özelliğini ReadOnly olarak ayarlamanız yeterlidir true.

QuantityPerUnit BoundField'i Salt Okunabilir Yap

Şekil 3: BoundField Read-Only yapma QuantityPerUnit (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Son olarak GridView'un akıllı etiketinden Düzenlemeyi Etkinleştir onay kutusunu işaretleyin. Bu adımları tamamladıktan sonra ErrorHandling.aspx sayfasının tasarımı, Şekil 4'e benzer görünmelidir.

Gerekli olan BoundField'ler dışında tümünü kaldırın ve Düzenlemeyi Etkinleştir kutusunu işaretleyin

Şekil 4: Gerekli Bağlı Alanlar dışında kalanları kaldırın ve Düzenlemeyi Etkinleştir seçeneğini işaretleyin (Tam boyutlu görüntüye bakmak için tıklayın)

Bu noktada tüm ürünlerin ProductName, QuantityPerUnit, UnitPriceve UnitsInStock alanlarının bir listesi bulunur; ancak yalnızca ProductName, UnitPriceve UnitsInStock alanları düzenlenebilir.

Kullanıcılar artık stok alanlarındaki ürünlerin adlarını, fiyatlarını ve birimlerini kolayca düzenleyebilir

Şekil 5: Kullanıcılar artık Ürünlerin Adlarını, Fiyatlarını ve Stok Alanlarındaki Birimleri Kolayca Düzenleyebilir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

2. Adım: DAL-Level İstisnalarını Zarifçe Yönetme

Düzenlenebilir GridView'umuz, kullanıcılar düzenlenen ürünün adı, fiyatı ve stoktaki birimleri için yasal değerler girdiğinde harika bir şekilde çalışsa da, geçersiz değerler girilmesi özel durumla sonuçlanır. Örneğin, sınıftaki ProductName özelliği belirtmezseniz ve bu özelliğin değeri ProductName olacak şekilde ayarlanmışsa, bu durum ProductsRow'ın atılmasına neden olur. Veritabanı çalışmıyorsa, veritabanına bağlanmaya çalışırken TableAdapter tarafından bir AllowDBNull atılır. Hiçbir işlem yapmadan bu özel durumlar Veri Erişim Katmanı'ndan İş Mantığı Katmanı'na, sonra ASP.NET sayfasına ve son olarak da ASP.NET çalışma zamanına doğru kabarır.

Web uygulamanızın nasıl yapılandırıldığına ve uygulamasından uygulamayı localhostziyaret edip etmediğinize bağlı olarak, işlenmeyen bir özel durum genel bir sunucu hata sayfasına, ayrıntılı bir hata raporuna veya kullanıcı dostu bir web sayfasına neden olabilir. ASP.NET çalışma zamanının yakalanmayan özel duruma nasıl yanıt verdiği hakkında daha fazla bilgi için ASP.NET ve customErrors ÖğesindeWeb Uygulaması Hata İşleme bölümüne bakın.

Şekil 6'da, değeri belirtmeden bir ürünü güncelleştirmeye çalışırken karşılaşılan ekran gösterilmektedir ProductName . Bu, üzerinden localhostgeçerken görüntülenen varsayılan ayrıntılı hata raporudur.

Ürünün Adının Atlanması Özel Durum Ayrıntılarını Görüntüler

Şekil 6: Ürünün Adının Atlanması Özel Durum Ayrıntılarını Görüntüler (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bir uygulamayı test ederken bu tür özel durum ayrıntıları yararlı olsa da, son kullanıcıya özel durum karşısında böyle bir ekran sunmak idealden daha azdır. Son kullanıcı büyük olasılıkla bir NoNullAllowedException nedir veya neden oluşmuştur bilmiyor. Daha iyi bir yaklaşım, kullanıcıya ürünü güncelleştirmeye çalışırken sorun olduğunu açıklayan daha kullanıcı dostu bir ileti sunmaktır.

İşlemi gerçekleştirirken bir özel durum oluşursa, hem ObjectDataSource hem de veri Web denetimindeki son düzey olaylar, bunu algılamak ve özel durumun ASP.NET çalışma zamanına taşma işlemini iptal etmek için bir araç sağlar. Örneğimizde, GridView'un RowUpdated olayı için bir özel durumun tetiklenip tetiklenmediğini belirleyen bir olay işleyicisi oluşturalım ve tetiklenmişse özel durum ayrıntılarını Etiket Web denetiminde görüntüleyelim.

ASP.NET sayfasına bir Etiket ekleyerek, ID özelliğini ExceptionDetails olacak şekilde ayarlayın ve Text özelliğini temizleyin. Kullanıcının dikkatini bu mesaja çekmek için CssClass özelliğini Warning olarak ayarlayın. Bu, önceki öğreticide Styles.css dosyasına eklediğimiz bir CSS sınıfıdır. Bu CSS sınıfının Label metninin kırmızı, italik, kalın ve fazladan büyük bir yazı tipinde görüntülenmesine neden olduğunu hatırlayın.

Sayfaya Etiket Web Denetimi Ekleme

Şekil 7: Sayfaya Etiket Web Denetimi Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu Label Web denetiminin yalnızca bir özel durum oluştuktan hemen sonra görünür olmasını istediğimizden, olay işleyicisinde Visible özelliğini false olarak ayarlayınPage_Load:

protected void Page_Load(object sender, EventArgs e)
{
    ExceptionDetails.Visible = false;
}

Bu kodla, ilk sayfa ziyaretinde ve sonraki geri göndermelerde ExceptionDetails denetimi, Visible özelliği false olarak ayarlanacaktır. GridView'un RowUpdated olay işleyicisinde algıladığımız DAL veya BLL düzeyinde bir özel durum karşısında denetimin ExceptionDetailsVisible özelliğini true olarak ayarlayacağız. Web denetimi olay işleyicileri, sayfa yaşam döngüsündeki Page_Load olay işleyicisinden sonra gerçekleştiğinden Etiket görünür hale gelecektir. Ancak, bir sonraki geri göndermede Page_Load olay işleyicisi Visible özelliğini tekrar false olarak geri döndürerek yeniden görünümden gizler.

Uyarı

Alternatif olarak, ExceptionDetails içindeki Visible denetimi için Page_Load özelliğini ayarlama gereğini ortadan kaldırabiliriz, bunun yerine özelliği Visiblefalse olarak bildirim temelli söz dizimiyle atayıp görünüm durumunu devre dışı bırakabiliriz (özelliğini EnableViewStatefalse olarak ayarlayarak). Bu alternatif yaklaşımı gelecekteki bir öğreticide kullanacağız.

Etiket denetimi eklendikten sonra, sonraki adımımız GridView'un RowUpdated olayı için olay işleyicisi oluşturmaktır. Tasarımcı'da GridView'ı seçin, Özellikler penceresine gidin ve GridView olaylarını listeleyen şimşek simgesine tıklayın. GridView'in RowUpdating olayı için zaten bir giriş olmalıdır, çünkü bu öğreticide daha önce bu olay için bir olay işleyicisi oluşturduk. RowUpdated olayı için de bir olay işleyicisi oluşturun.

GridView'ın RowUpdated Olayı için Olay İşleyicisi Oluşturma

Şekil 8: GridView Olayı için Olay İşleyicisi RowUpdated Oluşturma

Uyarı

Olay işleyicisini, kod arkası sınıf dosyasının en üstündeki açılır listeleri kullanarak da oluşturabilirsiniz. Soldaki açılır listeden GridView'ı ve sağdaki listeden RowUpdated olayını seçin.

Bu olay işleyicisinin oluşturulması, ASP.NET sayfasının arka planda kod sınıfına aşağıdaki kodu ekler:

protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
}

Bu olay işleyicisinin ikinci giriş parametresi, özel durumları işlemek için üç özelliği olan GridViewUpdatedEventArgs türünde bir nesnedir:

  • Exception atılan özel duruma referans; eğer hiç özel durum atılmamışsa, bu özelliğin değeri null
  • ExceptionHandled Olay işleyicisinde RowUpdated özel durumun işlenip işlenmediğini gösteren bir boole değeri; eğer false (varsayılan), özel durum yeniden atılır ve ASP.NET çalışma zamanına iletilir
  • KeepInEditMode düzenlenmiş GridView satırına true ayarlanırsa düzenleme modunda kalır; ( false varsayılan), GridView satırı salt okunur moduna geri döner

Kodumuzun, Exception'nin null'e eşit olmadığını kontrol etmesi gerekir. Bu, işlemi gerçekleştirirken bir özel durumun ortaya çıktığını gösterir. Böyle bir durum söz konusuysa şunları yapmak istiyoruz:

  • Etikette ExceptionDetails kullanıcı dostu bir ileti görüntüleme
  • İstisnanın işlendiğini belirtin
  • GridView satırını düzenleme modunda tutma

Aşağıdaki kod bu hedefleri gerçekleştirir:

protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    if (e.Exception != null)
    {
        // Display a user-friendly message
        ExceptionDetails.Visible = true;
        ExceptionDetails.Text = "There was a problem updating the product. ";
        if (e.Exception.InnerException != null)
        {
            Exception inner = e.Exception.InnerException;
            if (inner is System.Data.Common.DbException)
                ExceptionDetails.Text +=
                    "Our database is currently experiencing problems." +
                    "Please try again later.";
            else if (inner is NoNullAllowedException)
                ExceptionDetails.Text +=
                    "There are one or more required fields that are missing.";
            else if (inner is ArgumentException)
            {
                string paramName = ((ArgumentException)inner).ParamName;
                ExceptionDetails.Text +=
                    string.Concat("The ", paramName, " value is illegal.");
            }
            else if (inner is ApplicationException)
                ExceptionDetails.Text += inner.Message;
        }
        // Indicate that the exception has been handled
        e.ExceptionHandled = true;
        // Keep the row in edit mode
        e.KeepInEditMode = true;
    }
}

Bu olay işleyicisi, e.Exception 'in null olup olmadığını denetleyerek başlar. Değilse, ExceptionDetails Label'ın Visible özelliği olarak true ve Text özelliği "Ürün güncelleştirilirken bir sorun oluştu" olarak ayarlanır. Oluşan gerçek özel durumun ayrıntıları nesnenin e.Exception özelliğinde InnerException bulunur. Bu iç özel durum incelenmiştir ve belirli bir türdeyse Label'ın ExceptionDetails özelliğine Text ek, yararlı bir ileti eklenir. Son olarak, ExceptionHandled ve KeepInEditMode özelliklerinin her ikisi de olarak trueayarlanır.

Şekil 9'da ürünün adı atlandığında bu sayfanın ekran görüntüsü gösterilir; Şekil 10'da geçersiz UnitPrice bir değer (-50) girilirken eldeki sonuçlar gösterilir.

ProductName BoundField bir Değer içermelidir

Şekil 9: ProductName BoundField Bir Değer İçermelidir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Negatif BirimFiyat Değerlerine İzin Verilmiyor

Şekil 10: Negatif UnitPrice Değerlere İzin Verilmiyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)

e.ExceptionHandled özelliğinin true olarak ayarlanmasıyla, RowUpdated olay işleyicisi özel durumu işlediğini belirtmiştir. Bu nedenle, özel durum ASP.NET çalışma zamanına yayılmaz.

Uyarı

Şekil 9 ve 10'da geçersiz kullanıcı girişi nedeniyle oluşan özel durumları işlemek için düzgün bir yol gösterilmektedir. İdealde, ASP.NET sayfası sınıfın ProductsBLL yöntemini çağırmadan önce kullanıcının girişlerinin geçerli olduğunu kontrol etmeli ve böylece bu tür geçersiz girişler İş Mantığı Katmanı'na UpdateProduct hiç ulaşmamalıdır. Sonraki öğreticimizde, İş Mantığı Katmanı'na gönderilen verilerin iş kurallarına uygun olduğundan emin olmak için düzenleme ve ekleme arabirimlerine doğrulama denetimleri eklemeyi öğreneceksiniz. Doğrulama denetimleri, yalnızca kullanıcı tarafından sağlanan veriler geçerli olana kadar yöntemin UpdateProduct çağrılmasını önlemekle kalmaz, aynı zamanda veri girişi sorunlarını tanımlamak için daha bilgilendirici bir kullanıcı deneyimi sağlar.

3. Adım: BLL-Level İstisnalarını Zarifçe Yönetme

Veri eklerken, güncelleştirirken veya silerken, Veri Erişim Katmanı verilerle ilgili bir hata karşısında bir özel durum oluşturabilir. Veritabanı çevrimdışı olabilir, gerekli bir veritabanı tablo sütununda belirtilen bir değer olmayabilir veya tablo düzeyi kısıtlaması ihlal edilmiş olabilir. İş Mantığı Katmanı, verilerle ilgili özel durumlara ek olarak, iş kurallarının ne zaman ihlal edildiğini belirtmek için özel durumları kullanabilir. Örneğin İş Mantığı Katmanı Oluşturma öğreticisinde, özgün UpdateProduct aşırı yüklemeye bir iş kuralı denetimi ekledik. Özellikle, kullanıcı bir ürünü durduruldu olarak işaretlediyse, ürünün tedarikçi tarafından sağlanan tek ürün olmamasını zorunlu kıldık. Bu koşul ihlal edildiyse, bir ApplicationException atılır.

UpdateProduct Bu öğreticide oluşturulan yük için, UnitPrice alanının özgün UnitPrice değerinin iki katını aşan yeni bir değere ayarlanmasını engelleyen bir iş kuralı ekleyelim. Bunu başarmak için, UpdateProduct aşırı yüklemesini bu denetimi gerçekleştirecek ve kural ihlal edilirse bir ApplicationException fırlatacak şekilde ayarlayın. Güncelleştirilmiş yöntem şu şekildedir:

public bool UpdateProduct(string productName, decimal? unitPrice, short? unitsInStock,
    int productID)
{
    Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
    if (products.Count == 0)
        // no matching record found, return false
        return false;
    Northwind.ProductsRow product = products[0];
    // Make sure the price has not more than doubled
    if (unitPrice != null && !product.IsUnitPriceNull())
        if (unitPrice > product.UnitPrice * 2)
          throw new ApplicationException(
            "When updating a product price," +
            " the new price cannot exceed twice the original price.");
    product.ProductName = productName;
    if (unitPrice == null) product.SetUnitPriceNull();
      else product.UnitPrice = unitPrice.Value;
    if (unitsInStock == null) product.SetUnitsInStockNull();
      else product.UnitsInStock = unitsInStock.Value;
    // Update the product record
    int rowsAffected = Adapter.Update(product);
    // Return true if precisely one row was updated, otherwise false
    return rowsAffected == 1;
}

Bu değişiklikle, mevcut fiyatın iki katından fazla olan herhangi bir fiyat güncellemesi bir ApplicationException fırlatılmasına neden olur. DAL'den alınan istisna durumu gibi, bu BLL tarafından yükseltilen ApplicationException de GridView'un RowUpdated olay işleyicisinde algılanabilir ve işlenebilir. Aslında, RowUpdated olay işleyicisinin kodu, yazıldığı şekliyle bu istisnayı doğru algılar ve ApplicationException'nin Message özellik değerini görüntüler. Şekil 11'de, kullanıcı Chai fiyatını 50,00 ABD doları olarak güncelleştirmeye çalıştığında ekran görüntüsü gösterilir ve bu da geçerli fiyatı olan 19,95 TL'nin iki katından fazladır.

İş Kuralları, Bir Ürünün Fiyatının İki Katından Daha Fazla Fiyat Artışına İzin Verme

Şekil 11: İş Kuralları, Bir Ürünün Fiyatının İki Katından Fazla Olan Fiyat Artışlarına İzin Verme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Uyarı

İdeal olarak iş mantığı kurallarımız, UpdateProduct yöntem aşırı yüklemelerinden ortak bir yönteme yeniden düzenlenecekti. Bu, okuyucu için bir alıştırma olarak bırakılır.

Özet

Ekleme, güncelleştirme ve silme işlemleri sırasında hem veri Web kontrolü hem de ObjectDataSource, gerçek işlemin öncesi ve sonrasında gerçekleşen olayları tetiklemektedir. Bu öğreticide ve önceki öğreticide gördüğümüz gibi, düzenlenebilir bir GridView ile çalışırken GridView'un RowUpdating olayı tetiklenir ve ardından ObjectDataSource'un Updating olayı gelir ve bu noktada ObjectDataSource'un temel nesnesine güncelleştirme komutu yapılır. İşlem tamamlandıktan sonra ObjectDataSource'un Updated olayı tetiklenir ve ardından GridView olayı RowUpdated gelir.

Giriş parametrelerini özelleştirmek veya işlemin sonuçlarını incelemek ve yanıtlamak için son düzey olaylar için ön düzey olaylar için olay işleyicileri oluşturabiliriz. Son düzey olay işleyicileri en yaygın olarak işlem sırasında bir özel durumun oluşup oluşmadığını algılamak için kullanılır. Bir özel durum karşısında, bu son düzey olay işleyicileri isteğe bağlı olarak özel durumu kendi başlarına işleyebilir. Bu öğreticide, kullanıcı dostu bir hata iletisi görüntüleyerek böyle bir istisnanın nasıl işleneceğini gördük.

Sonraki öğreticide, veri biçimlendirme sorunlarından kaynaklanan istisna olasılığını nasıl azaltacağımızı (örneğin, negatif UnitPrice girme) göreceğiz. Özellikle, düzenleme ve ekleme arabirimlerine doğrulama denetimleri eklemeyi inceleyeceğ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ışır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Ona adresinden mitchell@4GuysFromRolla.comulaşabilirsiniz.

Özel Teşekkürler

Bu eğitim serisi, birçok yararlı kişi tarafından incelendi. Bu öğreticinin baş gözden geçireni Liz Shulok oldu. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, mitchell@4GuysFromRolla.com'a bir mesaj bırakın.