15 Aralık 2013 Pazar

Veritabanı - 12... Comboboxdan DataGridViewe Bilgi Getirmek...

Comboboxda yaptığımız tercihler önemlidir... Yaptığımız tercih işlemine göre programda bir şeylerin değişmesini isteriz... Hatta veritabanından bazı bilgilerin gelmesi veya veritabanına bilgi kaydetmeyi bile isteyebiliriz... Bu program parçasında veritabanın da olan tarih verilerine göre garanti süresi devam eden bilgisayar parçalarını göstereceğiz... Bunun için aşağıdaki veritabanını kullanacağız... 



Veritabanımızın adı bilsay, tablomuzun adı ise Stok olacaktır... 

Burada Alınan Tarih ve Garanti alanları bizim için önemli olacaktır... Alınan Tarih üzerine garanti süresini yıl olarak ekleyeceğiz... Çıkan tarih eğer şu anki tarihden daha büyük ise garanti süresi devam ettiği için datagridview de göstereceğiz... Ama bunu sadece stokta kalan ürünler için göstereceğiz... Bu durumda Kalan alanı = 0 olanlar için garanti süresine bakmayacağız... 

Programımızın Form sayfası aşağıdaki gibi olacaktır... Comboboxın listelerine program açılmadan Hepsi ve Garanti seçeneklerini ekleyelim... 

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

Garanti seçimi yapıldıktan sonra aşağıdaki gibi gözükecektir... 

Programımızın kodları aşağıdaki gibidir;

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 WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bilsay.accdb");
        OleDbCommand komut = new OleDbCommand();
        OleDbDataAdapter da;
        DataSet ds = new DataSet();

        void doldurdatagridview1(string sorgu)
        {
            ds.Clear(); // Datagridview her doldurulduğunda bir önceki veriler gözükmemesi için temizleniyor...

            baglanti.Open();
            komut.CommandText = sorgu;
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);
            da.Fill(ds,"StokTablo"); // Burada kullanılan "StokTablo" ismi datagridview olaylarının hepsinde kullanılır...
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "StokTablo";
            dataGridView1.Columns["Kimlik"].Visible = false; // Kimlik alanı datagridviewde gözükmesin...
            dataGridView1.Columns["Kalan"].Visible = false; // Kalan miktarı datagridviewde gözükmesin...
            baglanti.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            doldurdatagridview1("Select * From Stok"); // Veritabanındaki bütün veriler gösteriliyor...
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Garanti") // Garanti süresi devam edenler
                doldurdatagridview1("Select *  From Stok Where DateAdd('yyyy',[Garanti],[Alınan Tarih])>Now()  And [Kalan]<>0");
            else if (comboBox1.Text == "Hepsi") // Stokta olan ve olmayan hepsi gözüküyor...
                doldurdatagridview1("Select * From Stok"); 
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit(); // Programı tamamen sonlandırmak için kullanılır... 
        }
    }
}

Program kod satırında bazı önemli noktalar vardır. 
*  ds.Clear();
DataGridView içerisini temizleyen komuttur... Çünkü combobox her seçim yapıldığında DataGridView temizlenmelidir... Aksi takdirde veriler üst üste binecek ve hepsi gözükecektir...

*  dataGridView1.Columns["Kimlik"].Visible = false; 
DataGridView içerisinde verintabanın da olan alanlardan göstermek istemediğimiz olursa bu komut satırı ile göstermeyebiliriz... Kimlik alanı ve Kalan alanı veritabanın da olmasına rağmen DataGridView de gösterilmemektedir... 

* doldurdatagridview1("Select *  From Stok Where DateAdd('yyyy',[Garanti],[Alınan Tarih])>Now()  And [Kalan]<>0");
DateAdd komutu verilen tarihin üstüne istenilen kadar tarih eklemektedir... Buradan yyyy ifadesi yerine m veya d ifadesi kullanılırsa yıl yerine, ay veya gün eklenerek yeni tarih bulunabilmektedir... Now() ise bilgisayarın tarihini göstermektedir... Çıkan tarih ile bilgisayarın tarihi kıyaslanmaktadır... 

And ifadesi birden fazla şart olması durumunda kullanılmaktadır... Biz burada Stokta olmayan ürünleri göstermek istemediğimiz için [Kalan]<>0 ifadesini kullanmaktayız... <> ifadesi eşit değil anlamındadır...