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.
Veri bağlamayla ilgili arabirimler
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 ListChangedType ListChangedEventArgs ö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, ,
EndEdit
veCancelEdit
yöntemlerinin işleyişininBeginEdit
ve 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ırBeginEdit
. Bu yöntem birden çok kez çağrılabildiğinden, sonraki çağrıların yıkıcı olmaması önemlidir. SonrakiBeginEdit
çağrılar, yapılan güncelleştirmeleri yok edebilir veya ilkBeginEdit
ç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:
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öntemi
IListSource
, öğ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: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. ArabirimISupportInitializeNotification
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 propertyName
Changed
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:
IBindableComponent Arabirim
Bu arabirimi uygulayan bir sınıf, veri bağlamayı destekleyen denetimsiz bir bileşendir. Bu sınıf, bu arabirimin ve özellikleri aracılığıyla DataBindings bileşenin veri bağlamalarını ve BindingContext bağlama bağlamını döndürür.
Dekont
Bileşeniniz öğesinden Controldevralıyorsa arabirimini IBindableComponent uygulamanız gerekmez.
ICurrencyManagerProvider Arabirim
Arabirimini ICurrencyManagerProvider uygulayan bir sınıf, bu bileşenle ilişkili bağlamaları yönetmek için kendi CurrencyManager bileşenini sağlayan bir bileşendir. Özel
CurrencyManager
erişim özelliği tarafından CurrencyManager sağlanır.Dekont
öğesinden Control devralan bir sınıf, bağlamaları özelliği aracılığıyla BindingContext otomatik olarak yönetir, bu nedenle uygulamanız ICurrencyManagerProvider gereken durumlar oldukça nadirdir.
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 IList IListSource 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.
-
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, denetimleriniziBindingSource
öğesine bağlamak ve veri kaynağına bağlamaktırBindingSource
(ö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 DataGridView ComboBox Windows Forms liste tabanlı denetimler veri kaynaklarına bağlanmayı IEnumerable doğrudan desteklemez, ancak aracılığıyla bağlamaBindingSource
yaparak 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 .-
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.
-
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. -
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 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.
-
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 DataViewManager
DataSet
değere bağlandığınızı unutmayın (sonraki madde işareti noktasına bakın). -
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 BindingSource
olanak 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.
.NET Desktop feedback