Visual Studio ile Rapid Development hayatımız çok değişmiştir. Visual diller ile bize hız, esneklik ve pratikliği bir arada sunar. Bu makalemiz ile bu konu üzerine bir başlangıç yaparak hızlı ve pratik bir şekilde uygulama geliştirme konusunda bir makale dizisi oluşturacağım. Tabii ki makalelerimizin baş rol oyuncusu “DataSet” nesnesi olacaktır. Sözü fazla uzatmadan yapacağımız projelerin ne olduğuna kısaca değinmek istiyorum. Bu makale dizisi boyunca “Northwind” veritabanından yararlanarak bazı ekranlar oluşturacağız.. Bu sayede “DataSet” ile yapabileceğiniz işlemleri ve kolaylıklarına değinmiş olacağız..
- Arama formu.. (Search Form)
- Birden çok’a filitreleme formu.. (One To Many Filter)
- Hızlı gözat listesi içeren form.. (Lookup List)
Creating Search Form With Dataset
Evet ilk makale konumuz olan Arama formu oluşturmayı bir de dataset nesnesinden dinlemeye başlayalım.. 🙂
Örnek bir proje oluşturuyoruz.. Ben projenin ismine “CreatingSearchFormWithDataSet” verdim. Projemize 1 adet “Form” ekliyoruz.. Ardından visual studio “Data” menüsünden “Show Data Sources” bölmesinin açılmasını sağlıyoruz..

Bu bölmeden “Add New Data Source…” link’ine tıklıyoruz.. Ya da bu bölmedeki sol üst köşedeki veritabanı simgesine tıklayabilirsiniz..

Ardından aşağıdaki adımları takip ederek DataSet nesnemizi oluşturuyoruz..





Dataset nesnemiz visual studio tarafından seçtiğimiz tablo ve kolonlardan oluşacak şekilde oluşturuluyor..

“CustomerDataSet” nesnemizin “Customers” tablosunu seçerek “Form1” üzerine sürükleyerek bırakıyoruz.. Visual Studio bizim için şunları yapıyor;

- 1 adet “CustomerDataSet” nesnesi ekliyor. Bu Data Sources bölümünde oluşturduğumuz Data set nesnesinin bir örneği(instance) olmaktadır.
- 1 adet “Binding Source” nesnesi ekliyor. Bu nesnenin “DataSource” özelliğini “CustomerDataSet” ; “Data Member” özelliğini “Customers” tablosunu işaret edecek şekilde ayarlıyor.
- 1 adet “Binding Navigator” nesnesi ekliyor. formun üst kısmıdaki navigation ‘ı içeriyor. Bu navigator nesnesinin Data Source özelliğine oluşturulan Binding Source bağlanmıştır.
- 1 adet “customersTableAdapter” nesnesi ekleniyor. Bu nesne “Sql Adapter” nesnesinin, oluşturduğumuz CustomerDataSet’i içindeki “Customers“ tablosu için özelleştirilmiş halidir.
- 1 adet “tableAdapterManager” nesnesi ekleniyor. Bu nesne formunuz üzerinde kullandığınız “CustomerDataSet” ile ilişkili tüm adapter nesnelerini içinde barındırarak tüm adapter nesnelerini merkezi bir yerden yönetmemizi sağlar. Örneğin; “customersTableAdapter” bu nesne tarafından otomatik olarak tanımlanmıştır ve yönetilir. Eğer dataset nesnemize başka bir tablo daha eklersek, o tabloya ait otomatik olarak oluşturulacak olan “[Tabloİsmi]TableAdapter” nesnesi gene otomatik olarak bu “tableAdapterManager” nesnesine bağlanacaktır.

Bu işlemlerin ardından form üzerinde oluşturulan DataGridView kontrolünü seçiyoruz ve “Properties” bölümünden “Anchor” özelliğini resimdeki gibi ayarlıyoruz. Böylece form boyutu ile oynandığında DataGridView ‘da boyutlanacaktır.
Kod tarafına baktığımızda bizim için bazı otomatik kodlamaların yapıldığını görüyoruz.
Code Snippet
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CreatingSearchFormWithDataSet
{
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e) {
this.Validate();
this.customersBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.customerDataSet);
}
private void Form1_Load(object sender, EventArgs e) {
// TODO: This line of code loads data into the 'customerDataSet.Customers' table.
// You can move, or remove it, as needed.
this.customersTableAdapter.Fill(this.customerDataSet.Customers);
}
}
}
Bu kodlar ile form ilk yüklendiğinde “customerTableAdapter” nesnesi ile “CustomersDataSet” içindeki “Customers” tablomuz dolduruluyor. Bir de form’ üzerindeki “Navigator” üzerindeki “Kaydet(Save)” butonuna basıldığında “CustomersDataSet” üzerinde yapılan tüm işlemler kaydediliyor.
Dikkat !!
Sadece “Customers” tablosu değil, tüm tablolardaki değişiklik yapılmış satırlar veritabanına gönderilerek işlemler yapılıyor. Bizim projemizde sadece “Customers” tablomuzu seçtiğimiz için zaten 1 adet tablo bulunmaktadır. Fakat diğer tablolarıda dataset nesnemize eklediysek ve bu tablolarda da “Ekleme(Insert)”, “Güncelleme(Update)”, “Silme(Delete)” işlemleri yaptıysak, bu değişiklikleri yaptığımız satırlar(tüm tablolar değil) adapter nesnesi üzerinden güncelleniyor. İşte burada “AdapterManager” her tablo için özel oluşturulan adapter nesnelerini kullanarak bu işlemleri tek bir noktadan yapıyor.
Uygulamamızı bir çalıştıralım ve neler yapıldığına bakalım.

Evet gördüğünüz gibi verilerimiz yüklendir. Navigator üzerinde gördüğünüz işlemler çalışmaktadır. Yani bir kolondaki veriyi değiştirip “Kaydet(Save)” butonuna basarsanız. Veritabanına güncelleme yapılacaktır. Ya da bir satırı seçip sildiğinizde ve tekrar “Kaydet(Save)” butonuna bastığınızda ilgili satır veritabanından silinecektir. Ya da “+” butonuna basarak yeni bir satır oluşacaktır ve bu satır içine “boş bırakılamayacak” verileri girerek tekrar “Kaydet(Save)” butonuna basarsanız veritabanına yeni kayıt eklenecektir. Burada dikkat ettiyseniz yeni kayıt ekleme, güncelleme, silme işlemlerini yaptıktan sonra “Kaydet(Save)” butonuna bastığımızda işlemler veritabanında gerçekleştirilmektedir. Yani kaydetme işlemi yapmadıkça, yaptığınız işlemleri iptal etme şansınız var demektir. 🙂
Dikkat !!
Bazı tablolarda kayıt silme işlemi yaparken hata ile karşılaşabilirsiniz. Bunun sebebi büyük olasılıkla; silmek istediğiniz tablodaki kaydın ilişkili olduğu bir tabloda kullanılmasından kaynaklanır. Önce alt tablodaki kayıtların silme işlemini yapıp bu kaydı silerseniz sorunsuz olarak kaydın silinmesini sağlamış olursunuz.. İlerleyen yazılarımızda bununla ilgili örnekte yapacağız..
Şimdi oluşturacağım basit bir senaryo üzerinden ilerleyelim. Buraya kadar herşey güzel verilerimiz veritabanından listeliyoruz. Yeni kayıt ekleme, silme, güncelleme işlemlerini yapabiliyoruz. Peki belli bir kolona göre arama yapmak istersek bunu nasıl yapacağız. 1 textbox ve 1 buton koyup pataküte kod yazacağız.. Tabii ki hayır.. 🙂 Dataset nesnesi tasarlanırlen çoğu programda olan ortak işlemler düşünülmüş ve bunlara uygun bir nesne oluşturulmuştur. Şimdi senaryomuza uygun olarak programımızda “City” ve “Contact Title” kolonları üzerinde arama yapılmasını sağlayalım.

Uygulamamızı kapatıyoruz ve tasarım ekranında “DataGridView” kontrolümüzü seçiyoruz. Sağ üst köşesindeki “Küçük okçuk” ‘a tıklayarak “Add Query” linkine tıklıyoruz..

Ekranın üstünde şu açıklama yazıyor.. Varolan ya da yeni bir sorgu girin. Bir ToolStrip kontrolü eklenecek ve bu kontrol ile sorgunuz çalıştırılacaktır. Varolan bir sorguyu değiştirmek ya da stored procedure kullanmak istiyorsan, dataset designer ‘daki ilgili tabloya ait “adapter” üzerindeki “Command” ayarını kullanın.
Biz o değişikliği daha sonra yapacağız.. 🙂 Yukarıdaki resimde gördüğünüz gibi “FillByCity” olarak yeni bir sorgu oluşturacağımı belirttim diyerek “Query Builder…” butonuna basıyorum..

İlk önce “City” alanının “Filter” bölümüne “ LIKE @City + ‘%’ ” ifadesini yazıyoruz. Böylece “ @City ” değişkeni ile göndereceğimiz değer ile başlayan şehirlerin listelenmesini sağlayacaktır. Listeleme sonucunda elde edilen veriler “City” kolonuna göre A’dan Z’ye sıralanması için “Sort Type” alanı “Ascending” olarak seçtim.

“Execute Query” bastığımızda bizden “ @City ” değişkenin değerini isteyecektir. “Lon” yazarak “OK” bastığınızda “London” değerine sahip satırlar gelecektir. Sorgumuz hazır “OK” basarak “Query Builder…” ekranını sonlandırıyoruz..

Bu ekranda yazdığımız sorgumuz görünmektedir. Bu ekranıda “OK” diyerek sonlandırıyoruz. Form’umuza otomatik olarak City kolonu üzerinden arama yapan ToolStrip kontrollerimi eklenecektir.


Biraz görsellik yaparak makalemizi sonladıralım. Yeni eklenen “ToolStrip” kontrolünü ve onun içindeki kontrolleri görmüşsünüzdür. “City :” yazan label’ı “Bold”, “FillByCity” yazan butonoda yeni bir “Image” ekliyorum. “DisplayStyle” özelliğini “Image” olarak ayarlamayı unutmayın !

Uygulamamızı çalıştırıyoruz..

Gördüğünüz gibi aranılan kelime ile başlayan tüm kayıtlar listelendi. Çok hızlı bir şekilde “ContactName” ve “ContactTitle” kolonları içinde arama özelliği kazandıralım.




City Alanına Göre Arama

Contact Title Alanına Göre Arama

ContactName Alanına Göre Arama

Eğer arama alanlarını tek bir menü satırında toplamak isterseniz; Navigator’ı seçiyoruz ve “Smart Tag(Sağ üstteki küçük okçuk)” ‘dan “Embed in ToolStripContainer” seçin.

DataGridView’ı Oluşan panel’in içine atın ve DataGridView’ın “Dock” özelliğini “Fill” olarak ayarlayın..

Sırası ile yukarıda kalan arama ToolStrip kontrollerini kes yaparak Navigator ‘ın bulunduğu panel’i genişletin ve yanında boş bir alana yapıştır’ın. Aynı işlemi hepsi için yapın.

Tüm arama alanlarını bu alana taşıdıysanız. Bu panel’in “Dock” özelliğini “Fill” yapın. Sonra her bir arama ToolStrip’inin taşınabilir olduğunu göreceksiniz. İstediğini gibi düzenleyebilirsiniz.. Ben hepsini alt satırda yan yana dizdim..

Bu kes – yapıştır işleminde kestiğiniz kontrolün olay bağlantıları kopuyor. Bu bağlantıları tekrar yapmanız gerekmektedir. Sadece ilgili kontrolü seçip, ilgili olayına gelerek bağlı olduğu metodu seçin. Aşağıdaki resmin solundaki gibi. City arama butonunu seçtim ve “Click” olayını, ilgili metoduna bağladım.

Uygulama çalışıyor süper.. 🙂

Herkese iyi çalışmalar..
Bunu beğen:
Beğen Yükleniyor...