Aracılığıyla paylaş


Veri bağlamaya genel bakış (Windows Forms .NET)

Windows Forms'da yalnızca geleneksel veri kaynaklarına değil, veri içeren neredeyse tüm yapılara da bağlanabilirsiniz. Çalışma zamanında hesapladığınız, bir dosyadan okuduğunuz veya diğer denetimlerin değerlerinden türetdiğiniz bir değer dizisine bağlanabilirsiniz.

Ayrıca, herhangi bir denetimin herhangi bir özelliğini veri kaynağına bağlayabilirsiniz. Geleneksel veri bağlamada genellikle görüntüleme özelliğini (örneğin, bir TextBox denetimin Text özelliği) veri kaynağına bağlarsınız. .NET ile bağlama aracılığıyla diğer özellikleri ayarlama seçeneğiniz de vardır. Bağlamayı kullanarak aşağıdaki görevleri gerçekleştirebilirsiniz:

  • Görüntü denetiminin grafiğini ayarlama.

  • Bir veya daha fazla denetimin arka plan rengini ayarlama.

  • Denetimlerin boyutunu ayarlama.

Temelde, veri bağlama, bir formdaki herhangi bir denetimin çalışma zamanı erişilebilir özelliğini ayarlamanın otomatik bir yoludur.

ADO.NET, uygulamanızın ve üzerinde çalıştığınız verilerin bağlama gereksinimlerine uygun birçok farklı veri yapısı oluşturmanıza olanak tanır. Windows Forms'da veri sağlayan veya kullanan kendi sınıflarınızı oluşturmak isteyebilirsiniz. Bu nesneler farklı işlevsellik ve karmaşıklık düzeyleri sunabilir. Temel veri bağlamadan tasarım zamanı desteği sağlamaya, hata denetimine, değişiklik bildirimine ve hatta verilerde yapılan değişikliklerin yapılandırılmış geri alınmasına yönelik destek sağlamaya kadar.

Veri bağlama arabirimlerinin tüketicileri

Aşağıdaki bölümlerde iki arabirim nesnesi grubu açıklanmaktadır. İlk arabirim grubu, veri kaynağı yazarları tarafından veri kaynaklarına uygulanır. Windows Forms denetimleri veya bileşenleri gibi veri kaynağı tüketicileri bu arabirimleri uygular. İkinci arabirim grubu, bileşen yazarları tarafından kullanılacak şekilde tasarlanmıştır. Bileşen yazarları, Windows Forms veri bağlama altyapısı tarafından kullanılacak veri bağlamayı destekleyen bir bileşen oluştururken bu arabirimleri kullanır. Veri bağlamayı etkinleştirmek için formunuzla ilişkili sınıflar içinde bu arabirimleri uygulayabilirsiniz. Her durum, verilerle etkileşime olanak tanıyan bir arabirim uygulayan bir sınıf sunar. Visual Studio hızlı uygulama geliştirme (RAD) veri tasarımı deneyimi araçları bu işlevden zaten yararlanır.

Veri kaynağı yazarları tarafından uygulamaya yönelik arabirimler

Windows Forms denetimleri aşağıdaki arabirimleri uygular:

  • IList Arabirim

    Arabirimi uygulayan IList bir Arraysınıf , ArrayListveya CollectionBaseolabilir. Bunlar, türdeki Object öğelerin dizine alınan listeleridir ve dizinin ilk öğesi türü belirlediğinden listelerin homojen türler içermesi gerekir. IList yalnızca çalışma zamanında bağlama için kullanılabilir.

    Dekont

    Windows Forms ile bağlama için iş nesnelerinin listesini oluşturmak istiyorsanız, kullanmayı BindingList<T>düşünmelisiniz. , BindingList iki yönlü Windows Forms veri bağlaması için gereken birincil arabirimleri uygulayan genişletilebilir bir sınıftır.

  • IBindingList Arabirim

    arabirimini IBindingList uygulayan bir sınıf, çok daha yüksek düzeyde veri bağlama işlevi sağlar. Bu uygulama size temel sıralama özellikleri ve değişiklik bildirimi sunar. Her ikisi de liste öğeleri değiştiğinde ve listenin kendisi değiştiğinde yararlıdır. Aynı verilere bağlı birden çok denetim olmasını planlıyorsanız değişiklik bildirimi önemlidir. Denetimlerden birinde diğer ilişkili denetimlere yaymak için veri değişiklikleri yapmanıza yardımcı olur.

    Dekont

    Değişiklik bildirimi, arabirimi için IBindingList özelliği aracılığıyla SupportsChangeNotification etkinleştirilir. Bu özellik, olduğunda true, listenin değiştiğini veya listedeki bir öğenin değiştiğini belirten bir olay tetikler ListChanged .

    Değişiklik türü parametresinin ListChangedTypeListChangedEventArgs özelliği tarafından açıklanmıştır. Bu nedenle, veri modeli her güncelleştirildiğinde, aynı veri kaynağına bağlı diğer denetimler gibi tüm bağımlı görünümler de güncelleştirilir. Ancak, listenin içinde yer alan nesnelerin, listenin olayı tetikleyebilmesi için ne zaman değiştiklerini listeye bildirmesi ListChanged gerekir.

    Dekont

    , BindingList<T> arabiriminin IBindingList genel bir uygulamasını sağlar.

  • IBindingListView Arabirim

    arabirimini IBindingListView uygulayan bir sınıf, filtreleme ve gelişmiş sıralama işlevlerinin yanı sıra uygulamasının IBindingListtüm işlevlerini sağlar. Bu uygulama, dize tabanlı filtreleme ve özellik tanımlayıcısı yön çiftleri ile çok sütunlu sıralama sunar.

  • IEditableObject Arabirim

    Arabirimini uygulayan bir sınıf, nesnede IEditableObject yapılan değişikliklerin ne zaman kalıcı hale getirildiğini denetlemesine olanak tanır. Bu uygulama, nesnede BeginEdityapılan değişiklikleri geri almanızı sağlayan , EndEditve CancelEdit yöntemlerini destekler. Aşağıda, , EndEditve CancelEdit yöntemlerinin işleyişinin BeginEditve verilerde yapılan değişikliklerin olası bir geri alınmasına olanak tanımak için birbirleriyle nasıl çalıştıklarının kısa bir açıklaması yer almakta:

    • yöntemi, BeginEdit bir nesne üzerinde düzenlemenin başladığını gösterir. Bu arabirimi uygulayan bir nesnenin yöntem çağrısından sonra herhangi bir güncelleştirmeyi BeginEdit , yöntem çağrılırsa güncelleştirmelerin atılacağı şekilde depolaması CancelEdit gerekir. Windows Forms'u veri bağlamada, tek bir düzenleme işlemi kapsamında birden çok kez çağrı BeginEdit yapabilirsiniz (örneğin, BeginEdit, BeginEdit, EndEdit). uygulamaları IEditableObject önceden çağrılıp çağrılmadığını BeginEdit izlemeli ve sonraki çağrıları yoksaymalıdır BeginEdit. Bu yöntem birden çok kez çağrılabildiğinden, sonraki çağrıların yıkıcı olmaması önemlidir. Sonraki BeginEdit çağrılar, yapılan güncelleştirmeleri yok edebilir veya ilk BeginEdit çağrıda kaydedilen verileri değiştiremez.

    • yöntemi EndEdit , nesne şu anda düzenleme modundaysa, temel alınan nesneye çağrıldığından bu yana BeginEdit yapılan tüm değişiklikleri iletir.

    • yöntemi, CancelEdit nesnede yapılan değişiklikleri atar.

    , EndEditve yöntemlerinin BeginEditnasıl çalıştığı hakkında daha fazla bilgi için bkz. Verileri veritabanına geri CancelEdit kaydetme.

    Veri işlevselliğinin bu işlemsel ifadesi denetim tarafından DataGridView kullanılır.

  • ICancelAddNew Arabirim

    Arabirimini uygulayan ICancelAddNew bir sınıf genellikle arabirimi uygular IBindingList ve yöntemiyle AddNew veri kaynağına yapılan bir eklemeyi geri almanızı sağlar. Veri kaynağınız arabirimi uyguluyorsa IBindingList , arabirimi de uygulaması ICancelAddNew gerekir.

  • IDataErrorInfo Arabirim

    Arabirimini IDataErrorInfo uygulayan bir sınıf, nesnelerin ilişkili denetimlere özel hata bilgileri sunmasına olanak tanır:

    • Error özelliği genel hata iletisi metni (örneğin, "Bir hata oluştu") döndürür.

    • Item[] özelliği, sütundan belirli bir hata iletisi içeren bir dize döndürür (örneğin, "Sütundaki State değer geçersiz").

  • IEnumerable Arabirim

    Arabirimi uygulayan IEnumerable bir sınıf genellikle ASP.NET tarafından kullanılır. Bu arabirim için Windows Forms desteği yalnızca bileşen aracılığıyla BindingSource kullanılabilir.

    Dekont

    Bileşen, BindingSource bağlama amacıyla tüm IEnumerable öğeleri ayrı bir listeye kopyalar.

  • ITypedList Arabirim

    Arabirimini uygulayan ITypedList bir koleksiyon sınıfı, ilişkili denetime sunulan sırayı ve özellik kümesini denetleme özelliği sağlar.

    Dekont

    yöntemini uyguladığınızda GetItemProperties ve PropertyDescriptor dizi null değilse, dizideki son girdi, başka bir öğe listesi olan list özelliğini açıklayan özellik tanımlayıcısı olur.

  • ICustomTypeDescriptor Arabirim

    Arabirimini uygulayan ICustomTypeDescriptor bir sınıf kendisi hakkında dinamik bilgiler sağlar. Bu arabirim, ITypedList listeler yerine nesneler için kullanılır. Bu arabirim, tarafından DataRowView temel alınan satırların şemasını yansıtmak için kullanılır. basit bir uygulaması ICustomTypeDescriptor sınıfı tarafından CustomTypeDescriptor sağlanır.

    Dekont

    uygulayan ICustomTypeDescriptortürlere tasarım zamanı bağlamasını desteklemek için türün form üzerinde bir örnek olarak da uygulanması IComponent ve mevcut olması gerekir.

  • IListSource Arabirim

    Arabirimini IListSource uygulayan bir sınıf, liste olmayan nesneler üzerinde liste tabanlı bağlamayı etkinleştirir. GetList yöntemiIListSource, öğesinden devralmayan bir nesneden bağlanabilir liste döndürmek IListiçin kullanılır.IListSource sınıfı tarafından DataSet kullanılır.

  • IRaiseItemChangedEvents Arabirim

    Arabirimini uygulayan IRaiseItemChangedEvents bir sınıf, arabirimini de uygulayan IBindingList bağlanabilir bir listedir. Bu arabirim, türünüzün kendi özelliği aracılığıyla RaisesItemChangedEvents tür ItemChanged olaylarını tetiklediğini ListChanged belirtmek için kullanılır.

    Dekont

    Veri kaynağınız daha önce açıklanan olay dönüştürmesini listelemek için özelliğini sağlıyorsa ve bileşenle BindingSource etkileşimdeyse bunu uygulamanız IRaiseItemChangedEvents gerekir. Aksi takdirde, BindingSource daha yavaş performansa neden olan olay dönüştürmeyi listelemek için özelliği de gerçekleştirir.

  • ISupportInitialize Arabirim

    Arabirimi uygulayan ISupportInitialize bir bileşen, özellikleri ayarlamak ve ortak bağımlı özellikleri başlatmak için toplu iyileştirmelerden yararlanır. ISupportInitialize iki yöntem içerir:

    • BeginInit nesne başlatmanın başlatıldığını gösterir.

    • EndInit nesne başlatma işleminin tamamlandığını gösterir.

  • ISupportInitializeNotification Arabirim

    Arabirimi uygulayan ISupportInitializeNotification bir bileşen de arabirimi uygular ISupportInitialize . Bu arabirim, başlatmanın tamamlandığını diğer ISupportInitialize bileşenlere bildirmenizi sağlar. Arabirim ISupportInitializeNotification iki üye içerir:

    • IsInitialized , bileşenin başlatılıp başlatılmadığını belirten bir boolean değer döndürür.

    • Initialized çağrıldığında EndInit gerçekleşir.

  • INotifyPropertyChanged Arabirim

    Bu arabirimi uygulayan bir sınıf, özellik değerlerinden herhangi biri değiştiğinde bir olayı tetikleyen bir türdür. Bu arabirim, bir denetimin her özelliği için bir değişiklik olayına sahip olma deseninin yerini alacak şekilde tasarlanmıştır. içinde BindingList<T>kullanıldığında, bir iş nesnesi arabirimini INotifyPropertyChanged uygulamalıdır ve BindingList'1 olayları türünde ItemChangedolaylara ListChanged dönüştürürPropertyChanged.

    Dekont

    Değişiklik bildiriminin ilişkili istemci ile veri kaynağı arasındaki bir bağlamada gerçekleşmesi için, bağlı veri kaynağı türünüz arabirimini (tercih edilir) uygulamalı INotifyPropertyChanged veya ilişkili tür için propertyNameChanged olayları sağlayabilirsiniz, ancak ikisini de yapmamalısınız.

Bileşen yazarları tarafından uygulamaya yönelik arabirimler

Aşağıdaki arabirimler Windows Forms veri bağlama altyapısı tarafından kullanılmak üzere tasarlanmıştır:

Windows Forms tarafından desteklenen veri kaynakları

Geleneksel olarak, veritabanlarında depolanan verilerden yararlanmak için uygulamalar içinde veri bağlama kullanılır. Windows Forms veri bağlama ile, belirli minimum gereksinimler karşılandığı sürece, diziler ve koleksiyonlar gibi diğer yapılardaki veritabanlarından ve verilerden verilere erişebilirsiniz.

Bağlanacak yapılar

Windows Forms'da, basit nesnelerden (basit bağlama) ADO.NET veri tabloları (karmaşık bağlama) gibi karmaşık listelere kadar çok çeşitli yapılara bağlanabilirsiniz. Basit bağlama için, Windows Forms basit nesnedeki genel özelliklere bağlamayı destekler. Windows Forms liste tabanlı bağlama genellikle nesnenin arabirimi veya arabirimi desteklemesini IListIListSource gerektirir. Buna ek olarak, ile bir BindingSource bileşen aracılığıyla bağlama yaparsanız, arabirimi destekleyen bir nesneye IEnumerable bağlanabilirsiniz.

Aşağıdaki listede, Windows Forms'da bağlanabileceğiniz yapılar gösterilmektedir.

  • BindingSource

    A BindingSource , en yaygın Windows Forms veri kaynağıdır ve bir veri kaynağı ile Windows Forms denetimleri arasında bir ara sunucu işlevi görür. Genel BindingSource kullanım düzeni, denetimlerinizi BindingSource öğesine bağlamak ve veri kaynağına bağlamaktır BindingSource (örneğin, ADO.NET veri tablosu veya iş nesnesi). , BindingSource veri bağlama desteği düzeyini etkinleştiren ve geliştiren hizmetler sağlar. Örneğin, ve gibi DataGridViewComboBox Windows Forms liste tabanlı denetimler veri kaynaklarına bağlanmayı IEnumerable doğrudan desteklemez, ancak aracılığıyla bağlama BindingSourceyaparak bu senaryoyu etkinleştirebilirsiniz. Bu durumda, BindingSource veri kaynağını değerine IListdönüştürür.

  • Basit nesneler

    Windows Forms, türü kullanılarak Binding nesne örneğindeki genel özelliklere veri bağlama denetimi özelliklerini destekler. Windows Forms, kullanıldığında nesne ListControl örneğine BindingSource gibi liste tabanlı denetimleri bağlamayı da destekler.

  • Dizi veya Koleksiyon

    Veri kaynağı olarak hareket etmek için, bir listenin IList arabirimi uygulaması gerekir; bir örnek sınıfın Array örneği olan bir dizi olabilir. Diziler hakkında daha fazla bilgi için bkz . Nasıl yapılır: Nesne Dizisi Oluşturma (Visual Basic).

    Genel olarak, veri bağlama için nesne listeleri oluştururken kullanmanız BindingList<T> gerekir. BindingList arabiriminin IBindingList genel bir sürümüdür. Arabirim, IBindingList iki yönlü veri bağlama için gereken özellikleri, yöntemleri ve olayları ekleyerek arabirimi genişletir IList .

  • IEnumerable

    Windows Forms denetimleri, yalnızca bir BindingSource bileşen üzerinden bağlıysa arabirimi destekleyen veri kaynaklarına IEnumerable bağlanabilir.

  • Veri nesnelerini ADO.NET

    ADO.NET bağlamaya uygun birçok veri yapısı sağlar. Her biri karmaşıklığı ve karmaşıklığında farklılık gösterir.

    • DataColumn

      A DataColumn , birden çok sütunun bir DataTabletablo oluşturması için temel yapı taşıdır. Her DataColumn biri, sütunun barındırdığı veri türünü belirleyen bir DataType özelliğe sahiptir (örneğin, bir tablodaki otomobilin otomobillerin türü). Bir denetimi (denetimin Text özelliği gibiTextBox) veri tablosundaki bir sütuna basit bir şekilde bağlayabilirsiniz.

    • DataTable

      A DataTable , ADO.NET satırlar ve sütunlar içeren bir tablonun gösterimidir. Veri tablosu iki koleksiyon içerir: DataColumnbelirli bir tablodaki veri sütunlarını temsil eden (sonuçta bu tabloya girilebilecek veri türlerini belirleyen) ve DataRowbelirli bir tablodaki veri satırlarını temsil eden . Bir denetimi bir veri tablosundaki bilgilere karmaşık bir şekilde bağlayabilirsiniz (örneğin, denetimi bir veri tablosuna bağlama DataGridView ). Ancak, bir DataTableöğesine bağladığınızda, tablonun varsayılan görünümüne bir bağlama olursunuz.

    • DataView

      , DataView filtrelenebilen veya sıralanmış olabilecek tek bir veri tablosunun özelleştirilmiş bir görünümüdür. Veri görünümü, karmaşık bağlı denetimler tarafından kullanılan veri "anlık görüntüsü"dür. Bir veri görünümünde verilere basit bağlama veya karmaşık bağlama yapabilirsiniz, ancak temiz, güncelleştirilen bir veri kaynağı yerine verilerin sabit bir "resmine" bağlandığınızı unutmayın.

    • DataSet

      A DataSet , veritabanındaki verilerin tablolarından, ilişkilerinden ve kısıtlamalarından oluşan bir koleksiyondur. Bir veri kümesindeki verilere basit veya karmaşık bir şekilde bağlanabilirsiniz, ancak için varsayılan DataViewManagerDataSet değere bağlandığınızı unutmayın (sonraki madde işareti noktasına bakın).

    • DataViewManager

      A DataViewManager , tüm öğesinin DataSetözelleştirilmiş bir görünümüdür. Buna benzer DataView, ancak ilişkiler dahil edilir. Bir koleksiyonla, belirli bir DataViewSettings tablo için sahip olduğu DataViewManager tüm görünümler için varsayılan filtreler ve sıralama seçenekleri ayarlayabilirsiniz.

Veri bağlama türleri

Windows Forms iki tür veri bağlamadan yararlanabilir: basit bağlama ve karmaşık bağlama. Her birinin farklı avantajları vardır.

Veri bağlama türü Tanım
Basit veri bağlama Bir denetimin veri kümesi tablosundaki bir sütundaki değer gibi tek bir veri öğesine bağlanabilmesi. Basit veri bağlama, genellikle yalnızca tek bir TextBox değer görüntüleyen denetimler olan denetim veya Label denetim gibi denetimler için tipik olan bağlama türüdür. Aslında, bir denetimdeki herhangi bir özellik veritabanındaki bir alana bağlanabilir. Visual Studio'da bu özellik için kapsamlı destek sağlanır.

Daha fazla bilgi için bkz . Verilerde gezinme ve Basit ilişkili denetim oluşturma (Windows Forms .NET).
Karmaşık veri bağlama Bir denetimin birden fazla veri öğesine(genellikle veritabanında birden fazla kayıt) bağlanma yeteneği. Karmaşık bağlama, liste tabanlı bağlama olarak da adlandırılır. Karmaşık bağlamayı destekleyen denetimlere örnek olarak DataGridView, ListBoxve ComboBox denetimleri verilebilir. Karmaşık veri bağlama örneği için bkz . Nasıl yapılır: Windows Forms ComboBox veya ListBox Denetimini Verilere Bağlama.

Kaynak bileşeni bağlama

Windows Forms, veri bağlamayı basitleştirmek için bir veri kaynağını bileşene BindingSource bağlamanıza ve ardından denetimlerini öğesine bağlamanıza BindingSourceolanak tanır. basit veya karmaşık bağlama senaryolarında kullanabilirsiniz BindingSource . Her iki durumda da, BindingSource değişiklik bildirimi para birimi yönetimi ve diğer hizmetler sağlayan veri kaynağı ile bağlı denetimler arasında bir aracı görevi görür.

Veri bağlama kullanan yaygın senaryolar

Neredeyse her ticari uygulama, genellikle veri bağlama aracılığıyla bir tür veya başka bir türdeki veri kaynaklarından okunan bilgileri kullanır. Aşağıdaki listede, veri sunum ve işleme yöntemi olarak veri bağlamayı kullanan en yaygın senaryolardan birkaçı gösterilmektedir.

Senaryo Tanım
Raporlama Raporlar, yazdırılan bir belgede verilerinizi görüntülemeniz ve özetlemeniz için esnek bir yol sağlar. Bir veri kaynağının seçili içeriğini ekrana veya yazıcıya yazdıran bir rapor oluşturmak yaygın bir durumdır. Yaygın raporlar listeler, faturalar ve özetler içerir. Öğeler liste sütunlarına biçimlendirilir ve her liste öğesinin altında alt öğeler düzenlenir, ancak verilere en uygun düzeni seçmeniz gerekir.
Veri girişi Büyük miktarda ilgili veri girmenin veya kullanıcılardan bilgi istemenin yaygın yollarından biri veri giriş formudur. Kullanıcılar metin kutularını, seçenek düğmelerini, açılan listeleri ve onay kutularını kullanarak bilgi girebilir veya seçim yapabilir. Daha sonra bilgiler gönderilir ve yapısı girilen bilgilere dayalı olan bir veritabanında depolanır.
Ana/ayrıntı ilişkisi Ana/ayrıntı uygulaması, ilgili verilere bakmak için bir biçimdir. Özellikle, klasik iş örneğinde birbirine bağlanan ilişki içeren iki veri tablosu vardır: "Müşteriler" tablosu ve müşterilerle ilgili siparişlerini bağlayan ilişki içeren bir "Siparişler" tablosu. İki Windows Forms denetimiyle ana/ayrıntı uygulaması oluşturma hakkında daha fazla bilgi için bkz. Nasıl yapılır: İki Windows Forms DataGridView DataGridView Denetimi Kullanarak Ana/Ayrıntı Formu Oluşturma
Arama Tablosu Bir diğer yaygın veri sunusu/işleme senaryosu da tablo aramadır. Genellikle, daha büyük bir veri görüntüsünün parçası olarak, verileri görüntülemek ve işlemek için bir ComboBox denetim kullanılır. Anahtar, denetimde ComboBox görüntülenen verilerin veritabanına yazılan verilerden farklı olmasıdır. Örneğin, bir marketteki ürünleri gösteren bir ComboBox denetiminiz varsa, ürünlerin adlarını (ekmek, süt, yumurta) görmek istersiniz. Ancak, veritabanındaki bilgilerin alınmasını kolaylaştırmak ve veritabanı normalleştirmesi için, büyük olasılıkla belirli bir siparişin belirli öğelerine ilişkin bilgileri madde numaraları (#501, #603 vb.) olarak depolayacaksınız. Bu nedenle, formunuzun denetimindeki ComboBox market öğesinin "kolay adı" ile siparişte bulunan ilgili ürün numarası arasında örtük bir bağlantı vardır. Tablo aramanın özüdür. Daha fazla bilgi için bkz . Nasıl yapılır: Windows Forms BindingSource Bileşeni ile Arama Tablosu Oluşturma.

Ayrıca bkz.