Aracılığıyla paylaş


Visual Studio kullanarak .NET Framework uygulamalarında nesneleri veri kaynağı olarak bağlama

Not

Veri kümeleri ve ilgili sınıflar, uygulamaların veritabanıyla bağlantısı kesilirken uygulamaların bellekteki verilerle çalışmasını sağlayan 2000'lerin başlarındaki eski .NET Framework teknolojileridir. Teknolojiler özellikle kullanıcıların verileri değiştirmesine ve değişiklikleri veritabanında kalıcı hale getirebilmesine olanak tanıyan uygulamalar için kullanışlıdır. Veri kümelerinin çok başarılı bir teknoloji olduğu kanıtlanmış olsa da, yeni .NET uygulamalarının Entity Framework Core kullanmasını öneririz. Entity Framework, tablosal verilerle nesne modelleri olarak çalışmak için daha doğal bir yol sağlar ve daha basit bir programlama arabirimine sahiptir.

Visual Studio, özel nesnelerle uygulamanızda veri kaynağı olarak çalışmak için tasarım zamanı araçları sağlar. Veritabanı verilerini ui denetimlerine bağladığınız bir nesnede depolamak istediğinizde, önerilen yaklaşım sınıfı veya sınıfları oluşturmak için Entity Framework'ün kullanılmasıdır. Entity Framework, tüm ortak değişiklik izleme kodunu otomatik olarak oluşturur. Bu, DbSet nesnesinde AcceptChanges'i çağırdığınızda yerel nesnelerdeki tüm değişikliklerin otomatik olarak veritabanında kalıcı olduğu anlamına gelir. Daha fazla bilgi için bkz . Entity Framework Belgeleri.

İpucu

Bu makaledeki nesne bağlama yaklaşımları yalnızca uygulamanız zaten veri kümelerini temel aldıysa dikkate alınmalıdır. Veri kümelerini zaten biliyorsanız ve işleyecek olduğunuz veriler tablosal ve çok karmaşık veya çok büyük değilse bu yaklaşımları da kullanabilirsiniz. DataReader kullanarak verileri doğrudan nesnelere yükleme ve kullanıcı arabirimini veri bağlama olmadan el ile güncelleştirme gibi daha basit bir örnek için bkz . ADO.NET kullanarak basit bir veri uygulaması oluşturma.

Nesne gereksinimleri

Özel nesnelerin Visual Studio'daki veri tasarımı araçlarıyla çalışması için tek gereksinim, nesnenin en az bir ortak özelliğe ihtiyacı olmasıdır.

Özel nesneler genellikle bir uygulama için veri kaynağı görevi görmesi için belirli arabirimler, oluşturucular veya öznitelikler gerektirmez. Ancak, veriye bağlı denetim oluşturmak için nesneyi Veri Kaynakları penceresinden tasarım yüzeyine sürüklemek istiyorsanız ve nesne veya IListSource arabirimini uygularsaITypedList, nesnenin varsayılan bir oluşturucuya sahip olması gerekir. Aksi takdirde, Visual Studio veri kaynağı nesnesinin örneğini oluşturamaz ve öğeyi tasarım yüzeyine sürüklediğinizde bir hata görüntüler.

Özel nesneleri veri kaynağı olarak kullanma örnekleri

Veri kaynağı olarak nesnelerle çalışırken uygulama mantığınızı uygulamanın sayısız yolu olsa da, SQL veritabanları için Visual Studio tarafından oluşturulan TableAdapter nesneleri kullanılarak basitleştirilebilen birkaç standart işlem vardır. Bu sayfada TableAdapters kullanarak bu standart işlemlerin nasıl uygulanacakları açıklanmaktadır. Özel nesnelerinizi oluşturmak için bir kılavuz olarak tasarlanmamıştır. Örneğin, nesnelerinizin belirli bir uygulamasına veya uygulamanın mantığına bakılmaksızın genellikle aşağıdaki standart işlemleri gerçekleştirirsiniz:

  • Nesnelere (genellikle bir veritabanından) veri yükleme.

  • Yazılan bir nesne koleksiyonu oluşturma.

  • Bir koleksiyona nesne ekleme ve koleksiyondan nesneleri kaldırma.

  • Nesne verilerini formdaki kullanıcılara görüntüleme.

  • Nesnedeki verileri değiştirme/düzenleme.

  • Nesnelerdeki verileri veritabanına geri kaydetme.

Nesnelere veri yükleme

Bu örnekte, TableAdapters kullanarak nesnelerinize veri yüklersiniz. Varsayılan olarak, TableAdapters bir veritabanından veri getiren ve veri tablolarını dolduran iki tür yöntemle oluşturulur.

  • yöntemi, TableAdapter.Fill mevcut bir veri tablosunu döndürülen verilerle doldurur.

  • yöntemi, TableAdapter.GetData verilerle doldurulmuş yeni bir veri tablosu döndürür.

Özel nesnelerinizi verilerle yüklemenin en kolay yolu yöntemini çağırmak TableAdapter.GetData , döndürülen veri tablosundaki satır koleksiyonunda döngü yapmak ve her nesneyi her satırdaki değerlerle doldurmaktır. TableAdapter'a GetData eklenen herhangi bir sorgu için doldurulmuş veri tablosu döndüren bir yöntem oluşturabilirsiniz.

Not

Visual Studio, TableAdapter sorgularını Fill GetData varsayılan olarak adlandırır, ancak bu adları geçerli herhangi bir yöntem adıyla değiştirebilirsiniz.

Aşağıdaki örnekte, veri tablosundaki satırlar arasında döngü gerçekleştirme ve nesneyi verilerle doldurma adımları gösterilmektedir:

private void LoadCustomers()
{
    NorthwindDataSet.CustomersDataTable customerData = 
        customersTableAdapter1.GetTop5Customers();
    
    foreach (NorthwindDataSet.CustomersRow customerRow in customerData)
    {
        Customer currentCustomer = new Customer();
        currentCustomer.CustomerID = customerRow.CustomerID;
        currentCustomer.CompanyName = customerRow.CompanyName;

        if (customerRow.IsAddressNull() == false)
        {
            currentCustomer.Address = customerRow.Address;
        }

        if (customerRow.IsCityNull() == false)
        {
            currentCustomer.City = customerRow.City;
        }

        if (customerRow.IsContactNameNull() == false)
        {
            currentCustomer.ContactName = customerRow.ContactName;
        }

        if (customerRow.IsContactTitleNull() == false)
        {
            currentCustomer.ContactTitle = customerRow.ContactTitle;
        }

        if (customerRow.IsCountryNull() == false)
        {
            currentCustomer.Country = customerRow.Country;
        }

        if (customerRow.IsFaxNull() == false)
        {
            currentCustomer.Fax = customerRow.Fax;
        }

        if (customerRow.IsPhoneNull() == false)
        {
            currentCustomer.Phone = customerRow.Phone;
        }

        if (customerRow.IsPostalCodeNull() == false)
        {
            currentCustomer.PostalCode = customerRow.PostalCode;
        }

        if (customerRow.IsRegionNull() == false)
        {
            currentCustomer.Region = customerRow.Region;
        }

        LoadOrders(currentCustomer);
        customerBindingSource.Add(currentCustomer);
    }
}

Yazılan nesne koleksiyonu oluşturma

Nesneleriniz için koleksiyon sınıfları oluşturabilir veya BindingSource bileşeni tarafından otomatik olarak sağlanan yazılan koleksiyonları kullanabilirsiniz.

Nesneler için özel bir koleksiyon sınıfı oluştururken, öğesinden BindingList<T>devralmanızı öneririz. Bu genel sınıf, koleksiyonunuzu yönetmeye yönelik işlevselliğin yanı sıra Windows Forms'daki veri bağlama altyapısına bildirim gönderen olaylar oluşturma olanağı sağlar.

içindeki BindingSource otomatik olarak oluşturulan koleksiyon, türü belirtilen koleksiyonu için bir BindingList<T> kullanır. Uygulamanız ek işlevlere ihtiyaç duymazsa, koleksiyonunuzu içinde BindingSourcetutabilirsiniz. Daha fazla bilgi için sınıfının özelliğine BindingSource bakınList.

Not

Koleksiyonunuz temel uygulaması tarafından sağlanmayan BindingList<T>işlevler gerektiriyorsa, gerektiğinde sınıfına ekleyebilmek için özel bir koleksiyon oluşturmanız gerekir.

Aşağıdaki kod, kesin olarak türü belirlenmiş bir nesne koleksiyonu için sınıfın Order nasıl oluşturulacağını gösterir:

/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
    // Add any additional functionality required by your collection.
}

Koleksiyona nesne ekleme

Özel koleksiyon sınıfınızın veya yöntemini çağırarak Add bir koleksiyona BindingSourcenesneler eklersiniz.

Not

Add yöntemi, öğesinden BindingList<T>devraldığınızda özel koleksiyonunuz için otomatik olarak sağlanır.

Aşağıdaki kodda, türü belirtilen koleksiyona nesneleri ekleme gösterilmektedir BindingSource:

Customer currentCustomer = new Customer();
customerBindingSource.Add(currentCustomer);

Aşağıdaki kod, öğesinden BindingList<T>devralan türemiş bir koleksiyona nasıl nesne ekleneceğini gösterir:

Not

Bu örnekte, Orders koleksiyon nesnesinin Customer bir özelliğidir.

Order currentOrder = new Order();
currentCustomer.Orders.Add(currentOrder);

Koleksiyondan nesne kaldırma

Özel koleksiyon sınıfınızın BindingSourceveya RemoveAt yöntemini çağırarak Remove bir koleksiyondan nesneleri kaldırırsınız.

Not

Remove ve RemoveAt yöntemleri, öğesinden BindingList<T>devraldığınızda özel koleksiyonunuz için otomatik olarak sağlanır.

Aşağıdaki kod, yöntemiyle içindeki türü belirtilen koleksiyondaki BindingSource nesneleri bulma ve kaldırma işlemini RemoveAt gösterir:

int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);

Nesne verilerini kullanıcılara görüntüleme

Nesnelerdeki verileri kullanıcılara görüntülemek için, Veri Kaynağı Yapılandırma sihirbazını kullanarak bir nesne veri kaynağı oluşturun ve ardından nesnenin tamamını veya tek tek özellikleri Veri Kaynakları penceresinden formunuza sürükleyin.

Nesnelerdeki verileri değiştirme

Windows Forms denetimlerine bağlı özel nesnelerdeki verileri düzenlemek için, bağlı denetimdeki (veya doğrudan nesnenin özelliklerindeki) verileri düzenlemeniz yeterlidir. Veri bağlama mimarisi nesnedeki verileri güncelleştirir.

Uygulamanız değişikliklerin izlenmesini ve önerilen değişikliklerin özgün değerlerinde geri döndürülebilmesini gerektiriyorsa, nesne modelinizde bu işlevi uygulamanız gerekir. Veri tablolarının önerilen değişiklikleri nasıl takip ettiğiyle ilgili örnekler için bkz DataRowState. , HasChangesve GetChanges.

Nesnelerdeki verileri veritabanına geri kaydetme

Nesnenizdeki değerleri TableAdapter'ın DBDirect yöntemlerine geçirerek verileri veritabanına geri kaydedin.

Visual Studio, doğrudan veritabanına karşı yürütülebilen DBDirect yöntemleri oluşturur. Bu yöntemler DataSet veya DataTable nesneleri gerektirmez.

TableAdapter DBDirect yöntemi Açıklama
TableAdapter.Insert Veritabanına yeni kayıtlar ekleyerek tek tek sütun değerlerini yöntem parametreleri olarak geçirmenizi sağlar.
TableAdapter.Update Veritabanındaki mevcut kayıtları güncelleştirir. Update yöntemi, özgün ve yeni sütun değerlerini yöntem parametresi olarak alır. Özgün değerler özgün kaydı bulmak için kullanılır ve yeni değerler bu kaydı güncelleştirmek için kullanılır.

yöntemiTableAdapter.Update, yöntem parametreleri olarak bir , DataTable, DataRowveya dizisini DataRowalarak DataSetbir veri kümesindeki değişiklikleri veritabanına geri döndürmek için de kullanılır.
TableAdapter.Delete Yöntem parametresi olarak geçirilen özgün sütun değerlerine göre veritabanından var olan kayıtları siler.

Bir nesne koleksiyonundaki verileri kaydetmek için, nesne koleksiyonunda döngü yapın (örneğin, bir sonraki döngü kullanarak). TableAdapter'ın DBDirect yöntemlerini kullanarak her nesnenin değerlerini veritabanına gönderin.

Aşağıdaki örnekte veritabanına doğrudan yeni müşteri eklemek için DBDirect yönteminin nasıl kullanılacağı TableAdapter.Insert gösterilmektedir:

private void AddNewCustomers(Customer currentCustomer)
{
    customersTableAdapter.Insert( 
        currentCustomer.CustomerID, 
        currentCustomer.CompanyName, 
        currentCustomer.ContactName, 
        currentCustomer.ContactTitle, 
        currentCustomer.Address, 
        currentCustomer.City, 
        currentCustomer.Region, 
        currentCustomer.PostalCode, 
        currentCustomer.Country, 
        currentCustomer.Phone, 
        currentCustomer.Fax);
}