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:
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.
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öntemi TableAdapter.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);
}