Makale Özeti

BindingSource nesnesi ile ne kadar hızlı ve rahat kod yazılabildiğini işleyeceğiz bu makalemizde. Framework 2.0 ile hayatımıza giren BindingSource nesnesi ile neredeyse hiç kod yazmadan verileri görüntüleyebilecek ve kayıtlar arasında rahatça gezinebileceksiniz. Ayrıca makalenin son kısmında yazılımcılar için çok kullanışlı bir yöntem göstereceğim.

Makale

BindingSource ve DataBinding işlemleri

BindingSource nesnesi ile ne kadar hızlı ve rahat kod yazılabildiğini işleyeceğiz bu makalemizde. Framework 2.0 ile hayatımıza giren BindingSource nesnesi ile neredeyse hiç kod yazmadan verileri görüntüleyebilecek ve kayıtlar arasında rahatça gezinebileceksiniz. Ayrıca makalenin son kısmında yazılımcılar için çok kullanışlı bir yöntem göstereceğim.

            Bu kısa ön bilgiden sonra isterseniz bu nesneyi nasıl kullanabileceğimizi ve yönetebileceğimizi anlatan basit bir örnek vereyim.

Bir windows projesi açalım ve formumuzu aşağıdaki gibi dizayn edelim. En alt kısımda kayıtları gösterip arasında gezebileceğimiz bir gridview nesnesi olsun. Üst tarafta da kayıtların detaylarını binding etmiş olacağımız textBox’ kontrolleri bulunsun.

Dizaynı yaptıktan sonra isterseniz kodlamaya geçelim.

private BindingSource masterBindingSource;

private void Form2_Load(object sender, EventArgs e)
        {
            SqlConnection cnn = new SqlConnection("data source=.;database=AdventureWorks;trusted_connection=true");
            SqlDataAdapter da = new SqlDataAdapter("Select TOP(50) ContactID,FirstName,LastName,EmailAddress,Phone FROM Person.Contact ", cnn);
            DataTable dt = new DataTable("Personel");
            da.Fill(dt);
            masterBindingSource = new BindingSource();
            masterBindingSource.DataSource = dt;
            dataGridView1.DataSource = masterBindingSource;
            masterBindingSource.PositionChanged += new EventHandler(masterBindingSource_PositionChanged);
            txtContactID.DataBindings.Add("Text", masterBindingSource, "ContactID");
            txtFirstName.DataBindings.Add("Text", masterBindingSource, "FirstName");
            txtLastName.DataBindings.Add("Text", masterBindingSource, "LastName");
            txtPhone.DataBindings.Add("Text", masterBindingSource, "Phone");
            txtEmail.DataBindings.Add("Text", masterBindingSource, "EmailAddress");
        }

 

Projemize öncelikle BindingSource nesnesi tipinde bir masterbindingsource değişkeni tanımlayalım. Bu değişken global bir değişken olsun ki her metodda rahatça erişelim. Formun load anında ise veritabanına gerekli bağlantıları yapalım.Ben database olarak AdventureWorks, tablo olarakta Person.Contract kullandım. Veritabanına bağlantıyı kurduktan sonra Person.Contact tablosundan ilk 50 kaydı çektik ve bunları bir datatable nesnesine doldurduk.

Tanımlamış olduğumuz masterbindingsource değişkenini BindingSource nesnesinden new instance aldık ve datasource ‘suna az önce doldurmuş olduğumuz datatable nesnemizi bind ettik.

Gridimizin içinde bulunan kayıtlar arasında dönerken bind etmiş olduğumuz textbox nesnelerine seçili verilerin gelmesi için masterbindingsource değişkenimizin PositionChanged adlı eventini yaratıyoruz.. Bu eventimizin içeriğini birazdan dolduracağız. Ama daha önce gridin içinde gezinirken seçili kaydın bilgilerinin textboxlarda gözükmesini sağlamak için mevcut textboxlara yukarıda görmüş olduğunuz gibi databinding ekliyoruz. DataBindings.Add metodu overloading bir metoddur. Biz 3 parametreli metodunu kullanacağız. Yani ilk parametre Property olacak biz buraya Text yazıyoruz. İkinci parametremiz datasource, yani burada masterbindingsource nesnemizi göstereceğiz.Son parametre ise binding yapılacak alan buda database’den dönen kolonumuzun adı olacak.  

Buraya kadar yazmış olduğumuz kod ile grid üstünde gezerken textboxların seçili kayıt ile dolduğunu göreceksiniz.

 

Şimdi ise yazılımcı arkadaşları gerçekten çok rahatlatacak bir kod örneği vereceğim. Biz yazılımcılar çoğunlukla kullanıcının grid üstünde seçtiği kaydı bulmak için gridin o an seçili row’unun hücrelerinden ulaşarak verileri çekeriz. İşte buna gerek kalmadan size nasıl verileri çok rahat şekilde çekebileceğinizi göstereceğim.

 Öncelikle public Datarow cinsinden currentRow değişkeni tanımlıyoruz. Bu değişkenimizin get property’sini aşağıdaki gibi yazıyoruz. Burda anlatılmak istenen, eğer kayıt yoksa bize boş dön aksi takdirde masterbindingsource değişkenimizin içinde bulunan en güncel veriyi dön demektir.

public DataRow currentRow
        {
            get
            {
                int position = this.BindingContext[masterBindingSource].Position;
                if (position > -1)
                {
                    return ((DataRowView)masterBindingSource.Current).Row;
                }
                else
                {
                    return null;
                }
            }
        }

MasterbindingSource değişkenimize hatırlarsanız bir event atamıştık. Seçili olan row’un bilgilerini ulaşmak için isterseniz bu eventin içinde kodumuzu yazalım.  Bu event , kullanıcı gridin üzerinde gezdikçe otomatik olarak tetiklenir. Ve yukarıda yazmış olduğumuz kod bloğu sayesinde currentRow nesnemizde sürekli en son güncel veriler bulunur. Nasıl mı? Aşağıdaki kod bloğunu aynen yazalım lütfen

void masterBindingSource_PositionChanged(object sender, EventArgs e)
        {
            MessageBox.Show(currentRow["ContactID"].ToString());
        }

Yukarıda da görmüş olduğunuz üzere currentRow[“ContactID”] diyerek o an seçili rowun contactid sine çok rahat ulaşabiliyoruz.Ben bunu örnek olsun diye positionChanged eventine yazdım. Siz hangi metodda currentRow değikenini çağırırsanız gene en güncel haline ulaşırsınız.

Bir makalemizin daha sonuna geldik.Umarım yararlı bir makale olmuştur.

Erkan Derviş

www.ErkanDervis.com

ErkanDervis@gmail.com