C# datagridview kullanımı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# datagridview kullanımı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

25 Şubat 2014 Salı

Veritabanı Ders Uygulamaları - 5

Update işlemine örnek oluşturacak olan bir çalışma yapacağız... Aşağıdaki form tasarımını gerçekleştiriniz... Text kutularının groupbox içerisinde olmasına özen gösteriniz... 

















Yine aynı şekilde aşağıdaki veritabanı tasarımını gerçekleştiriniz... Bu işlemi yaparken Kimlik değerini otomatik sayı olarak tanımlamayı unutmayınız... 













Çalışma sırasında tablodan seçmiş olduğumuz ürün bilgileri textlerde gösterilecek ve üzerinde değişiklik yapıldıktan sonra ürün düzenle butonuna basıldığı anda update komutu ile güncelleme yapılacaktır... 

1 - Veritabanı temel bağlantılarını ve da, ds değişkenlerini tanımlayınız...

2 - Aşağıdaki değişkenleri Global olarak tanımlayınız... 
        int kimliktasi = 0;            // Datagridview de seçili olan ürünün kimlik numarası...
      string urunad = "";         // Ürün bilgilerinin yedeğini almak için bu değişkenleri tanımladık... 
        string urunalt = "";
        string urunozellik = "";

3 - Datagridviewi dolduracağımız metodu aşağıdaki gibi hazırlayınız... 
void doldurdatagridview1()
        {
            ds.Clear();
            baglanti.Open();
            komut.CommandText = "Select * From yeniurun Order By [Adı]";
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);
            da.Fill(ds, "Tablo");
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "Tablo";
            dataGridView1.Columns["Kimlik"].Visible = false; 
            baglanti.Close();
        }

4 - Veritabanında update işlemi yapacağımız metodu aşağıdaki gibi oluşturunuz...
void guncelleveritabanı(string sorgu)
        {
// Buradaki komutları siz doldurunuz... 
        }

5 - Güncelleme işlemleri sırasında ürünün daha önceki bilgileri ile aynı girilmesini engellemek için değerlerini değişkenlere alacağımızı söylemiştik... Bir metod ile datagridview de seçili olan ürünün bilgilerini urunad, urunalt ve urunozellik isimli değişkenlere alıyoruz... Bu işlem için aşağıdaki metodu kullanıyoruz...
void getir(string sorgu)
        {
            // Bağlantı ile ilgili giriş komutlarını doldurunuz...
            while (oku.Read())
            {
                    textBox1.Text = oku["Adı"].ToString();
                    textBox2.Text = oku["Tanım"].ToString();
                    textBox3.Text = oku["Özellik"].ToString();
                    urunad = textBox1.Text; urunalt = textBox2.Text; urunozellik = textBox3.Text;
            }
            // Bağlantı ile ilgili çıkış komutlarını doldurunuz... 
        }

7 - Form giriş olayında groupbox ı pasif duruma getiriniz... Bu sayede veri düzenleme işlemi yapılmasını engelleyelim... Aynı zamanda datagridview e bilgileri doldurunuz... 

8 - Datagridview in aşağıdaki olayını etkinleştiriniz...
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

9 - Bu olayın içerisinde groupbox ı aktif hale getiriniz... Aynı zamanda aşağıdaki satırlar ile hem kimlik numarasını alalım, hem de kimlik numarasına ait olan verileri değişkenlerimiz de saklayalım...
kimliktasi = int.Parse(ds.Tables["Tablo"].Rows[e.RowIndex]["Kimlik"].ToString());
// Burada getir metodu ile kimliktasi değerine göre sorgulama yaptırınız...

10 - En son olarak ürün düzenle butonun içerisine yazılacak olanlara bakalım... Öncelikle veri düzenleme yapmadan hem textlerin içerisinin dolu olduğunu hemde düzenleme yapılmadan geçilmemesi gerektiğini aşağıdaki gibi bir if ile yapalım... 
if (textBox1.Text == "" || textBox1.Text == urunad)
  MessageBox.Show("Yeni ürün adı giriniz...");
else if // Devamını siz doldurunuz...

11 - Bütün şart kontrolleri yapıldıktan sonra her hangi bir aksilik yok ise veritabanında güncellemeyi yapınız...
guncelleveritabanı("Update yeniurun Set [Adı]= '" + textBox1.Text.ToUpper() + "', [Tanım]= '" + textBox2.Text.ToUpper() + "',[Özellik]= '" + textBox3.Text.ToUpper() + "' Where [Kimlik]=" + kimliktasi); 

12 - Datagridview i yine bu buton içerisinde doldurunuz...

13 - groupboxı pasif hale getirerek ve textlerin içeriğini temizleyerek programı bitiriniz... 

13 Şubat 2014 Perşembe

Veritabanı Ders Uygulamaları - 6

DataGridView içerisinde seçilmiş olan ürünün istediğimiz bilgilerini anında labellar üzerinde gösteren bir veritabanı uygulaması gerçekleştireceğiz... Uygulama sürecinde datagridview in üzerinde verilerin gösterilmesi olayının yanında aynı zamanda datagridview üzerinde seçim yapıldığında olan değişiklikleri de göreceğiz...

1 - Öncelikle bilsay adında aşağıdaki veritabanımızı hazırlıyoruz... Bunun içerisinde stok adında bir tablo oluşturuyoruz...









2 - Bu veritabanımızda kimlik alanı otomatik sayı olarak tanımlanacaktır... Bunun dışında diğer bilgilerin tanımlamaları zaten bellidir...

3 - Kullanacağımız veritabanını bin/debug klasörünün altına yerleştiriyoruz...

4 - Aşağıdaki form tasarımını gerçekleştiriyoruz...

















5 - Sağ taraftaki labelların içeriklerini de silerek her hangi bir şekilde uygulama açıldığında görünmesini engelliyoruz...

6 - Uygulamamız açıldığı zaman otomatik olarak ilk verinin içeriğini sağ tarafta göstermeyecektir. Ondan sonra datagridview üzerinde tıklanan her hangi bir verinin içeriğini de göstermeye başlayacaktır... RowEnter olayını kullansaydık otomatik olarak veriyi gösterecekti...

7 - Kod kısmına geçelim... baglanti ve komut değişkenlerimizi aşağıdaki örneğe benzer şekilde tanımlıyoruz...
OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=okul.mdb");
OleDbCommand komut  = new OleDbCommand();

8 - Aynı zamanda datagridview de kullanacağımız dataset ve dataadapter değişkenlerimizi de tanımlıyoruz...
OleDbDataAdapter da; DataSet ds = new DataSet();

9 - Datagridviewde bilgilerin görünmesini sağlayacak olan bir metod tanımlıyoruz... Bu işlemi yaparken bir metoda sorgu işlemini gönderebileceğimiz bir string türünde bir parametre tanımlıyoruz... Aşağıdaki örneğe benzer bir yapıyı metod içerisinde oluşturuyoruz...
         baglanti.Open();
            komut.CommandText = "Select * From ogrenci Where Adı = 'CPU'";
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);

            da.Fill(ds,"Tablo");
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "Tablo";
            baglanti.Close();

10 - Datagridview de değerler gösterilirken görünmesini istemediğimiz bazı alanlar var... Görünmesini istemediğimiz alanların aşağıdakine benzer bir örnekle metod içerisinde gizliyoruz...Kimlik, Kalan ve Dipnot alanlarını gizleyiniz...
dataGridView1.Columns["Ad"].Visible = false;

11 - Form load olayında datagridview i dolduracak olan sql komutunu metoda yolluyoruz... Bu sayede form açıldığı anda veritabanındaki bütün bilgiler datagridview içerisinde dolmuş olacaktır...

12 - Aşağıdaki datagridview olayını aktif hale getiriyoruz... Bundan sonra yazacaklarımızı bu kısmın içerisine yazacağız...
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

13 - Bu olayı kullanmamızdaki amaç tıklamış olduğumuz satıra ait olan kimlik numarasını bulmak... Çünkü kimlik numaralarını otomatik sayı olarak atadık ve hiçbir ürünün kimlik numarası bir diğeri ile aynı değil. Aşağıdaki komutu bu olayın içerisine ekliyoruz... 
kimlik= int.Parse(ds.Tables["Tablo"].Rows[e.RowIndex]["Kimlik"].ToString());

Yine aynı zamanda bilgileri labellar içerisinde görmek için birazdan tanımlayacağımız bilgileri goster metodunu da aşağıdaki gibi burada kullanıyoruz... 
bilgilerigoster(// Buradaki kısma alınan kimlik bilgisine ait veriyi  gönderecek olan bir sorgu yazınız);

14 - bilgilerigoster metodu ise sorguyu alacak olan bir parametre ile birlikte aşağıdakine benzer bir şekilde tanımlanacaktır...
baglanti.Open();
komut.CommandText = sorgu;
komut.Connection = baglanti;
OleDbDataReader oku = komut.ExecuteReader();
while (oku.Read())
            {
              label1.Text = oku["Adı"].ToString();
            }
oku.Close();
baglanti.Close();

15 - Programı çalıştırdığımızda aşağıdaki gibi bir çıktı oluşacaktır. Başlangıçta ekranda her hangi bir bilgi gözükmez iken daha sonra seçim yaparak labelları doldurmuş oluruz...











16 - Bu metod ile birlikte programı çalıştırdığımız zaman problem datagridview deki alan başlıklarına tıkladığımızda oluşan aşağıdaki hatadır.

Bu hatayı çözmek için farklı yöntemler vardır... Biz datagridview deki alan başlıklarının üzerine tıklama olayını cellclick olayına yazacağımız try-catch komutları ile önledik... Hata durumunda mesaj verdirmeden yoluna devam ettirmek için kodları try kısmına yazdık... Catch kısmına ise her hangi bir sıkıntı oluşmadığı için her hangi bir ekleme yapmadık...

17 - Form üzerinde her hangi bir alan başlığına tıklama yapıldığında ve daha sonra seçim yapıldığında da programda başka bir veriyi gösteriyor... Aşağıda görüldüğü gibi....











Bu sıkıntıdan kurtulmak için Form Load olayına aşağıdaki kodları ekledik... Bu sayede alan başlıklarına tıklama olayını ortadan kaldırmış oluyoruz... Tabii farklı yöntemler ile de bu sorun çözülebilirdi...
foreach (DataGridViewColumn x in this.dataGridView1.Columns)
                x.SortMode = DataGridViewColumnSortMode.NotSortable;

Bu haliyle programı bitirmiş olduk... 

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... 

23 Mart 2013 Cumartesi

Veritabanı - 3... DataGridview Kullanımı...


Veritabanı  - 1 dersin de kullanmış olduğumuz okul isimli access dosyası üzerinden yine bir uygulama yapacağız... Bunun için aşağıdaki formu tasarlayalım... Bu sayfaya bir adet  Tools penceresindeki Data kısmından datagridview eklemeyi de unutmayalım...

Kodlarımızı yine ara butonunun içerisine yazacağız... Aşağıdaki örnekte formun hemen girişinde veritabanında ki verileri alıp, datagirdview içerisinde gösteriyoruz... Bu kısmı sağlamak için formun load kısmına ilk kodlarımızı yazıyoruz... 

Önemli bir ayrıntıda access veri tabanında ki alanların hangi veri türü ile tanımlandığıdır... Burada aramayı No isimli alan adına göre yapacağız ve hatırlanacağı gibi bu alan adı sayı olarak tanımlanmıştı... 

Sayı olarak tanımlanan alanlarda SQL sorgusu yaparken ' işaretleri kullanılmamaktadır... Örnek: 
"SELECT * FROM ogrenci WHERE [No] = 12"

Halbuki metin olsaydı bu kısım sorgulama şu şekilde olmalıydı...
"SELECT * FROM ogrenci WHERE [No] = '12' "


Gördüğünüz gibi aradaki tek fark tırnaklardır... Bu sebeple sorgumuzu yaparken numaranın alındığı kısımda şöyle bir sorgu cümlesi yazılmıştır... Buraya textbox1 i nasıl eklediğimiz ile ilgili sıkıntılarınız varsa veritabanı 2 dersine bakınız... Ama şunu unutmayalım SQL komutlarının haricinde bir form nesnesi eklenecek ise " " işaretleri arasında verilir ve + + işaretleri ile eklenir... Aşağıdaki  örnekteki gibi form nesnesinden sonra SQL'e geri dönülmeyecek ve kod yazılmayacak ise " + işaretleri yeterli olacaktır...

komut.CommandText = "SELECT * FROM ogrenci WHERE [No] =" + textBox1.Text;

Örnek olması ve konunun tam anlaşılması için söylüyorum... Belki de biraz uzatıyorum... Buradaki No isimli alanın veri türü metin olsaydı SQL cümleciğimiz aşağıdaki gibi olmak zorundaydı... 

komut.CommandText = "SELECT * FROM ogrenci WHERE [No] = ' " + textBox1.Text + " ' ";

Programın çalışmasındaki ekran görüntüleri ise aşağıdaki gibi olacaktır... İlk açılış aşağıdaki ekrandaki gibidir..


Numara girilip ara butonuna basıldığında ise aşağıdaki ekran gelmiş olacaktır... 

Programın kodları ise aşağıdaki gibidir... Yanlarında gerekli görülen yerlerde açıklama satırları eklenmiştir... 


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

        // ÖRNEK - 3 : GİRİLEN NUMARA BİLGİSİ DATAGRİDVİEW YARDIMI İLE VERİTABANINDA GÖSTERİLİYOR...

        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= okul.mdb");
        OleDbCommand komut = new OleDbCommand();
        OleDbDataAdapter da;
        DataSet ds = new DataSet();

        /*DataSet; SQLDataAdapter veya OleDbDataAdapter nesnesinden gelen kayıtları çevrimdışı depolamak ve 
         * yönetmek için kullanılan sınıftır. DataSet tüm veri sağlayıcı sınıflar için ortaktır.
         * 
         * OleDbDataAdapter; Access veya diğer veritabanlarından çekilen verileri ilgili veritabanına
         * aktarmak için kullanılan sınıftır...
         */

        private void Form1_Load(object sender, EventArgs e)
        {
            komut.CommandText = "SELECT *  FROM ogrenci";
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);         // DataAdapter'e bilgiler alınıyor...
            da.Fill(ds, "tablo");                     // DataSet'e bilgiler "tablo" ismi ile dolduruluyor...
            dataGridView1.DataSource = ds;            // Dataset gridview'e bağlanıyor...
            dataGridView1.DataMember = "tablo";       // GridView e Dataset'teki bilgiler aktarılıyor...
        }

        private void button1_Click(object sender, EventArgs e)
        {
            /*Numaraya göre arama yapılıyor...
             * SQL komut cümleceğinde alan adında türkçe karakterler varsa [ ] ifadelerini kullanmamız lazım...
             * "SELECT * FROM ogrenci WHERE [No] = 12" olacak olan cümlede, " işaretinden sonra + işaretinden sonra 
             * kontrol nesnesi getiriliyor ...
             */
            komut.CommandText = "SELECT * FROM ogrenci WHERE [No] =" + textBox1.Text;
            komut.Connection = baglanti;
            
            da = new OleDbDataAdapter(komut);
            ds = new DataSet();
            da.Fill(ds, "tablo");
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "tablo";
        }
    }
}