BTP206 – Görsel Programlama II VeriTabanı İşlemleri II
İçerik Veritabanına yeni bir kayıt ekleme Var olan bir kaydı değiştirme Bir kaydı silme Çoklu tablolardan veri görüntüleme
3. Programı yazalım Projemize yeni bir veritabanı dosyası ekleme Öğrencileri görüntüleme Yeni öğrenci ekleme Öğrenci bilgilerini değiştirme Bir öğrenciyi silme Bir öğrencinin aldığı bütün dersleri görüntüleme
c) Yeni öğrenci ekleme
“frmNewStudent” adında yeni bir form tbFirstName tbLastName calBirthDay numAge btnOK with DialogResult = OK btnCancel with DialogResult = Cancel
StudentsTableAdapter nesnesini sürükle-bırak yöntemiyle forma ekleme
Ok butonuna çift tıklanır ve aşağıdaki kod bloğu yazılır studentsTableAdapter1.Insert( tbFirstName.Text, tbLastName.Text, calBirthDay.Value, (short)numAge.Value);
Ana forma yeni bir buton ekleme
Butona çift tıklanır ve aşağıdaki kod bloğu yazılır: frmNewStudent frm = new frmNewStudent(); DialogResult result = frm.ShowDialog(); if (result == DialogResult.OK) { studentsTableAdapter.Fill( schoolDataSet.Students); }
Programın çalışması
“New Student” butonuna çift tıklanır, veriler girilir, ve OK butonuna basılır
Bazı notlar Eğer programı kapattıktan sonra, programınızda bazı değişiklikler yapıp daha sonra tekrar derleyip çalıştırırsanız, son eklediğiniz kayıtların silinmiş olduğunu göreceksiniz! Bunun nedeni, programınızı her derlediğinizde, orijinal veritabanı dosyası Debug klasörüne kopyalanır ve yaptığınız her işlem bu kopya üzerinde gerçekleşmesidir.
Öğrenci bilgisi değiştirme
"frmNewStudent” benzer şekilde yeni bir “frmChangeStudent” formu oluşturun
Kontrollere veri bağlama Kontrolleri veri ile doldurmak için,kontrollerin içeriğini değiştirmek yerine data binding özelliği kullanılır. frmChangeStudent formu, seçilen öğrencinin bilgilerini görmek için StudentID bilgisine ihtiyacı vardır. Bu amaç için, frmChangeStudent formu içerisinde yeni bir property(özellik) oluşturulur. Bu özellik, student ID’yi ana formdan frmChangeStudent formuna transfer eder.
Sınıf tanımlama içinde , “prop” yaz
2 defa “Tab” tuşuna bas
Özelliğin tipi “int” ve ayarlı, bu yüzden “Tab” taşuna bas
Özelliğin ismini“StudentID” olarak belirle
Bütün boşluklar dolduruldu, “Enter”tuşuna bas. Özellik hazır!
Kontrolleri bağlama
“First Name” text box’ını seç “First Name” text box’ını seç. Özellikler penceresindeki “DataBindings” bölümüne bak
Textbox’ın text özelliği bağlanmak isteniyor, Bu yüzden “Text” kısmını seç
Sağdaki ok işaretini tıkla
“Other Data Sources”’un yanındaki + işaretine tıkla
“Project Data Sources”’ın yanındaki + işaretine tıkla
“SchoolDataSet”’ın yanındaki + işaretine tıkla
“Students”ın yanındaki + işaretine tıkla ve “FirstName” alanını seç
Text şu an bağlandı ve 3 kontrol gözüküyor
“Last Name” text box’ını bağla
Takvim nesnesinin “Value” ( “Text” değil) özelliğini bağla
numeric up/down nesnesinin “Value” özelliğini bağla
Formun “Load” olayına “Fill”kodu eklenir
“Fill” yerine“FillByStudentID” Sadece tek bir öğrencinin verisi görüntülenmek istenebilir. Bunun için , Fill metodu yerine FillByStudentID metoduna ihtiyaç vardır. Satırı silin ve alttaki kodu yazın: this.studentsTableAdapter.FillByStudentID( this.schoolDataSet.Students, this.StudentID);
Formun Load olayı
OK Butonu Form görüntülendiğinde, kontroller üzerinde öğrencinin verisi görünür. Kullanıcı bu bilgileri değiştirir ve OK butonuna basar. Bu yüzden, OK butonunun Click olayı içerisine güncelleme kodunu yazmak gerekir.
Veritabanını güncelleme Kullanıcı tarafından yapılan değişiklikler veri setine uygulanmak zorundadır. Bu işlem BindingSource nesnesinin EndEdit() metodu ile yapılır. Veri seti üzerindeki değişiklikler studentTableAdapter nesnesinin Update() metodu ile veritabanına uygulanır.
OK Butonu tıklama olayı Ok butonuna çift tıklanır ve aşağıdaki kod bloğu yazılır: this.studentsBindingSource.EndEdit(); this.studentsTableAdapter.Update( this.schoolDataSet.Students);
Bütün kodlar
Student ID tespiti StudentID özelliği ile belirlenen öğrencilerin bilgileri görüntülenip güncellendi. Ancak, form gözükmeden önce bu özelliği ayarlamamız gerekir. Bu işlem ana form üzerinden yapılmalıdır.
Seçili öğrencinin ID bilgisini tespit DataGridView nesnesi üzerinden seçili öğrencinin ID bilgisi 2 yolla tespit edilir: Seçili satırın ilk hücresi veya DataGridView üzerinden tespit edilir. binding source nesnesi üzerinden ID tespit edilir.
1. DataGridView üzerinden ID tespiti int studentID = (int)dataGridView1.SelectedRows[0].Cells[0].Value; Bu kodun başarılı bir şekilde çalışması için DataGridView nesnesinin MultiSelect özelliği False ve SelectionMode özelliği FullRowSelect olarak ayarlanır.
2. Binding source üzerinden ID tespiti DataGridView nesnesi içinde bir satır seçildiğinde, seçilen satır hakkında bilgi, binding source nesnesi içinde saklanır. StudentID tespiti aşağıdaki kod bloğu ile olur: DataRowView rowView = (DataRowView)studentsBindingSource.Current; SchoolDataSet.StudentsRow row = (SchoolDataSet.StudentsRow)rowView.Row; int studentID = row.StudentID;
frmChangeStudent dialog oluşturma ve student ID tespiti Ana form üzerine “Change Student Info” metinine sahip yeni bir buton ekleyin. Bu butonun Click olayı içerisine bir sonraki slaytta verilen kod bloğunu yazın.
DataRowView rowView = (DataRowView)studentsBindingSource DataRowView rowView = (DataRowView)studentsBindingSource.Current; SchoolDataSet.StudentsRow row = (SchoolDataSet.StudentsRow)rowView.Row; int studentID = row.StudentID; frmChangeStudent frm = new frmChangeStudent(); frm.StudentID = studentID; DialogResult result = frm.ShowDialog(); if (result == DialogResult.OK) { // Update the DataGridView: this.studentsTableAdapter.Fill(this.schoolDataSet.Students); }
Programı çalıştırın, bir öğrenci seçip, “Change Student” butonuna tıklayın
Öğrenci bilgisi görünür:
Değişkenleri değiştirip OK butonuna basın
Veri değişti!
e) Bir öğrenci silmek
Ana form üzerine “Delete Student” adında yeni bir buton ekleyin
Butona çift tıklayın ve aşağıdaki kod bloğunu yazın: // Seçili satırı belirleme: DataRowView rowView = (DataRowView)studentsBindingSource.Current; SchoolDataSet.StudentsRow row = (SchoolDataSet.StudentsRow)rowView.Row; // Öğrenciyi silme: this.studentsTableAdapter.Delete(row.StudentID, row.FirstName, row.LastName, row.BirthDay, row.Age); // DataGridView güncelleme: this.studentsTableAdapter.Fill(schoolDataSet.Students);
f) Bir öğrencinin aldığı bütün dersleri görüntüleme
Forma “Display Courses” adında yeni bir buton ekleyin
“frmStudentCourses” adında yeni bir form oluşturun
DataGridView nesnesinin veri kaynağını “Courses” olarak seçin
coursesTableAdapter nesnesinin içindeki “Add Query…” komutuna tıklayın
Query name kutusu içerisine “FillByStudentID” yazın ve “Query Builder” tıklayın
Boş bir alanda sağ tıklayın ve “Add Table…” komutunu seçin
Enrolment ve Students tablolarını seçip Add butonuna tıklayın
Tablolar Query Builder içinde gözüktü, Close butonuna basın
Tablolar otomatik olarak CourseID ve StudentID alanlarına bağlandı
Boş bir kolon “Column”(kolon) hücresini seçip “Students Boş bir kolon “Column”(kolon) hücresini seçip “Students.StudentID” olarak belirleyin
Kolonun “Filter” özelliğine gelin ve “=?” yazın
Kolonun “Output” özelliğine gelin ve check box kutusunu temizleyin
Eğer yazılan sorgu çalıştırılmak istenseydi, OK butonuna basılıp önceki sayfaya gidilmesi gerekirdi
OK butonuna basın ve programa geri dönün
toolstrip seçin ve silin
Kod görünümüne geçin ve StudentID adıdna yeni bir özellik ekleyin
Formun load olayına gelin ve kodu değiştirin
Ana forma geri dönün ve “Display Courses” butonuna çift tıklayın
Click olayı içerisine aşağıdaki kod bloğunu yazın
Programı çalıştırın, bir öğrenci seçin, ve “Display Courses” butonuna tıklayın
Öğrenciler tarafından alınan dersler görüntülendi ama öğrencilerin isim ve soy isimleri gözükmüyor
“First Name” labelini seçin ve bunun Text özelliğini aşağıdaki gibi “FirstName” alanına bağlayın
“Last Name” labelini seçin ve bunun Text özelliğini aşağıdaki gibi “LastName” alanına bağlayın
Load olayına gelin ve Fill metodunu FillByStudentID metoduyla değiştirin
Programı çalıştırın, bir öğrenci seçin, ve “Display Courses” butonuna tıklayın
Öğrencinin isim ve soy isim bilgisi görüntülendi!