Veri ekleme, güncelleştirme ve silmeye genel bakış (C#)

Scott Mitchell tarafından

Örnek uygulamayı indirin veya PDF 'yi indirin

Bu öğreticide, bir ObjectDataSource 'un Insert (), Update () ve Delete () yöntemlerini BLL sınıflarının yöntemlerine eşlemeyi ve veri değiştirme özellikleri sağlamak için GridView, DetailsView ve FormView denetimlerini yapılandırmayı öğreneceksiniz.

Giriş

Son birkaç öğreticilerde, GridView, DetailsView ve FormView denetimlerini kullanarak verileri bir ASP.NET sayfasında görüntülemeyi inceledik. Bu denetimler yalnızca bunlara verilen verilerle çalışır. Genellikle, bu denetimler, ObjectDataSource gibi bir veri kaynağı denetimi kullanılarak verilere erişir. ObjectDataSource 'un ASP.NET sayfası ve temel alınan veriler arasında bir ara sunucu olarak nasıl davranması gerektiğini gördük. Bir GridView 'un verileri görüntülemesi gerektiğinde, onun ObjectDataSource 'un Select() yöntemini çağırır. Bu, uygun veri erişim katmanının (DAL) TableAdapter ' de bir yöntemi çağıran ve bu da Northwind veritabanına SELECT bir sorgu gönderen Iş mantığı katmanımızda (BLL) bir yöntemi çağıran Iş mantığı katmanımız bir yöntemi çağırır.

İlk öğreticimizdedal içinde TableAdapters oluşturduğumuzda, Visual Studio temel veritabanı tablosundan veri ekleme, güncelleştirme ve silme yöntemlerini otomatik olarak eklemiştir. Ayrıca, bir Iş mantığı katmanı oluşturmak için bu VERI değişikliği dal yöntemlerine çağrılan BLL 'de Yöntemler tasarlıyoruz.

Select() metoduna ek olarak, ObjectDataSource da Insert(), Update()ve Delete() yöntemlerine sahiptir. Select() yöntemi gibi, bu üç yöntem temel bir nesne içindeki yöntemlerle eşleştirilebilir. Veri eklemek, güncelleştirmek veya silmek için yapılandırıldığında, GridView, DetailsView ve FormView denetimleri, temel alınan verileri değiştirmek için bir kullanıcı arabirimi sağlar. Bu Kullanıcı arabirimi, ObjectDataSource 'un temel nesnenin ilişkili yöntemlerini çağıran Insert(), Update()ve Delete() yöntemlerini çağırır (bkz. Şekil 1).

ObjectDataSource 'un Insert (), Update () ve Delete () yöntemleri, BLL 'e bir proxy olarak görev yapar

Şekil 1: ObjectDataSource 'un Insert(), Update()ve Delete() yöntemleri BLL 'e bir proxy olarak görev yapar (tam boyutlu görüntüyü görüntülemek için tıklatın)

Bu öğreticide, ObjectDataSource 'un Insert(), Update()ve Delete() yöntemlerini BLL içindeki sınıf yöntemlerine nasıl eşleneceğini ve veri değiştirme özellikleri sağlamak için GridView, DetailsView ve FormView denetimlerini nasıl yapılandıracağınızı öğreneceksiniz.

Adım 1: ekleme, güncelleştirme ve silme öğreticileri Web sayfalarını oluşturma

Verileri ekleme, güncelleştirme ve silme konusunda keşfetmeye başlamadan önce, Web sitesi projemizdeki Bu öğretici ve sonraki birkaç işlem için gereken ASP.NET sayfalarını oluşturmak için biraz zaman atalım. EditInsertDeleteadlı yeni bir klasör ekleyerek başlayın. Ardından, aşağıdaki ASP.NET sayfalarını bu klasöre ekleyerek her bir sayfayı Site.master ana sayfasıyla ilişkilendirdiğinizden emin olun:

  • Default.aspx
  • Basics.aspx
  • DataModificationEvents.aspx
  • ErrorHandling.aspx
  • UIValidation.aspx
  • CustomizedUI.aspx
  • OptimisticConcurrency.aspx
  • ConfirmationOnDelete.aspx
  • UserLevelAccess.aspx

Veri değişikliği ile Ilgili öğreticiler için ASP.NET sayfaları ekleyin

Şekil 2: veri değişikliği Ile ilgili öğreticiler Için ASP.NET sayfaları ekleme

Diğer klasörlerde olduğu gibi, EditInsertDelete klasöründeki Default.aspx öğreticileri bölümündeki öğreticilerin listelecektir. SectionLevelTutorialListing.ascx Kullanıcı denetiminin bu işlevselliği sağladığını hatırlayın. Bu nedenle, bu kullanıcı denetimini Çözüm Gezgini sayfanın Tasarım görünümü üzerine sürükleyerek Default.aspx ekleyin.

SectionLevelTutorialListing. ascx Kullanıcı denetimini default. aspx öğesine eklemek

Şekil 3: Default.aspx SectionLevelTutorialListing.ascx Kullanıcı denetimini ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)

Son olarak, sayfaları Web.sitemap dosyasına girdi olarak ekleyin. Özel olarak, özelleştirilmiş biçimlendirme <siteMapNode>sonra aşağıdaki biçimlendirmeyi ekleyin:

<siteMapNode title="Editing, Inserting, and Deleting"
    url="~/EditInsertDelete/Default.aspx"
    description="Samples of Reports that Provide Editing, Inserting,
                  and Deleting Capabilities">
    <siteMapNode url="~/EditInsertDelete/Basics.aspx"
        title="Basics"
        description="Examines the basics of data modification with the
                      GridView, DetailsView, and FormView controls." />
    <siteMapNode url="~/EditInsertDelete/DataModificationEvents.aspx"
        title="Data Modification Events"
        description="Explores the events raised by the ObjectDataSource
                      pertinent to data modification." />
    <siteMapNode url="~/EditInsertDelete/ErrorHandling.aspx"
        title="Error Handling"
        description="Learn how to gracefully handle exceptions raised
                      during the data modification workflow." />
    <siteMapNode url="~/EditInsertDelete/UIValidation.aspx"
        title="Adding Data Entry Validation"
        description="Help prevent data entry errors by providing validation." />
    <siteMapNode url="~/EditInsertDelete/CustomizedUI.aspx"
        title="Customize the User Interface"
        description="Customize the editing and inserting user interfaces." />
    <siteMapNode url="~/EditInsertDelete/OptimisticConcurrency.aspx"
        title="Optimistic Concurrency"
        description="Learn how to help prevent simultaneous users from
                      overwritting one another s changes." />
    <siteMapNode url="~/EditInsertDelete/ConfirmationOnDelete.aspx"
        title="Confirm On Delete"
        description="Prompt a user for confirmation when deleting a record." />
    <siteMapNode url="~/EditInsertDelete/UserLevelAccess.aspx"
        title="Limit Capabilities Based on User"
        description="Learn how to limit the data modification functionality
                      based on the user role or permissions." />
</siteMapNode>

Web.sitemapgüncelleştirildikten sonra Öğreticiler Web sitesini bir tarayıcıdan görüntülemek için bir dakikanızı ayırın. Sol taraftaki menü artık öğreticilerin düzenlenmesine, eklemeye ve silinmesine yönelik öğeler içerir.

Site Haritası artık öğreticilerin düzenlenmesine, eklemeye ve silinmesine yönelik girdiler Içerir

Şekil 4: site haritası artık öğreticilerin düzenlenmesine, eklemeye ve silinmesine yönelik girdiler içerir

2. Adım: ObjectDataSource denetimini ekleme ve yapılandırma

GridView, DetailsView ve FormView her biri veri değiştirme özelliklerine ve düzenine göre farklılık gösterdiğinden her birini ayrı ayrı inceleyelim. Ancak, her bir denetimin kendi ObjectDataSource 'u kullanmasını sağlamak yerine, yalnızca üç denetim örneklerinin paylaştığı tek bir ObjectDataSource oluşturalım.

Basics.aspx sayfasını açın, araç kutusu ' ndan tasarımcı üzerine bir ObjectDataSource sürükleyin ve akıllı etiketinden veri kaynağını Yapılandır bağlantısına tıklayın. ProductsBLL, ekleme, ekleme ve silme yöntemleri sağlayan tek BLL sınıfı olduğundan, bu sınıfı kullanmak için ObjectDataSource 'u yapılandırın.

, ObjectDataSource 'ı ProductsBLL sınıfını kullanacak şekilde yapılandırma

Şekil 5: ObjectDataSource 'ı ProductsBLL sınıfını kullanacak şekilde yapılandırma (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sonraki ekranda, uygun sekmeyi seçerek ve açılan listeden yöntemi seçerek ProductsBLL sınıfının hangi yöntemlerin Select(), Insert(), Update()ve Delete() eşleştirildiği belirtilebilir. Şekil 6 ' da şu anda tanıdık gelmelidir, ObjectDataSource 'un Select() yöntemini ProductsBLL sınıfının GetProducts() yöntemiyle eşler. Insert(), Update()ve Delete() yöntemleri en üstteki listeden uygun sekme seçilerek yapılandırılabilir.

, ObjectDataSource 'un tüm ürünleri döndürmesini

Şekil 6: ObjectDataSource 'un tüm ürünleri döndürmesini sağlamak (tam boyutlu görüntüyü görüntülemek için tıklayın)

Şekil 7, 8 ve 9, ObjectDataSource 'un GÜNCELLEŞTIRME, ekleme ve SILME sekmelerini gösterir. Insert(), Update()ve Delete() yöntemlerinin sırasıyla ProductsBLL sınıfının UpdateProduct, AddProductve DeleteProduct yöntemlerini çağırması için bu sekmeleri yapılandırın.

ObjectDataSource 'un Update () yöntemini ProductBLL sınıfının UpdateProduct yöntemiyle eşleyin

Şekil 7: ObjectDataSource 'un Update() yöntemini ProductBLL sınıfının UpdateProduct yöntemiyle eşleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)

ObjectDataSource 'un Insert () metodunu ProductBLL sınıfının AddProduct yöntemine eşleyin

Şekil 8: ObjectDataSource 'un Insert() yöntemini ProductBLL sınıfının Add Product yöntemine eşleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)

ObjectDataSource 'un Delete () yöntemini ProductBLL sınıfının DeleteProduct yöntemine eşleyin

Şekil 9: ObjectDataSource 'un Delete() yöntemini ProductBLL sınıfının DeleteProduct yöntemiyle eşleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)

GÜNCELLEŞTIRME, ekleme ve SILME sekmelerindeki açılan listelerin bu yöntemlerin zaten seçili olduğunu fark etmiş olabilirsiniz. Bu, ProductsBLLyöntemlerini süsleden DataObjectMethodAttribute kullanımı için teşekkürler. Örneğin, DeleteProduct yöntemi aşağıdaki imzaya sahiptir:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Delete, true)]
public bool DeleteProduct(int productID)
{
    ...
}

DataObjectMethodAttribute özniteliği, her yöntemin, seçme, ekleme, güncelleştirme veya silme için olup olmadığını ve varsayılan değer olup olmadığını gösterir. BLL sınıflarınızı oluştururken bu öznitelikleri atlarsanız, GÜNCELLEŞTIRME, ekleme ve SILME sekmelerinden yöntemleri el ile seçmeniz gerekir.

Uygun ProductsBLL yöntemlerinin ObjectDataSource 'un Insert(), Update()ve Delete() yöntemlerine eşlendiğinden emin olduktan sonra, Sihirbazı tamamladıktan sonra son ' a tıklayın.

ObjectDataSource 'un Işaretlemesini İnceleme

ObjectDataSource 'u Sihirbazı aracılığıyla yapılandırdıktan sonra, oluşturulan bildirim işaretlemesini incelemek için kaynak görünümüne gidin. <asp:ObjectDataSource> etiketi, temel alınan nesneyi ve çağrılacak yöntemleri belirtir. Ayrıca, ProductsBLL sınıfının AddProduct, UpdateProductve DeleteProduct yöntemlerine yönelik giriş parametreleriyle eşlenen DeleteParameters, UpdateParametersve InsertParameters vardır:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    DeleteMethod="DeleteProduct" InsertMethod="AddProduct"
    OldValuesParameterFormatString="original_{0}" SelectMethod="GetProducts"
    TypeName="ProductsBLL" UpdateMethod="UpdateProduct">
    <DeleteParameters>
        <asp:Parameter Name="productID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="productName" Type="String" />
        <asp:Parameter Name="supplierID" Type="Int32" />
        <asp:Parameter Name="categoryID" Type="Int32" />
        <asp:Parameter Name="quantityPerUnit" Type="String" />
        <asp:Parameter Name="unitPrice" Type="Decimal" />
        <asp:Parameter Name="unitsInStock" Type="Int16" />
        <asp:Parameter Name="unitsOnOrder" Type="Int16" />
        <asp:Parameter Name="reorderLevel" Type="Int16" />
        <asp:Parameter Name="discontinued" Type="Boolean" />
        <asp:Parameter Name="productID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="productName" Type="String" />
        <asp:Parameter Name="supplierID" Type="Int32" />
        <asp:Parameter Name="categoryID" Type="Int32" />
        <asp:Parameter Name="quantityPerUnit" Type="String" />
        <asp:Parameter Name="unitPrice" Type="Decimal" />
        <asp:Parameter Name="unitsInStock" Type="Int16" />
        <asp:Parameter Name="unitsOnOrder" Type="Int16" />
        <asp:Parameter Name="reorderLevel" Type="Int16" />
        <asp:Parameter Name="discontinued" Type="Boolean" />
    </InsertParameters>
</asp:ObjectDataSource>

ObjectDataSource, ObjectDataSource, bir giriş parametresi bekleyen bir Select yöntemi çağırmak üzere yapılandırıldığında (örneğin, GetProductsByCategoryID(categoryID)) bir SelectParameter liste gibi, ilişkili yöntemlerin her bir giriş parametresi için bir parametre içerir. Kısa süre içinde, bu DeleteParameters, UpdateParametersve InsertParameters değerleri, ObjectDataSource 'un Insert(), Update()veya Delete() yöntemi çağırmadan önce GridView, DetailsView ve FormView tarafından otomatik olarak ayarlanır. Bu değerler, gelecekteki öğreticide tartıştığımız için gerektiğinde programlama yoluyla da ayarlanabilir.

ObjectDataSource 'a yapılandırmak için Sihirbazı kullanmanın bir yan etkisi, Visual Studio 'Nun OldValuesParameterFormatString özelliğini original_{0}olarak ayarlamadır. Bu özellik değeri, düzenlenmekte olan verilerin orijinal değerlerini dahil etmek için kullanılır ve iki senaryoda faydalıdır:

  • Bir kayıt düzenlenirken, kullanıcılar birincil anahtar değerini değiştirebilir. Bu durumda, özgün birincil anahtar değerine sahip kaydın bulunabilmesi ve değerinin uygun şekilde güncelleştirilmesini sağlamak için hem yeni birincil anahtar değeri hem de orijinal birincil anahtar değeri sağlanmalıdır.
  • İyimser eşzamanlılık kullanılırken. İyimser eşzamanlılık, iki eşzamanlı kullanıcının başka bir değişiklik yaptığı değişikliğin üzerine yazılmayacağı ve gelecekteki öğreticinin konusu olduğundan emin olmak için kullanılan bir tekniktir.

OldValuesParameterFormatString özelliği, orijinal değerler için temeldeki nesnenin Update ve DELETE metotlarındaki giriş parametrelerinin adını gösterir. İyimser eşzamanlılık keşfettiğimiz zaman bu özelliği ve amacını daha ayrıntılı olarak ele alacağız. Ancak, BLL 'nin yöntemleri özgün değerleri beklemediği ve bu nedenle bu özelliği kaldırdığımızdan önemli olduğundan, şimdi kullanıma sundum. OldValuesParameterFormatString özelliği varsayılandan farklı bir değere ({0}) ayrıldığınızda, ObjectDataSource bir veri Web denetimi, hem UpdateParameters hem de DeleteParameters belirtilen ve özgün değer parametrelerine geçiş yapmayı deneyeceğinden, ObjectDataSource 'un Update() veya Delete() yöntemlerini çağırmayı denediğinde bir hataya neden olur.

Bu juncture 'de böyle bir kaymayın yoksa, bu özelliği ve yardımcı programını gelecekteki bir öğreticide inceleyeceğiz. Şimdilik, bu özellik bildirimini bildirime dayalı sözdiziminden kaldırmak ya da değeri varsayılan değer ({0}) olarak ayarlamanız yeterlidir.

Note

Tasarım görünümü Özellikler penceresi OldValuesParameterFormatString özellik değerini yalnızca bir temizlerseniz, özellik bildirime dayalı sözdiziminde kalır, ancak boş bir dizeye ayarlanır. Bu, ne yazık ki yukarıda açıklanan soruna neden olur. Bu nedenle, özelliği bildirime dayalı sözdiziminden tamamen kaldırın ya da Özellikler penceresi, değeri varsayılan olan {0}olarak ayarlayın.

3. Adım: veri Web denetimi ekleme ve veri değişikliği için yapılandırma

ObjectDataSource, sayfaya eklendikten ve yapılandırıldıktan sonra verileri göstermek için sayfaya veri Web denetimleri eklemeye hazırız ve son kullanıcının bunu değiştirmesi için bir yol sağlar. Bu veri Web denetimleri, veri değiştirme özellikleri ve yapılandırmasında farklılık gösterdiği için GridView, DetailsView ve FormView 'e ayrı olarak bakacağız.

Bu makalenin geri kalanında göreceğiniz gibi, GridView, DetailsView ve FormView denetimleri aracılığıyla basit düzenlemeler, ekleme ve silme desteğinin eklenmesi, birkaç onay kutusunun denetlenmesi açısından oldukça basittir. Gerçek dünyada, bu tür işlevselliği yalnızca noktadan daha fazlasını sağlayan çok sayıda alt tzellikleri ve uç durumu vardır ve tıklamaları yeterlidir. Ancak, bu öğretici yalnızca uyarlaması veri değiştirme özelliklerine odaklanır. Gelecekteki öğreticiler, gerçek dünyada bir ayarda ortaya çıkabilecek kaygıları inceler.

GridView 'dan verileri silme

Araç kutusundan Tasarımcı üzerine bir GridView sürükleyip başlayın. Ardından, GridView 'un akıllı etiketindeki aşağı açılan listeden seçerek ObjectDataSource 'u GridView 'a bağlayın. Bu noktada, GridView 'un bildirim temelli biçimlendirme şu şekilde olacaktır:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ObjectDataSource1">
    <Columns>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False"
            ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName"
            SortExpression="ProductName" />
        <asp:BoundField DataField="SupplierID" HeaderText="SupplierID"
           SortExpression="SupplierID" />
        <asp:BoundField DataField="CategoryID" HeaderText="CategoryID"
           SortExpression="CategoryID" />
        <asp:BoundField DataField="QuantityPerUnit"
           HeaderText="QuantityPerUnit"
           SortExpression="QuantityPerUnit" />
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
           SortExpression="UnitPrice" />
        <asp:BoundField DataField="UnitsInStock"
           HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
        <asp:BoundField DataField="UnitsOnOrder"
           HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" />
        <asp:BoundField DataField="ReorderLevel"
           HeaderText="ReorderLevel" SortExpression="ReorderLevel" />
        <asp:CheckBoxField DataField="Discontinued"
           HeaderText="Discontinued" SortExpression="Discontinued" />
        <asp:BoundField DataField="CategoryName"
           HeaderText="CategoryName" ReadOnly="True"
            SortExpression="CategoryName" />
        <asp:BoundField DataField="SupplierName"
            HeaderText="SupplierName" ReadOnly="True"
            SortExpression="SupplierName" />
    </Columns>
</asp:GridView>

GridView 'un akıllı etiketiyle ObjectDataSource 'a bağlanması iki avantaja sahiptir:

  • ObjectDataSource tarafından döndürülen alanların her biri için BoundFields ve CheckBoxFields otomatik olarak oluşturulur. Üstelik, BoundField ve CheckBoxField 'ın özellikleri, temel alınan alanın meta verilerine göre ayarlanır. Örneğin, ProductID, CategoryNameve SupplierName alanları ProductsDataTable salt okuma olarak işaretlenir ve bu nedenle, düzenlenirken güncelleştirilemez. Buna uyum sağlamak için, bu BoundFields ' ReadOnly özellikleri trueolarak ayarlanır.
  • DataKeyNames özelliği , temel alınan nesnenin birincil anahtar alanları ' na atanır. Bu özellik, verileri düzenlenmek veya silmek için GridView kullanılırken gereklidir. Bu özellik, her kaydı benzersiz bir şekilde tanımlayan alanı (veya alan kümesini) gösterir. DataKeyNames özelliği hakkında daha fazla bilgi için, ayrıntı ayrıntısı görünümü öğreticisiyle seçilebilir bir ana GridView kullanarak ana/ayrıntı bölümüne bakın.

GridView, Özellikler penceresi veya bildirime dayalı sözdizimi aracılığıyla ObjectDataSource 'a bağlanabilir ancak bunu yapmak uygun BoundField ve DataKeyNames işaretlemesini el ile eklemenizi gerektirir.

GridView denetimi, satır düzeyinde Düzenle ve silme için yerleşik destek sağlar. Bir GridView 'yi silmeyi desteklemek için yapılandırmak, silme düğmelerinin bir sütununu ekler. Son Kullanıcı belirli bir satır için Sil düğmesine tıkladığında, bir geri gönderme ve GridView aşağıdaki adımları gerçekleştirir:

  1. ObjectDataSource 'un DeleteParameters değerleri atandı
  2. ObjectDataSource 'un Delete() yöntemi çağrıldı, belirtilen kayıt siliniyor
  3. GridView, Select() yöntemini çağırarak kendisini ObjectDataSource 'a yeniden bağlar

DeleteParameters atanan değerler, silme düğmesine tıklanmış olan satırın DataKeyNames alan değerlerdir. Bu nedenle, bir GridView 'ın DataKeyNames özelliğinin doğru şekilde ayarlanması çok önemlidir. Eksik ise DeleteParameters adım 1 ' de bir null değere atanır. Bu işlem, adım 2 ' de silinen kayıtlarla sonuçlanmaz.

Note

DataKeys koleksiyonu, GridView s denetim durumunda depolanır, yani GridView s görünüm durumu devre dışı bırakılsa bile DataKeys değerlerinin geri gönderme üzerinden anımsanacak anlamına gelir. Ancak, görüntüleme durumunun, Düzenle veya silmeyi destekleyen GridViews için etkin kalacağı (varsayılan davranış) çok önemlidir. GridView s EnableViewState özelliğini falseolarak ayarlarsanız, düzenleme ve silme davranışı tek bir kullanıcı için ince çalışır, ancak verileri silen eşzamanlı kullanıcılar varsa, bu eş zamanlı kullanıcıların, istemediğiniz kayıtları yanlışlıkla silmesine veya düzenlemesine olanak sağlar. Daha fazla bilgi için bkz. blog Girişmi, Uyarı: ASP.NET 2,0 GridViews/DetailsView/formviews ile, görüntüleme ve/veya silme ve görüntüleme durumunu devre dışı bırakma desteği ve/veya silmeyi destekleyen ve

Aynı uyarı, Ayrıntılar görünümleri ve form görünümleri için de geçerlidir.

GridView 'a silme özellikleri eklemek için akıllı etiketine gitmeniz ve silmeyi etkinleştir onay kutusunu işaretlemeniz yeterlidir.

Silmeyi etkinleştir onay kutusunu işaretleyin

Şekil 10: silmeyi etkinleştir onay kutusunu işaretleyin

Akıllı etiketteki silmeyi etkinleştir onay kutusunun işaretlenmesi GridView 'a bir CommandField ekler. CommandField, GridView 'da aşağıdaki görevlerden birini veya birkaçını gerçekleştirmeye yönelik düğmeler içeren bir sütun oluşturur: bir kayıt seçme, bir kaydı düzenlemeyle ve bir kaydı silme. Ayrıntı ayrıntısı görünümü öğreticisiyle seçilebilir bir Master GridView kullanarak ana/ayrıntı içindeki kayıtları seçerken daha önce CommandField ' i bir eylemde gördünüz.

CommandField, CommandField 'da hangi düğme serilerinin görüntülendiğini belirten bir dizi ShowXButton özelliği içerir. Silmeyi etkinleştir onay kutusunu işaretleyerek ShowDeleteButton özelliği true GridView 'un Columns koleksiyonuna eklenmiş olan bir CommandField.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ObjectDataSource1">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" />
        ... BoundFields removed for brevity ...
    </Columns>
</asp:GridView>

Bu noktada, GridView 'a silme desteği eklemekle karşılaşıyoruz! Şekil 11 ' de gösterildiği gibi, bu sayfayı bir tarayıcı aracılığıyla ziyaret ettiğinizde silme düğmelerinin bir sütunu bulunur.

CommandField, silme düğmelerinin bir sütununu ekler

Şekil 11: CommandField, silme düğmelerinin bir sütununu ekler (tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu öğreticiyi baştan sona oluşturuyorsanız, bu sayfayı test ederken Sil düğmesine tıkladığınızda bir özel durum oluşturulur. Bu özel durumların neden ortaya çıkarıldığına ve bunları nasıl düzelteceğinizi öğrenmek için okumaya devam edin.

Note

Bu öğreticiye eşlik eden indirmeyi kullanarak takip ediyorsanız, bu sorunlar için zaten bir hesaba katılmış demektir. Ancak, oluşabilecek sorunları ve uygun geçici çözümleri belirlemenize yardımcı olmak için aşağıda listelenen ayrıntıları okumanız önerilir.

Bir ürünü silmeye çalışırken, iletisi "ObjectDataSource ' ObjectDataSource1 ' şuna benzer bir özel durum alırsınız : ProductID, orijinal_ProductID,", OldValuesParameterFormatString özelliğini ObjectDataSource 'tan kaldırmayı unutmuş olabilirsiniz. Bu özellik, "". OldValuesParameterFormatString özelliği belirtildiğinde, ObjectDataSource productID ve original_ProductID giriş parametrelerini DeleteProduct yöntemine geçirmeye çalışır. Ancak DeleteProduct, bu nedenle özel durum yalnızca tek bir giriş parametresini kabul eder. OldValuesParameterFormatString özelliğini kaldırma (veya {0}olarak ayarlama), ObjectDataSource 'un özgün giriş parametresini geçirmeye kalkışmasını söyler.

OldValuesParameterFormatString özelliğinin temizlendiğinden emin olun

Şekil 12: OldValuesParameterFormatString özelliğinin temizlendiğinden emin olun (tam boyutlu görüntüyü görüntülemek için tıklayın)

OldValuesParameterFormatString özelliğini kaldırmış olsanız bile, şu iletiyle bir ürün silmeye çalışırken bir özel durum alacaksınız: "Delete IFADESINI başvuru kısıtlaması ile çakıştı ' FK_Order_ayrıntılar_Ürünler ' ." Northwind veritabanı, Order Details ve Products tablo arasında bir yabancı anahtar kısıtlaması içerir, yani Order Details tablosunda bu için bir veya daha fazla kayıt varsa, bir ürünün sistemden silinemeyeceği anlamına gelir. Northwind veritabanındaki her üründe Order Detailsen az bir kayıt olduğundan, ürünün ilişkili sipariş ayrıntıları kayıtlarını ilk silene kadar hiçbir ürünü silemiyoruz.

Yabancı anahtar kısıtlaması ürünlerin silinmesini yasaklar

Şekil 13: yabancı anahtar kısıtlaması ürünlerin silinmesini yasaklar (tam boyutlu görüntüyü görüntülemek için tıklayın)

Öğreticimiz için Order Details tablosundan yalnızca tüm kayıtları silelim. Gerçek dünyada bir uygulamada şunlardan birini yapmanız gerekir:

  • Sipariş ayrıntıları bilgilerini yönetmek için başka bir ekrana sahip
  • DeleteProduct yöntemini, belirtilen ürünün sıra ayrıntılarını silme mantığını içerecek şekilde artırmak
  • TableAdapter tarafından belirtilen ürünün sıra ayrıntılarının silinmesini dahil etmek için kullanılan SQL sorgusunu değiştirin

Yabancı anahtar kısıtlamasını aşmak için Order Details tablodaki tüm kayıtları silelim. Visual Studio 'daki Sunucu Gezgini gidin, NORTHWND.MDF düğümüne sağ tıklayın ve yeni sorgu ' yı seçin. Ardından, sorgu penceresinde şu SQL ifadesini çalıştırın: DELETE FROM [Order Details]

Tüm kayıtları Sipariş Ayrıntıları tablosundan silmek

Şekil 14: Order Details tablosundan tüm kayıtları silme (tam boyutlu görüntüyü görüntülemek için tıklayın)

Order Details tablosu kapatıldıktan sonra Sil düğmesine tıklandığında ürün hatasız olarak silinir. Sil düğmesine tıkladığınızda ürün silinmez, GridView 'ın DataKeyNames özelliğinin birincil anahtar alanı (ProductID) olarak ayarlandığından emin olun.

Note

Sil düğmesine tıkladığınızda geri gönderme işlemi başarılı olur ve kayıt silinir. Bu, yanlışlıkla yanlış satırın silme düğmesine tıklamasından dolayı tehlikeli olabilir. Gelecekte bir öğreticide, bir kayıt silinirken istemci tarafı onayı ekleme hakkında bilgi edineceksiniz.

GridView ile verileri düzenlemeyle

GridView denetimi, silme işlemiyle birlikte yerleşik satır düzeyinde yapılandırma desteği de sağlar. Düzenlemeyi desteklemek için GridView yapılandırmak, düzenleme düğmelerinin bir sütununu ekler. Son kullanıcının perspektifinden, bir satırın düzenleme düğmesine tıklamak, bu satırın düzenlenebilir hale gelmesine neden olur. Bu, hücreleri var olan değerleri içeren metin kutularına açıp Düzenle ve Iptal düğmeleri ile değiştirin. İstenen değişiklikler yapıldıktan sonra, Son Kullanıcı değişiklikleri yürütmek için Güncelleştir düğmesine tıklayabilir veya Iptal düğmesine tıklayarak bunları atabilirsiniz. Her iki durumda da Güncelleştir ' e tıkladıktan sonra GridView ' ı Iptal ettikten sonra, önceden düzenlenen durumuna geri döner.

Sayfa geliştiricisi olarak bakıldığında, Son Kullanıcı belirli bir satır için Düzenle düğmesine tıkladığında, geri gönderme ve GridView aşağıdaki adımları gerçekleştirir:

  1. GridView 'ın EditItemIndex özelliği, Düzenle düğmesine tıklandığı satırın dizinine atanır
  2. GridView, Select() yöntemini çağırarak kendisini ObjectDataSource 'a yeniden bağlar
  3. EditItemIndex eşleşen satır dizini "düzenleme modunda" işlenir. Bu modda, Düzenle düğmesi güncelleştir ve Iptal düğmeleri ve ReadOnly özellikleri false olan BoundFields (varsayılan), Text özellikleri veri alanlarının değerlerine atanmış olan TextBox Web denetimleri olarak işlenir.

Bu noktada, biçimlendirme tarayıcıya döndürülür ve son kullanıcının satır verilerinde herhangi bir değişiklik yapmasına izin verilir. Kullanıcı Update düğmesine tıkladığında bir geri gönderme gerçekleşir ve GridView aşağıdaki adımları gerçekleştirir:

  1. ObjectDataSource 'un UpdateParameters değerlere, son kullanıcı tarafından, GridView 'un düzenlenme arabirimine girilen değerler atanır
  2. ObjectDataSource 'un Update() yöntemi çağrıldı, belirtilen kayıt güncelleştiriliyor
  3. GridView, Select() yöntemini çağırarak kendisini ObjectDataSource 'a yeniden bağlar

Adım 1 ' deki UpdateParameters atanan birincil anahtar değerleri DataKeyNames özelliğinde belirtilen değerlerden gelir, ancak birincil olmayan anahtar değerleri düzenlenen satır için metin kutusu Web denetimlerinde bulunan metinden gelir. Silme sırasında, GridView 'un DataKeyNames özelliğinin doğru şekilde ayarlanması çok önemlidir. Eksik ise UpdateParameters birincil anahtar değerine, 1. adımda bir null değeri atanır. Bu, sırasıyla adım 2 ' de güncelleştirilmiş kayıtlar oluşmasına neden olmaz.

Düzen işlevselliği, GridView 'un akıllı etiketindeki Düzenle etkinleştir onay kutusunu işaretleyerek etkinleştirilebilir.

Düzenle etkinleştir onay kutusunu işaretleyin

Şekil 15: Düzenle etkinleştir onay kutusunu işaretleyin

Düzenle etkinleştir onay kutusunun işaretlenmesi bir CommandField (gerekliyse) ekler ve ShowEditButton özelliğini trueolarak ayarlar. Daha önce gördüğümüz gibi, CommandField, CommandField 'da hangi düğme serilerinin görüntülendiğini belirten bir dizi ShowXButton özellik içerir. Düzenlemenizi etkinleştir onay kutusunun işaretlenmesi, ShowEditButton özelliğini var olan CommandField öğesine ekler:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ObjectDataSource1">
    <Columns>
        <asp:CommandField ShowDeleteButton="True"
            ShowEditButton="True" />
        ... BoundFields removed for brevity ...
    </Columns>
</asp:GridView>

Bu, ilkel düzenlemesi desteği eklemek için gereklidir. Figure16 gösterdiği gibi, düzen arabirimi her bir BoundField 'ın ReadOnly özelliği false olarak ayarlanmış olan (varsayılan) bir metin kutusu olarak işlenir. Bu, diğer tablolara yönelik anahtarlar olan CategoryID ve SupplierIDgibi alanları içerir.

Chai s Düzenle düğmesine tıklamak satırı düzenleme modunda görüntüler

Şekil 16: Chai s Düzenle düğmesine tıkladığınızda satır düzenleme modunda görüntülenir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Kullanıcıların yabancı anahtar değerlerini doğrudan düzenlemesini isteme ek olarak, düzenleme arabiriminin arabirimi aşağıdaki yollarla desteklenmez:

  • Kullanıcı, veritabanında var olmayan bir CategoryID veya SupplierID girerse, UPDATE yabancı anahtar kısıtlamasını ihlal eder ve bir özel durum ortaya çıkar.
  • Düzen arabirimi herhangi bir doğrulama içermez. Gerekli bir değer (ProductNamegibi) sağlamazsanız veya sayısal bir değerin beklenildiği bir dize değeri girebilirsiniz (örneğin, "çok fazla!" gibi) UnitPrice metin kutusuna) bir özel durum oluşturulur. Gelecekteki bir öğreticide, düzenlenen Kullanıcı arabirimine doğrulama denetimleri eklemeyi inceleyeceksiniz.
  • Şu anda, salt okuma olmayan Tüm ürün alanları GridView 'a eklenmelidir. GridView 'dan bir alanı kaldırdığımızda, verileri güncelleştirirken UnitPricesöyleyin, GridView, veritabanı kaydının UnitPrice bir NULL değere değiştirecek UnitPrice UpdateParameters değerini ayarlayamaz. Benzer şekilde, ProductNamegibi gerekli bir alan GridView 'tan kaldırılırsa, güncelleştirme aynı "ProductName ' sütunu, yukarıda bahsedilen null değerlere izinvermiyor" olarak da başarısız olur.
  • Düzen arabirimi biçimlendirmesi, istenen kadar çok bırakır. UnitPrice dört ondalık noktayla gösterilir. İdeal olarak CategoryID ve SupplierID değerleri, sistemdeki kategorileri ve tedarikçileri listeleyen DropDownLists içerir.

Bunlar şimdilik ile canlı olarak sunduğumuz tüm eksiketler, ancak gelecekteki öğreticilerde değinilecek.

DetailsView ile veri ekleme, düzenlememe ve silme

Önceki öğreticilerde gördüğünüze göre, DetailsView denetimi aynı anda bir kayıt görüntüler ve GridView gibi, görüntülenmekte olan kaydın düzenlenmesine ve silinmesine izin verir. Son kullanıcının her ikisi de bir DetailsView 'dan öğe düzenlemeyle ve silinirken ve ASP.NET taraftan iş akışının bulunduğu deneyimle aynıdır. DetailsView, GridView 'tan farklı olduğunda, yerleşik ekleme desteği de sağlar.

GridView 'un veri değiştirme yeteneklerini göstermek için, var olan GridView 'un üzerindeki Basics.aspx sayfasına bir DetailsView ekleyerek başlayın ve DetailsView 'un akıllı etiketi aracılığıyla mevcut ObjectDataSource 'a bağlayın. Ardından, DetailsView 'un Height ve Width özelliklerini temizleyin ve akıllı etiketteki disk belleğini etkinleştir seçeneğini işaretleyin. Düzenle, ekleme ve silme desteğini etkinleştirmek için, akıllı etiketteki düzenlemenizi etkinleştir, ekleme ve onay kutularını silmeyi etkinleştir ' i kontrol edin.

DetailsView 'u Düzenle, ekleniyor ve silmeyi destekleyecek şekilde yapılandırma

Şekil 17: DetailsView 'u Düzenle, ekleniyor ve silmeyi destekleyecek şekilde yapılandırma

GridView 'da olduğu gibi, Düzenle, ekleme veya silme desteği eklemek, aşağıdaki bildirime dayalı sözdizimi gösterdiği gibi, DetailsView öğesine bir CommandField ekler:

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
    DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" AllowPaging="True">
    <Fields>
        <asp:BoundField DataField="ProductID"
            HeaderText="ProductID" InsertVisible="False"
            ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName"
            HeaderText="ProductName" SortExpression="ProductName" />
        <asp:BoundField DataField="SupplierID" HeaderText="SupplierID"
            SortExpression="SupplierID" />
        <asp:BoundField DataField="CategoryID" HeaderText="CategoryID"
            SortExpression="CategoryID" />
        <asp:BoundField DataField="QuantityPerUnit"
            HeaderText="QuantityPerUnit"
            SortExpression="QuantityPerUnit" />
        <asp:BoundField DataField="UnitPrice"
            HeaderText="UnitPrice" SortExpression="UnitPrice" />
        <asp:BoundField DataField="UnitsInStock"
            HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
        <asp:BoundField DataField="UnitsOnOrder"
            HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" />
        <asp:BoundField DataField="ReorderLevel"
            HeaderText="ReorderLevel" SortExpression="ReorderLevel" />
        <asp:CheckBoxField DataField="Discontinued"
            HeaderText="Discontinued" SortExpression="Discontinued" />
        <asp:BoundField DataField="CategoryName"
            HeaderText="CategoryName" ReadOnly="True"
            SortExpression="CategoryName" />
        <asp:BoundField DataField="SupplierName"
            HeaderText="SupplierName" ReadOnly="True"
            SortExpression="SupplierName" />
        <asp:CommandField ShowDeleteButton="True"
            ShowEditButton="True" ShowInsertButton="True" />
    </Fields>
</asp:DetailsView>

DetailsView için, CommandField 'ın varsayılan olarak Columns koleksiyonunun sonunda göründüğünü unutmayın. DetailsView 'un alanları satır olarak işlendiği için, CommandField, DetailsView 'un alt kısmındaki INSERT, Edit ve DELETE düğmeleriyle bir satır olarak görünür.

DetailsView 'u Düzenle, ekleniyor ve silmeyi destekleyecek şekilde yapılandırma

Şekil 18: DetailsView 'ı düzenlemesini, eklemeyi ve silmeyi destekleyecek şekilde yapılandırma (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sil düğmesine tıklamak GridView ile aynı olay dizisini başlatır: geri gönderme; ardından DetailsView, DataKeyNames değerlerine göre ObjectDataSource 'un DeleteParameters yerleştirerek ve, ObjectDataSource 'un, gerçekten de ürünü veritabanından kaldıran Delete() yöntemini çağırır. DetailsView 'da düzenlemenin yanı sıra GridView ile aynı şekilde de bir daha kullanılır.

Ekleme için son kullanıcıya, tıklandığı zaman "ekleme modunda" DetailsView 'u oluşturduğu yeni bir düğme sunulur. "INSERT Mode" ile yeni düğme INSERT ve Cancel düğmeleriyle ve yalnızca InsertVisible özelliği true (varsayılan) olarak ayarlanmış olan BoundFields ile değiştirilmiştir. ProductIDgibi otomatik artış alanları olarak tanımlanan bu veri alanları, DetailsView 'un, akıllı etiket aracılığıyla veri kaynağına bağlanırken false olarak ayarlanmış.

Bir veri kaynağını akıllı etiket aracılığıyla bir DetailsView 'a bağlarken, Visual Studio InsertVisible özelliğini yalnızca otomatik artış alanları için false olarak ayarlar. CategoryName ve SupplierNamegibi salt okuma alanları, InsertVisible özelliği açıkça falseolarak ayarlanmadığı takdirde "ekleme modu" Kullanıcı arabiriminde görüntülenir. Bu iki alanın InsertVisible özelliklerini, DetailsView 'un bildirime dayalı sözdizimi aracılığıyla veya akıllı etiketteki alanları Düzenle bağlantısı aracılığıyla falseolarak ayarlamak için bir dakikanızı ayırın. Şekil 19 InsertVisible özelliklerini false olarak ayarlamayı gösterir alanları Düzenle bağlantısına tıklayın.

Northwind Traders artık Acme Tea sunuyor

Şekil 19: Northwind Traders artık Acme Tea sunuyor (tam boyutlu görüntüyü görüntülemek için tıklatın)

InsertVisible özelliklerini ayarladıktan sonra, bir tarayıcıda Basics.aspx sayfasını görüntüleyin ve yeni düğmesine tıklayın. Şekil 20 ' de ürün hatlarımıza yeni bir beiçecek, Acme Tea eklendiğinde DetailsView gösterilmektedir.

Northwind Traders artık Acme Tea sunuyor

Şekil 20: Northwind Traders artık Acme Tea sunuyor (tam boyutlu görüntüyü görüntülemek için tıklatın)

Acme Tea 'nın ayrıntılarını girdikten ve Ekle düğmesine tıkladıktan sonra, Products veritabanı tablosuna bir geri gönderme ve yeni kayıt eklenir. Bu DetailsView, ürünleri veritabanı tablosunda bulundukları sırayla listelediğinden, yeni ürünü görmek için son ürünün sayfasına ihtiyacımız olmalıdır.

Acme Tea için ayrıntıları

Şekil 21: Acme Tea ayrıntıları (tam boyutlu görüntüyü görüntülemek için tıklayın)

Note

DetailsView 'un CurrentMode özelliği , görüntülenmekte olan arabirimi gösterir ve şu değerlerden biri olabilir: Edit, Insertveya ReadOnly. DefaultMode özelliği , DetailsView 'un bir düzenleme veya ekleme işlemi tamamlandıktan sonra geri döndürdüğü modu gösterir ve kalıcı olarak düzenleme veya ekleme modunda olan bir DetailsView görüntülemek için faydalıdır.

Ve sonra, DetailsView 'un ekleme ve düzenlenme özellikleri GridView ile aynı kısıtlamalardan daha da etkilenebilir: Kullanıcı, bir TextBox aracılığıyla var olan CategoryID ve SupplierID değerlerini girmelidir; arabirimin herhangi bir doğrulama mantığı yoktur; NULL değerlere izin verilmeyen veya veritabanı düzeyinde belirtilen varsayılan değere sahip olmayan tüm ürün alanları ekleme arabirimine eklenmelidir ve bu şekilde devam etmelidir.

Daha sonra GridView 'un Düzenle arabirimini genişletmenin ve geliştirmesinin İncelenme teknikleri, DetailsView denetiminin düzenlemesi ve ekleme arabirimlerini de uygulanabilir.

Daha esnek bir veri değişikliği Kullanıcı arabirimi için FormView kullanma

FormView, veri ekleme, düzenlemenin ve silmenin yerleşik desteğini sunar, ancak alanlar yerine şablonlar kullandığından, verileri sağlamak için GridView ve DetailsView denetimleri tarafından kullanılan bir yer yoktur. değişiklik arabirimi. Bunun yerine, bu arabirim yeni bir öğe eklerken veya var olan bir öğeyi yeni, Düzenle, Sil, Ekle, Güncelleştir ve Iptal düğmeleriyle birlikte düzenleyerek Kullanıcı girişinin toplanması için Web denetimlerini uygun şablonlara el ile eklenmelidir. Neyse ki, Visual Studio, bir veri kaynağına FormView 'u akıllı etiketindeki açılan listeden bağladığınızda gerekli arabirimi otomatik olarak oluşturur.

Bu teknikleri anlamak için, Basics.aspx sayfasına bir FormView ekleyerek başlayın ve ardından FormView 'un akıllı etiketiyle onu zaten oluşturulan ObjectDataSource 'a bağlayın. Bu, yeni, düzenleme, silme, ekleme, güncelleştirme ve Iptal düğmeleri için kullanıcının giriş ve düğme Web denetimlerini toplamak üzere metin kutusu Web denetimleriyle birlikte düzenlenecek bir EditItemTemplate, InsertItemTemplateve ItemTemplate oluşturur. Ayrıca, FormView 'un DataKeyNames özelliği, ObjectDataSource tarafından döndürülen nesnenin birincil anahtar alanı (ProductID) olarak ayarlanır. Son olarak, FormView 'un akıllı etiketindeki disk belleğini etkinleştir seçeneğini işaretleyin.

Aşağıda, FormView 'un ObjectDataSource 'a bağlandıktan sonra FormView 'un ItemTemplate için bildirim temelli biçimlendirme gösterilmektedir. Varsayılan olarak, her Boolean değer alanı (Discontinued) devre dışı CheckBox Web denetiminin Checked özelliğine bağlandığında, Boole olmayan her bir değer ürün alanı bir etiket Web denetiminin Text özelliğine bağlanır. Yeni, Düzenle ve Sil düğmelerinin tıklandığı sırada belirli FormView davranışlarını tetiklemesi için, CommandName değerlerinin sırasıyla New, Editve Deleteolarak ayarlanması zorunludur.

<asp:FormView ID="FormView1" runat="server" DataKeyNames="ProductID"
    DataSourceID="ObjectDataSource1" AllowPaging="True">
    <EditItemTemplate>
        ...
    </EditItemTemplate>
    <InsertItemTemplate>
        ...
    </InsertItemTemplate>
    <ItemTemplate>
        ProductID:
        <asp:Label ID="ProductIDLabel" runat="server"
            Text='<%# Eval("ProductID") %>'></asp:Label><br />
        ProductName:
        <asp:Label ID="ProductNameLabel" runat="server"
            Text='<%# Bind("ProductName") %>'>
        </asp:Label><br />
        SupplierID:
        <asp:Label ID="SupplierIDLabel" runat="server"
            Text='<%# Bind("SupplierID") %>'>
        </asp:Label><br />
        CategoryID:
        <asp:Label ID="CategoryIDLabel" runat="server"
            Text='<%# Bind("CategoryID") %>'>
        </asp:Label><br />
        QuantityPerUnit:
        <asp:Label ID="QuantityPerUnitLabel" runat="server"
            Text='<%# Bind("QuantityPerUnit") %>'>
        </asp:Label><br />
        UnitPrice:
        <asp:Label ID="UnitPriceLabel" runat="server"
            Text='<%# Bind("UnitPrice") %>'></asp:Label><br />
        UnitsInStock:
        <asp:Label ID="UnitsInStockLabel" runat="server"
            Text='<%# Bind("UnitsInStock") %>'>
        </asp:Label><br />
        UnitsOnOrder:
        <asp:Label ID="UnitsOnOrderLabel" runat="server"
            Text='<%# Bind("UnitsOnOrder") %>'>
        </asp:Label><br />
        ReorderLevel:
        <asp:Label ID="ReorderLevelLabel" runat="server"
            Text='<%# Bind("ReorderLevel") %>'>
        </asp:Label><br />
        Discontinued:
        <asp:CheckBox ID="DiscontinuedCheckBox" runat="server"
            Checked='<%# Bind("Discontinued") %>'
            Enabled="false" /><br />
        CategoryName:
        <asp:Label ID="CategoryNameLabel" runat="server"
            Text='<%# Bind("CategoryName") %>'>
        </asp:Label><br />
        SupplierName:
        <asp:Label ID="SupplierNameLabel" runat="server"
            Text='<%# Bind("SupplierName") %>'>
        </asp:Label><br />
        <asp:LinkButton ID="EditButton" runat="server"
            CausesValidation="False" CommandName="Edit"
            Text="Edit">
        </asp:LinkButton>
        <asp:LinkButton ID="DeleteButton" runat="server"
            CausesValidation="False" CommandName="Delete"
            Text="Delete">
        </asp:LinkButton>
        <asp:LinkButton ID="NewButton" runat="server"
            CausesValidation="False" CommandName="New"
            Text="New">
        </asp:LinkButton>
    </ItemTemplate>
</asp:FormView>

Şekil 22, bir tarayıcıdan görüntülendiklerinde FormView 'un ItemTemplate gösterir. Her ürün alanı, en alttaki yeni, Düzenle ve Sil düğmeleriyle listelenir.

, her ürün alanını yeni, Düzenle ve Sil düğmeleriyle birlikte listeler.

Şekil 22: bu FormView ItemTemplate, her ürün alanını yeni, düzenleme ve silme düğmeleriyle birlikte listeler (tam boyutlu görüntüyü görüntülemek için tıklatın)

GridView ve DetailsView gibi, CommandName özelliği Delete olarak ayarlanmış olan Delete düğmesine veya herhangi bir Button, LinkButton veya ImageButton öğesine tıkladığınızda geri göndermeye neden olur, ObjectDataSource 'un DeleteParameters, FormView 'un DataKeyNames değerine göre doldurur ve ObjectDataSource 'un Delete() yöntemini çağırır.

Düzenle düğmesine bir geri gönderme tıklandığında ve veriler, düzenleme arabirimini işlemeden sorumlu olan EditItemTemplateyeniden bağlanır. Bu arabirim, Update ve Cancel düğmeleriyle birlikte verileri düzenlemenin Web denetimlerini içerir. Visual Studio tarafından oluşturulan varsayılan EditItemTemplate, herhangi bir otomatik artış alanı (ProductID) için bir etiket, her Boole olmayan değer alanı için bir TextBox ve her bir Boole değeri alanı için bir onay kutusu içerir. Bu davranış, GridView ve DetailsView denetimlerinde otomatik olarak oluşturulan BoundFields 'e çok benzer.

Note

FormView 'un EditItemTemplate otomatik nesli ile ilgili küçük bir sorun, CategoryName ve SupplierNamegibi salt okunan alanlar için TextBox Web denetimleri işleyişleridir. Bu kısa süre içinde nasıl hesaba başlayacağız.

EditItemTemplate metin kutusu denetimleri, Text özelliğinin iki yönlü veri bağlamayıkullanarak karşılık gelen veri alanı değerine bağlanmasını sağlar. <%# Bind("dataField") %>tarafından belirtilen iki yönlü veri bağlama, verileri şablona bağlarken ve kayıt ekleme veya düzenlemenin, ObjectDataSource 'un parametrelerini doldururken veri bağlamayı gerçekleştirir. Diğer bir deyişle, Kullanıcı ItemTemplateDüzenle düğmesine tıkladığında Bind() yöntemi belirtilen veri alanı değerini döndürür. Kullanıcı değişikliklerini yaptıktan ve sonra Güncelleştir ' e tıkladıktan sonra, Bind() kullanılarak belirtilen veri alanlarına karşılık gelen değerler, ObjectDataSource 'un UpdateParametersuygulanır. Alternatif olarak, <%# Eval("dataField") %>belirtilen tek yönlü veri bağlama yalnızca verileri şablona bağlarken veri alanı değerlerini alır ve Kullanıcı tarafından girilen değerleri geri gönderme sırasında veri kaynağının parametrelerine döndürmez.

Aşağıdaki bildirim temelli biçimlendirme FormView 'un EditItemTemplategösterir. Bind() yönteminin, burada veri bağlama sözdiziminde kullanıldığını ve Update ve Cancel düğme web denetimlerinin CommandName özelliklerinin uygun şekilde ayarlandığını unutmayın.

<asp:FormView ID="FormView1" runat="server" DataKeyNames="ProductID"
    DataSourceID="ObjectDataSource1" AllowPaging="True">
    <EditItemTemplate>
        ProductID:
        <asp:Label ID="ProductIDLabel1" runat="server"
          Text="<%# Eval("ProductID") %>"></asp:Label><br />
        ProductName:
        <asp:TextBox ID="ProductNameTextBox" runat="server"
          Text="<%# Bind("ProductName") %>">
        </asp:TextBox><br />
        SupplierID:
        <asp:TextBox ID="SupplierIDTextBox" runat="server"
          Text="<%# Bind("SupplierID") %>">
        </asp:TextBox><br />
        CategoryID:
        <asp:TextBox ID="CategoryIDTextBox" runat="server"
          Text="<%# Bind("CategoryID") %>">
        </asp:TextBox><br />
        QuantityPerUnit:
        <asp:TextBox ID="QuantityPerUnitTextBox" runat="server"
           Text="<%# Bind("QuantityPerUnit") %>">
        </asp:TextBox><br />
        UnitPrice:
        <asp:TextBox ID="UnitPriceTextBox" runat="server"
           Text="<%# Bind("UnitPrice") %>">
        </asp:TextBox><br />
        UnitsInStock:
        <asp:TextBox ID="UnitsInStockTextBox" runat="server"
           Text="<%# Bind("UnitsInStock") %>">
        </asp:TextBox><br />
        UnitsOnOrder:
        <asp:TextBox ID="UnitsOnOrderTextBox" runat="server"
           Text="<%# Bind("UnitsOnOrder") %>">
        </asp:TextBox><br />
        ReorderLevel:
        <asp:TextBox ID="ReorderLevelTextBox" runat="server"
           Text="<%# Bind("ReorderLevel") %>">
        </asp:TextBox><br />
        Discontinued:
        <asp:CheckBox ID="DiscontinuedCheckBox" runat="server"
            Checked="<%# Bind("Discontinued") %>" /><br />
        CategoryName:
        <asp:TextBox ID="CategoryNameTextBox" runat="server"
             Text="<%# Bind("CategoryName") %>">
        </asp:TextBox><br />
        SupplierName:
        <asp:TextBox ID="SupplierNameTextBox" runat="server"
             Text="<%# Bind("SupplierName") %>">
        </asp:TextBox><br />
        <asp:LinkButton ID="UpdateButton" runat="server"
            CausesValidation="True" CommandName="Update"
            Text="Update">
        </asp:LinkButton>
        <asp:LinkButton ID="UpdateCancelButton" runat="server"
            CausesValidation="False" CommandName="Cancel"
            Text="Cancel">
        </asp:LinkButton>
    </EditItemTemplate>
    <InsertItemTemplate>
        ...
    </InsertItemTemplate>
    <ItemTemplate>
        ...
    </ItemTemplate>
</asp:FormView>

EditItemTemplate, bu noktada, kullanmaya çalışmamız durumunda bir özel durumun oluşturulmasına neden olur. Sorun, CategoryName ve SupplierName alanlarının EditItemTemplatemetin kutusu Web denetimleri olarak işlendiğine yönelik bir sorundur. Bu metin kutularını etiketlere değiştirmemiz veya onları tamamen kaldırmanız gerekir. Onları yalnızca EditItemTemplatetamamen silelim.

Şekil 23 ' te, bir tarayıcıda düzenlenecek düzen düğmesi tıklandıktan sonra bir tarayıcı görüntülenir. ItemTemplate yalnızca EditItemTemplatekaldırdığımız için, gösterilen SupplierName ve CategoryName alanlarının artık mevcut olmadığını unutmayın. Güncelleştirme düğmesine tıklandığında, FormView, GridView ve DetailsView denetimleriyle aynı adım sırası üzerinden ilerler.

Varsayılan olarak, EditItemTemplate her düzenlenebilir Ürün alanını bir TextBox veya onay kutusu olarak gösterir

Şekil 23: varsayılan olarak EditItemTemplate her düzenlenebilir Ürün alanını bir metin kutusu veya onay kutusu olarak gösterir (tam boyutlu görüntüyü görüntülemek için tıklatın)

INSERT düğmesine tıklandığında FormView, geri gönderme ItemTemplate. Ancak, yeni bir kayıt eklendikçe FormView 'a hiçbir veri bağlanmadı. InsertItemTemplate arabirimi, INSERT ve Cancel düğmeleriyle birlikte yeni bir kayıt eklemek için Web denetimlerini içerir. Visual Studio tarafından oluşturulan varsayılan InsertItemTemplate, her Boolean değer alanı için bir TextBox ve otomatik olarak oluşturulan EditItemTemplatearabirimine benzer şekilde her bir Boolean değer alanı için bir onay kutusu içerir. TextBox denetimleri, kendi Text özelliğine sahiptir ve iki yönlü veri bağlamayı kullanarak karşılık gelen veri alanı değerine bağlanır.

Aşağıdaki bildirim temelli biçimlendirme FormView 'un InsertItemTemplategösterir. Bind() yönteminin, burada veri bağlama sözdiziminde kullanıldığını ve INSERT ve Cancel düğme web denetimlerinin CommandName özelliklerinin uygun şekilde ayarlandığını unutmayın.

<asp:FormView ID="FormView1" runat="server" DataKeyNames="ProductID"
    DataSourceID="ObjectDataSource1" AllowPaging="True">
    <EditItemTemplate>
        ...
    </EditItemTemplate>
    <InsertItemTemplate>
        ProductName:
        <asp:TextBox ID="ProductNameTextBox" runat="server"
           Text="<%# Bind("ProductName") %>">
        </asp:TextBox><br />
        SupplierID:
        <asp:TextBox ID="SupplierIDTextBox" runat="server"
           Text="<%# Bind("SupplierID") %>">
        </asp:TextBox><br />
        CategoryID:
        <asp:TextBox ID="CategoryIDTextBox" runat="server"
           Text="<%# Bind("CategoryID") %>">
        </asp:TextBox><br />
        QuantityPerUnit:
        <asp:TextBox ID="QuantityPerUnitTextBox" runat="server"
           Text="<%# Bind("QuantityPerUnit") %>">
        </asp:TextBox><br />
        UnitPrice:
        <asp:TextBox ID="UnitPriceTextBox" runat="server"
           Text="<%# Bind("UnitPrice") %>">
        </asp:TextBox><br />
        UnitsInStock:
        <asp:TextBox ID="UnitsInStockTextBox" runat="server"
           Text="<%# Bind("UnitsInStock") %>">
        </asp:TextBox><br />
        UnitsOnOrder:
        <asp:TextBox ID="UnitsOnOrderTextBox" runat="server"
           Text="<%# Bind("UnitsOnOrder") %>">
        </asp:TextBox><br />
        ReorderLevel:
        <asp:TextBox ID="ReorderLevelTextBox" runat="server"
           Text="<%# Bind("ReorderLevel") %>">
        </asp:TextBox><br />
        Discontinued:
        <asp:CheckBox ID="DiscontinuedCheckBox" runat="server"
           Checked="<%# Bind("Discontinued") %>" /><br />
        CategoryName:
        <asp:TextBox ID="CategoryNameTextBox" runat="server"
            Text="<%# Bind("CategoryName") %>">
        </asp:TextBox><br />
        SupplierName:
        <asp:TextBox ID="SupplierNameTextBox" runat="server"
           Text="<%# Bind("SupplierName") %>">
        </asp:TextBox><br />
        <asp:LinkButton ID="InsertButton" runat="server"
            CausesValidation="True" CommandName="Insert"
            Text="Insert">
        </asp:LinkButton>
        <asp:LinkButton ID="InsertCancelButton" runat="server"
            CausesValidation="False" CommandName="Cancel"
            Text="Cancel">
        </asp:LinkButton>
    </InsertItemTemplate>
    <ItemTemplate>
        ...
    </ItemTemplate>
</asp:FormView>

FormView 'un InsertItemTemplateotomatik olarak oluşturulmasını içeren bir alt ttidir. Özellikle, metin kutusu Web denetimleri, CategoryName ve SupplierNamegibi salt okunan alanlar için de oluşturulur. EditItemTemplategibi, bu metin kutularını InsertItemTemplatekaldırdık.

Şekil 24 ' te yeni bir ürün eklenirken bir tarayıcıda FormView gösterilmektedir. ItemTemplate gösterilen SupplierName ve CategoryName alanlarının artık kaldırıldığımızda mevcut olmadığını unutmayın. Ekle düğmesine tıklandığında, FormView, Products tabloya yeni bir kayıt ekleyerek DetailsView denetimiyle aynı adımlar dizisi üzerinden ilerler. Şekil 25 ' te, Acme Coffee ürünün ayrıntıları eklendikten sonra FormView 'da gösterilir.

InsertItemTemplate , FormView 'un ekleme arabirimini belirler

Şekil 24: InsertItemTemplate FormView 'un ekleme arabirimini (tam boyutlu görüntüyü görüntülemek Için tıklayın) belirler

Yeni ürünün ayrıntıları , Acme Coffee, FormView içinde görüntülenir

Şekil 25: yeni ürünün "Acme Coffee" ayrıntıları FormView 'da görüntülenir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Bir salt okunurdur, düzenledikten ve arabirimleri üç ayrı şablona ekleyerek, FormView bu arabirimler üzerinde DetailsView ve GridView 'dan daha fazla denetim sağlar.

Note

DetailsView gibi, FormView 'un CurrentMode özelliği, görüntülenmekte olan arabirimi ve DefaultMode özelliği, FormView 'un bir düzenleme veya ekleme işlemi tamamlandıktan sonra geri döndürdüğü modu belirtir.

Özet

Bu öğreticide GridView, DetailsView ve FormView kullanarak veri ekleme, düzenlemenin ve silmenin temellerini inceliyoruz. Bu denetimlerin üçü de, veri Web denetimleri ve ObjectDataSource sayesinde ASP.NET sayfasında tek bir kod satırı yazmadan kullanılabilecek bazı yerleşik veri değiştirme özellikleri sağlar. Ancak, basit nokta ve tıklama teknikleri bir oldukça büyük ve Naïve veri değişikliği Kullanıcı arabirimini işler. Doğrulama sağlamak, programlı değerler eklemek, özel durumları düzgün bir şekilde işlemek, Kullanıcı arabirimini özelleştirmek ve bu şekilde devam etmek için, sonraki birkaç öğreticiyle ele alınacaktır.

Programlamanın kutlu olsun!

Yazar hakkında

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister. mitchell@4GuysFromRolla.comadresinden erişilebilir . ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.