Altbilgi içeriğine atla
Iron Academy Logo
C# Uygulaması
C# Uygulaması

Diğer Kategoriler

WinForms Veri Bağlamasını Tim Corey’nin Turnuva İzleyicisi Üzerinden Açıklamak

Tim Corey
1h 11m 40s

Giriş

C# Uygulama Başlangıçtan Bitime serisinin 22. Dersinde, Tim Corey Turnuva İzleyici formunun üzerinde çalışmaya başlar, WinForms veri bağlama üzerinde yoğunlaşır. Tim, bu dersin veri tabanlarına veya metin dosyalarına veri kaydetme ile ilgili olmadığını açıklar; bu daha sonra ele alınacak. Bunun yerine, bu videonun tüm amacı UI'yı bağlamak, kontrolleri doldurmak ve veri modelleri ile WinForms kontrolleri arasında veri bağlama kullanarak nasıl hareket ettiğini anlamaktır.

Tim, WinForms veri bağlamanın bazen hantallaşabildiğini, karışık ve bazen can sıkıcı hale gelebildiğini açıklar. Bu nedenle, bu ders, veri bağlamanın gerçekten nasıl davrandığını, nelerin onu bozduğunu ve nasıl düzeltileceğini derinlemesine, pratik bir şekilde göstermek için bir yolculuğa dönüşüyor. Tim'in hata ayıklama yolculuğunu takip ederek, WinForms bağlama mekaniği hakkında gerçekçi ve değerli bir anlayış elde ediyoruz.

Turnuva İzleyici Formu Genel Bakış

Tim, Turnuva İzleyici formunun ne yapması gerektiğini anlatarak başlar. Form şunları gösterir:

  • Turnuva adı

  • Turnuva turları içeren bir açılır menü

  • Seçilen tur için eşleşmeleri gösteren bir liste kutusu

  • Seçilen eşleşme için takım adları ve skorlar

Tim, tüm bu bilgilerin senkronize kalması gerektiğine vurgu yapar. Bir tur değiştiğinde, eşleşmeler güncellenmelidir. Bir eşleşme değiştiğinde, takım adları ve skorlar güncellenmelidir. Bu gereklilik, veri bağlama etrafındaki tartışmayı yönlendirir. Aynı veri kaynağına bağlı kontroller, veri bağlı kontroller olarak da bilinir ve otomatik olarak senkronize olur. BindingNavigator kontrolü, kayıt listesinde maddelere olan işaretçiyi güncel tutarak veriye bağlanmayı saplar. CurrencyManager sınıfı, bir liste kontrolü ve bir veri kaynağı nesnesi arasındaki bağlamaların bir koleksiyonunu yönetir, pozisyon izleme ve değişiklik bildirimleri sağlar. TextBox veya Label gibi her bağlı kontrol, otomatik senkronizasyon sağlamak için bu mekanizmalar aracılığıyla veri kaynağına bağlanır.

Turnuva Nesnesini Forma Aktarma

Tim, Turnuva İzleyici formunun hangi turnuvanın yükleneceğine karar vermemesi gerektiğini açıklar. Bu sorumluluk gösterge tablosuna aittir. Bu nedenle, Turnuva İzleyici formu yaratıcısı aracılığıyla bir TournamentModel almalıdır.

Gönderilen turnuva nesnesinin, formun her yöntemine erişilebilen form seviyesinde, özel bir alanda nasıl saklandığını gösterir. Bu turnuva nesnesi, tüm veri bağlama operasyonları için tek bilgi kaynağı haline gelir. Basit veri bağlamada, bir kontrol, bir veri tablosundan alınan bir değeri gibi tek bir veri öğesine bağlanabilir ve bu, bireysel veri noktalarını görüntülemenizi veya düzenlemenizi sağlar. BindingSource, hem basit hem de karmaşık bağlama senaryolarında kullanılabilir.

Form Verilerini Yükleme Yöntemi

Tim, LoadFormData adında özel bir yöntem sunar. Bu yöntem, turnuva modelinden veri çeker ve UI kontrollerine iter.

Örneğin:

  • Turnuva adı etiketi, değerini doğrudan tournament.TournamentName'den alır. Bu, bir kontrolün özelliğinin, veri kaynağından bir değere, örneğin bir metin kutusu kontrolünün metin özelliğine, ayarlanmasını içerir.

Tim, bunun en basit veri bağlama şekli olduğunu, manuel olarak değer atama ve liste ve koleksiyonlarla uğraşmadan önce iyi bir başlangıç ​​noktası olduğunu vurgular. Basit bağlama, bir kontrolün tek bir özelliğini bir veri kaynağındaki tek bir değere bağlar ve genellikle bir seferde bir kayıt görüntüler.

Gösterge Tablosu Düğmesini Bağlama

Tim, bir kullanıcı bir turnuva seçip "Turnuva Yükle"ye tıkladığında, Turnuva İzleyici formunun açılması için gösterge tablosunu nasıl modifiye edeceğini anlatır.

Tim, seçilen açılır menü maddesini TournamentModel'e dönüştürür ve görüntüleyici forma geçirir. Uygulamayı çalıştırarak ve turnuva isminin doğru şekilde göründüğünü görmekle bağlantının çalıştığını onaylar.

Bu, liste bağlama işlemine geçmeden önce, temel nesne geçişi ve UI güncellemelerinin çalıştığını onaylar.

Veri Kaynağından Açılır Menüye Turları Yükleme

Şimdi Tim, turnuva turları ile liste bağlama işlemine geçiyor.

Turların, bir dize değil, tam sayılar listesi olarak temsil edilmesinin en iyisi olduğunu açıklar. Tim, bu seçimin yaşamı kolaylaştırdığı için olduğunun altını çizer:

  • Tam sayılar açılır menülere derli toplu bir şekilde bağlanır

  • Tam sayılar, dize ayrıştırmasına gerek kalmadan alınabilir

  • Seçilen değer doğrudan bir int'e dönüştürülebilir

Bir ComboBox kontrolü, verilen bir tabloya veya listeye bağlanarak verileri verimli bir şekilde görüntülemenizi ve seçmenizi sağlar. Bir ComboBox kontrolünü bağlarken, kullanıcıya gösterilecek alanı belirlemek için DisplayMember özelliğini, temel değer olarak kullanılacak alanı belirlemek için ValueMember özelliğini kullanabilirsiniz. Aynı şekilde, bir veri tablosunda bulunan bilgileri DataGridView kontrolüne de bağlayabilirsiniz.

Tim, turnuvanın turları arasında döngü yapıyor, benzersiz tur numaralarını çıkarıyor ve bunları bir listeye depoluyor.

Tur Açılır Menüsünü Veri Bağlamayla Bağlama

Tim ilk önemli WinForms bağlama kuralını tanıtır:

Her zaman VeriKaynağını sıfırlamadan önce null olarak ayarlayın.

Açılır menünün veri kaynağını temizler, sonra tur listesine atar. Bir kontrolü bir veri kaynağına bağladığınızda, eğer veri kaynağı INotifyCollectionChanged gibi arabirimleri uyguluyorsa, veri değiştiğinde kontrol otomatik olarak UI'yı yeniler. Bu, veri ve görsel temsili arasındaki gerçek zamanlı senkronizasyonu sağlar. Ayrıca, UI kontrolünde veya temel veri kaynağındaki değişiklikler, yapılandırmaya bağlı olarak (tek yönlü veya çift yönlü) diğer bağın ucunu otomatik olarak günceller. Tam sayılar doğal olarak dizeye dönüştüğünden, burada DisplayMember gerekmediğini açıklar.

Tim daha sonra yaygın bir hatayı — yükleme yöntemini çağırmayı unutmayı— gösterir ve tek bir yöntem çağrısının eksikliğinin nasıl boş bir açılır menüyle sonuçlandığını ifade eder.

SelectedIndexChanged Olayları ve Dinamik Güncellemeler

Tim, WinForms'un olaylara, özellikle SelectedIndexChanged'a yoğun bir şekilde güvendiğini açıklar.

Tur açılır menüsünün SelectedIndexChanged olayını, seçilen tur için eşleşmeleri yükleyen bir yönteme bağlar. WinForms veri bağlamasında, bir olay işleyici, olayın hangi kontrol tarafından tetiklendiğini belirten object sender parametresini alır. Biçimlendirme ve doğrulamayı özelleştirmek için Biçim ve Ayrıştırma gibi olayları işleyebilirsiniz; Binding sınıfının Biçim ve Ayrıştırma olayları, veri bağlama işlemi sırasında verileri özel biçimlendirme ve doğrulama olanağı sağlar. Diğer kontroller benzer olay işleme yoluyla bağlanabilir ve senkronize edilebilir.

Tim, mantığı olay işleyicilerinde doğrudan kod yerleştirmek yerine özel yardımcı yöntemlere çıkarmayı tercih eder. Bu, kodu yeniden kullanılabilir ve temiz tutar.

Seçilen Tura Göre Eşleşmeleri Yükleme

Tim açılır menünün seçilen maddesini geri int'e döndürerek seçilen turu alır.

Turnuvanın turları arasında tekrar döngü yapar, ancak bu kez eşleşme turu seçilen tura eşit olan eşleşmeleri filtreler. Bu eşleşmeler, eşleşme liste kutusunun veri kaynağı olan seçilen eşleşmeler listesine yerleştirilir.

Bu, karmaşık nesneler listelerinin bağlanması sorununu tanıtır.

Bağlama için Bir Görüntüleme Özelliği Oluşturma

Tim, eşleşme modelinin UI görüntüleme için uygun bir doğal dize temsilinin olmadığını açıklar.

Mantığı UI'ya zorlamak yerine, Tim, modele salt okunur bir GörüntüAdı özelliği ekler. Bu özellik şu şekilde bir dize oluşturur:

Takım A vs. Takım B

Bir takım eksikse (boş hafta ya da gelecek tur), Tim şunu döndürür:

Eşleşme henüz belirlenmedi

DataGridView gibi karmaşık bağlı kontroller, bir veri tablosundan veya diğer yapılardan birden çok veri öğesinin görüntülenip düzenlenebileceği karmaşık bağlama senaryolarını destekler. Karmaşık veri bağlama, birden fazla veri öğesini bir kontrole bağlamanızı sağlar, örneğin temel kayıt kaynağından birden fazla sütun veya satır bağlama. ADO.NET, DataTable, DataView ve diğer yapılar gibi bağlamaya uygun pek çok veri yapısı sağlar ve Windows Forms birden fazla veri kaynağına bağlama desteği sunar. Binding sınıfı, veri kaynağı alanları ve kontrol özellikleri arasındaki mantıksal bağlantıyı yönetir ve IBindingList, IEditableObject ve INotifyPropertyChanged gibi arabirimler sıralama, değişiklik bildirimi ve geri alma desteği sağlar. Verilerin nasıl görüntüleneceğini kontrol etmek için veri görünümlerinde varsayılan filtreleri ayarlayabilirsiniz ve bağlama bağlamı ve ParaBirimiYöneticisi sonunda veri bağlı kontrollerin nasıl senkronize edileceğini belirler. Bir Windows Formunun BindingContext mülkü, form için CurrencyManager nesnelerini yönetir ve her bir veri kaynağı, aynı veri kaynağına bağlı tüm kontrolleri senkronize tutan tek bir CurrencyManager nesnesine sahiptir. Windows Forms'ta gerekli veri bağlama arabirimlerini uygulayarak standart veri-bağlı kontroller gibi davranan özel kontroller oluşturabilirsiniz.

Bu, Tim'in vurguladığı önemli bir WinForms veri bağlama prensibidir:

Model nasıl görüntüleneceğine karar vermelidir—UI değil.

Bağlama Hatalarını Hata Ayıklama

Tim birden fazla hata ile karşılaşır:

  • İkinci turun doğru görüntülenmemesi

  • Eşleşmelerin yenilenmemesi

  • Beklenmedik olayların tetiklenmesi

Bu sorunları gizlemek yerine, Tim her bir hata ayıklama adımından geçer. Listeler değiştirildiğinde, yeni liste geçerli veri içerse bile bağlamanın nasıl bozulduğunu açıklar.

Bu önemli bir WinForms dersine yol açar.

Aşağıdaki kod, veri bağlama işlemi sırasında özel biçimlendirme ve doğrulama sağlamak için Binding sınıfının Biçim ve Ayrıştırma olaylarını nasıl ele alabileceğinizi gösterir. Biçimlendirme ve Ayrıştırma olayları, veri UI ve veri kaynağı arasında nasıl dönüştürüldüğünü ve doğrulandığını özelleştirmek için kullanılabilir.

Windows Forms Veri Bağlamasında BindingSource ve BindingList Karşılaştırması

Tim, BindingSource ile deney yaparak, onu UI kontrolü ve veri arasına yerleştirir. Bunun önerilen yaklaşım olduğunu, ancak karmaşıklık ve kafa karışıklığı yarattığını kabul eder. BindingSource bileşeni, bir veri kaynağı ve Windows Forms kontrolleri arasında bir proxy olarak hareket eder ve DataTables, DataViews, BindingLists ve diziler gibi bağlamaya uygun çeşitli veri yapıları ile çalışır.

Daha sonra BindingList'i tanıtır, listenin değiştiğinde bağlı kontrolleri otomatik olarak güncellediğini açıklar. Eğer veri kaynağı uygun arabirimleri uyguluyorsa, INotifyCollectionChanged gibi, Windows Forms'ta veri bağlama, alttaki veriler değiştiğinde kontrollerin otomatik güncellemelerini destekler.

Ancak, Tim önemli bir kural keşfeder:

Bir BindingList'i yeni bir tanesi ile DEĞİŞTİRMEMELİSİNİZ.

Bunun yerine, yapmanız gerekenler:

  • Mevcut BindingList'i temizleyin

  • Öğeleri geri ekleyin

Listeyi değiştirmek bağlama bağlantısını bozar.

Listeleri Temizleyerek Kırık Bağlamayı Düzeltmek

Tim bağlama sorununun kök nedenini doğrular:

  • Yeni BindingList() atamak, UI'yi devre dışı bırakır

  • Temizlemek ve öğeleri yeniden eklemek bağlamayı korur

Hem tur hem de eşleşme için bu deseni kullanacak şekilde günceller. Tutarlı bir şekilde uygulandığında, UI sonunda doğru şekilde güncellenir.

İlk Seçimleri Manuel Olarak Yükleme

Tim, WinForms'un öğeler yüklendiğinde otomatik olarak SelectedIndexChanged tetiklemediğini açıklar.

Bunu düzeltmek için, manuel olarak:

  • Turları yükledikten sonra 1. tur eşleşmelerini yükler

  • İlk eşleşmeyi programatik olarak seçer

Bu, kullanıcı etkileşimi gerektirmeden UI'nin doğru şekilde ilk haline gelmesini sağlar.

Sonuç ve Ders Özeti

Dersin sonunda, Tim onaylar:

  • Turlar doğru şekilde güncellenir

  • Eşleşmeler doğru şekilde güncellenir

  • Takım adları ve skorlar doğru şekilde yüklenir

  • Boş haftalar ve gelecek turlar anlamlı metinler görüntüler

Bu dersin mükemmellik hakkında değil, WinForms veri bağlamanın gerçekten nasıl davrandığını —sınırlamaları da dahil— anlamak olduğunu vurgular.

Tim, skorlamanın ve filtrelemenin (örneğin "sadece oynanmamışlar") bir sonraki derste, üzerinde çalışılacak gerçek durum değişiklikleri olduğunda ele alınacağını açıklayarak kapanış yapar.

Kapanış Düşünceleri

Ders 22, pratik WinForms veri bağlama konusunda bir ustalık sınıfıdır, çünkü her şey sorunsuz çalışmadığı için değil, Tim Corey her hatayı, düzeltmeyi ve tasarım kararını gerçek zamanlı olarak ele aldığı için öyledir.

Tim'in videosunu takiben, geliştiriciler aşağıdakileri gerçekçi bir şekilde anlama kazanıyor:

  • WinForms bağlanmasının neden kırılgan hissettirdiği

  • BindingList nasıl çalışır

  • Liste temizlemenin neden önemli olduğu

  • UI ve modellerin nasıl etkileşime geçmesi gerektiği

Eğer WinForms veri bağlama ile zorlandıysanız, bu ders ve Tim'in açıklamaları 'neden' sorusunu nihayetinde aydınlığa kavuşturur.

Hero Worlddot related to WinForms Veri Bağlamasını Tim Corey’nin Turnuva İzleyicisi Üzerinden Açıklamak
Hero Affiliate related to WinForms Veri Bağlamasını Tim Corey’nin Turnuva İzleyicisi Üzerinden Açıklamak

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara