Aracılığıyla paylaş


Windows Forms ile veri bağlamaya genel bakış

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 Text denetiminin TextBox ö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 arabirimi

    IList arabirimini uygulayan bir sınıf Array, 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.

    Uyarı

    Windows Forms ile bağlama için iş nesnelerinin listesini oluşturmak istiyorsanız, BindingList<T>kullanmayı 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 arabirimi

    IBindingList arabirimini 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. Bir denetimde yapılan veri değişikliklerinin diğer bağlı denetimlere aktarılmasına yardımcı olur.

    Uyarı

    Değişiklik bildirimi, IBindingList özelliği aracılığıyla SupportsChangeNotification arabirimi için etkinleştirilir ve true, listenin değiştiğini veya listedeki bir öğenin değiştiğini gösteren bir ListChanged olayı oluşturur.

    Değişiklik türü, ListChangedType parametresinin ListChangedEventArgs özelliği tarafından açıklanı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 değiştiğinde, listenin ListChanged olayını tetiklemesi için listeye haber vermesi gerekir.

    Uyarı

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

  • IBindingListView arabirimi

    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 arabirimi

    IEditableObject arabirimini uygulayan bir sınıf, nesnede 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, BeginEdit, EndEdit ve CancelEdit yöntemlerinin işleyişi ile bu yöntemlerin verilerde yapılan değişikliklerin geri alınabilmesi için birbirleriyle nasıl çalıştıklarına dair kısa bir açıklama verilmiştir:

    • BeginEdit yöntemi, bir nesne üzerinde düzenlemenin başladığını gösterir. Bu arabirimi uygulayan bir nesne, BeginEdit yöntemi çağrıldıktan sonra CancelEdit yöntemi çağrılırsa güncelleştirmelerin atılacağı şekilde güncelleştirmeleri depolaması gerekir. Veri bağlama Windows Forms'da, tek bir düzenleme işlemi kapsamında BeginEdit birden çok kez çağırabilirsiniz (örneğin, BeginEdit, BeginEdit, EndEdit). IEditableObject uygulamaları, BeginEdit'in önceden çağrılıp çağrılmadığını izlemeli ve sonraki BeginEditçağrılarını yok saymalıdır. 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.

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

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

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

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

  • ICancelAddNew arabirimi

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

  • IDataErrorInfo arabirimi

    IDataErrorInfo arabirimini 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, "State sütunundaki değer geçersizdir").

  • IEnumerable arabirimi

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

    Uyarı

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

  • ITypedList arabirimi

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

    Uyarı

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

  • ICustomTypeDescriptor arabirimi

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

    Uyarı

    Tasarım zamanı bağlamayı, ICustomTypeDescriptoruygulayan türlere desteklemek için, türün IComponent'i de uygulaması ve Form'da bir örnek olarak var olması gerekir.

  • IListSource arabirimi

    IListSource arabirimini uygulayan bir sınıf, liste olmayan nesnelerde liste tabanlı bağlamayı etkinleştirir. GetList yöntemi, IListSource öğesinden devralmayan bir nesneden bağlanabilir bir liste döndürmek için IList kullanılır. IListSource DataSet sınıfı tarafından kullanılır.

  • IRaiseItemChangedEvents arabirimi

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

    Uyarı

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

  • ISupportInitialize arabirimi

    ISupportInitialize arabirimini uygulayan 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 arabirimi

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

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

    • Initialized, EndInit çağrıldığında oluşur.

  • INotifyPropertyChanged arabirimi

    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. Bir BindingList<T>içinde kullanıldığında, bir iş nesnesi INotifyPropertyChanged arabirimini uygulamalıdır ve BindingList'1, PropertyChanged olaylarını ListChangedtüründeki ItemChanged olaylarına dönüştürür.

    Uyarı

    Değişiklik bildiriminin ilişkili bir istemci ile veri kaynağı arasındaki bir bağlamada gerçekleşmesi için, bağlı veri kaynağı türünüz INotifyPropertyChanged arabirimini (tercih edilir) uygulamalı veya ilişkili tür için propertyNameChanged olayları sağlayabilirsiniz, ancak her iki seçeneği birden kullanmaktan kaçınmalı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 IList arabirimini veya IListSource arabirimini desteklemesini gerektirir. Buna ek olarak, bir BindingSource bileşeni aracılığıyla bağlama yaparsanız, IEnumerable arabirimini destekleyen bir nesneye bağlanabilirsiniz.

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

  • BindingSource

    BindingSource, en yaygın Windows Forms veri kaynağıdır ve bir veri kaynağı ile Windows Forms denetimleri arasında ara sunucu işlevi görür. Genel BindingSource kullanım düzeni, denetimlerinizi BindingSource bağlamak ve BindingSource veri kaynağına bağlamaktır (ö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, Windows Forms liste tabanlı denetimler, DataGridView ve ComboBox gibi, doğrudan IEnumerable veri kaynaklarına bağlanmayı desteklemez; ancak BindingSource aracılığıyla bağlama yaparak bu senaryoyu etkinleştirebilirsiniz. Bu durumda, BindingSource veri kaynağını bir 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

    Bir veri kaynağı olarak hareket etmek için, bir listenin IList arabirimini uygulaması gerekir; bir örnek, Array sınıfının bir ö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 BindingList<T> kullanmanız gerekir. BindingList, IBindingList arabiriminin genel bir sürümüdür. IBindingList arabirimi, iki yönlü veri bağlama için gereken özellikleri, yöntemleri ve olayları ekleyerek IList arabirimini genişletir.

  • IEnumerable

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

  • ADO.NET veri nesneleri

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

    • DataColumn

      Bir DataColumn, bir DataTable oluşturmanın temel yapı taşıdır, çünkü birden çok sütun bir tabloyu oluşturur. Her DataColumn, sütunun barındırdığı veri türünü belirleyen bir DataType özelliği vardır (örneğin, otomobilleri açıklayan bir tablodaki bir otomobilin türü). Bir denetimi (TextBox denetimin Text özelliği gibi) veri tablosu içindeki bir sütuna basit olarak bağlayabilirsiniz.

    • DataTable

      DataTable, ADO.NET satırlar ve sütunlar içeren bir tablonun gösterimidir. Veri tablosu iki koleksiyon içerir: DataColumn, belirli bir tablodaki veri sütunlarını temsil eden (sonuçta bu tabloya girilebilecek veri türlerini belirleyen) ve belirli bir tablodaki veri satırlarını temsil eden DataRow. Bir denetimi bir veri tablosundaki bilgilere karmaşık bir şekilde bağlayabilirsiniz (örneğin, DataGridView denetimini bir veri tablosuna bağlama). 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ş 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

      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 DataViewManager için varsayılan DataSet göre bağlandığınızı unutmayın (sonraki maddeye bakın).

    • DataViewManager

      DataViewManager, bir DataSet'ye benzer şekilde, ancak ilişkiler dahil, tüm DataView'in özelleştirilmiş bir görünümüdür. DataViewSettings koleksiyonuyla, DataViewManager belirli bir tablo için sahip olduğu 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ü Açıklama
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 değer görüntüleyen TextBox denetimi veya Label denetimi 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 Kontrolünü Veriye Bağlama.

Kaynak bileşeni bağlama

Windows Forms, veri bağlamayı basitleştirmek için bir veri kaynağını BindingSource bileşenine bağlamanıza ve ardından denetimleri BindingSourcebağlamanıza olanak tanır. basit veya karmaşık bağlama senaryolarında BindingSource kullanabilirsiniz. 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 Açıklama
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 bkzDataGridView.
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 denetimi kullanılır. Anahtar, ComboBox denetiminde görüntülenen verilerin veritabanına yazılan verilerden farklı olmasıdır. Örneğin, bir marketteki ürünleri gösteren 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 bakkal ürününün "tanıdık adı" ile siparişte bulunan ilgili ürün numarası arasında örtük bir bağlantı vardır. Tablo aramanın temelidir. Daha fazla bilgi için bkz. Nasıl yapılır: Windows Forms BindingSource Bileşeni ile Arama Tablosu Oluşturma.

Ayrıca bakınız