11 Mayıs 2013 Cumartesi

Veritabanı - 7... MonthCalender ile Tarih Verilerini Almak ve Sıralama Yapmak...

Örneğimizde yine okul tablosunu kullanacağız... Okul tablosunda bulunan yaş verilerine göre bir sıralama yapmak istiyoruz... MonthCalender ile seçilecek olan tarihde doğmuş olan bütün öğrencileri listeleyecek bir veritabanı örneği gerçekleştireceğiz... Listeleme yaparkenden öğrencilerin sıra numarasını göz önünde bulunduracağız.... OrderBy komutunun kullanımı göreceğiz... 

İlk aşamada veritabanımızı hazırlıyoruz... Dikkat edileceği gibi Yas isimli alanımızı Tarih/Saat veri tipinde belirledik...


Access de verilerimizi giriyoruz... Burada sıralama örneğinde kullanmak için iki öğrencinin yaş bilgilerini aynı girdirdik...


Form tasarımını aşağıdaki gibi yapıyoruz... Amacımız form açıldığında datagridview de tablonun tamamının gelmesi ve sonra MonthCalender ile seçilen tarih de doğanların datagridview de gösterilmesidir...

Program çalıştığında görüntü aşağıdaki gibi olacaktır... 

Bir tarih seçildiğinde o tarih de doğanlar varsa aşağıdaki gibi bir görüntü olacaktır...


Örneğimizdeki kod kısmı ise aşağıdaki gibi olacaktır... 

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;
using System.Data.OleDb;

namespace Kaydet_5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // Veritabanı bağlantılarımızı yapıyoruz... 
        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=okul.mdb");
        OleDbCommand komut = new OleDbCommand();
        string sor = "";

        // Formun açılışında bütün verileri datagridview e numara sırası ile getiriyoruz... 
        private void Form1_Load(object sender, EventArgs e)
        {
            sor = "Select * From ogrenci Order By [No]";
            veritaban(sor);
        }

        // Her hangi bir tarih seçildiğinde datagridview de sonuçları göstermesi için aşağıdaki olayı kullanıyoruz... 
        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            // Seçili tarih bilgisini alıyoruz...
            String tarih = monthCalendar1.SelectionRange.Start.Date.ToShortDateString();

            // Seçilmiş olan tarih ile veritabanında aratma yapıyoruz ve o tarihde doğanları numara sırasına göre listeliyoruz... 
            sor = "SELECT * FROM ogrenci WHERE yas = DateValue( '" + tarih + "')  order by [No]";
            veritaban(sor);
        }

        // Bu metod sayesinde kod tekrarından kurtuluyoruz... Her seferinde datagridview de göstereceğimiz kodlar için 
        // burada bulunan metoda sadece sorgu cümleciğini gönderiyoruz... 
        void veritaban(string sorgu)
        {
            baglanti.Open();
            komut.CommandText = sorgu;
            komut.Connection = baglanti;

            OleDbDataAdapter da = new OleDbDataAdapter(komut);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = ds.Tables[0].ToString(); // Datagridview ile ilgili tek tablo olduğu için 0 değerini verdik...

            baglanti.Close();
        }
    }
}

* Formun açılışında bilgilerin gelmesi için FormLoad olayını kullandık... 

* MonthCalender üzerinde her hangi bir değişiklik olayını algılamamız için changed olayını kullandık... Seçili olan tarihi bir string değişkene aldırdık... Bu işlemi yaparken sadece kısa tarih özelliğini aşağıdaki komuttaki gibi kullandık...

 monthCalendar1.SelectionRange.Start.Date.ToShortDateString();

* Datagridview e bilgileri yazdırmak için bir metod kullandık... Her hangi bir değişkene geri değer döndürmeyeceğimiz için void olarak metodumuzu tanımladık... İki defa bu metodu çağırdık ve programda her tarih seçimi yapıldığın da kullanılmaya devam edecektir... 

* order by sıralama işlemleri için kullandığımız sql komutudur... Burada order by dan sonra alan ismi olarak numarayı verdiğimiz için öğrencilerin numarasına göre sıralama yapmaktadır...

* Aynı şekilde where komutu ile sadece bazı verilerin gelmesini istiyoruz... Yas alanı ile kıyaslama yapıyoruz... Yas alanı tarih/saat veri tipinde tanımlamıştık... Bu sebeple seçili olan bilgimizi gönderirken DateValue çevrimini kullanıyoruz... 


"SELECT * FROM ogrenci WHERE yas = DateValue( '" + tarih + "')  order by [No]"

Uygulama örneğimiz bu şekilde bitmiş oluyor...