C# ile SQL Tabanlı Yapılacaklar Listesi Hazırlama


C# ile SQL Tabanlı Yapılacaklar Listesi Hazırlama

Merhaba arkadaşlar. Bugünkü projemizde c# ile sql tabanlı yapılacaklar listesi hazırlayacağız.

İlk olarak veri tabanını hazırlayacağız.

ToDoList isminde yeni bir veri tabanı oluşturup resimdeki tabloyu oluşturuyoruz. Tablo adını tbl_yapilacaklar koydum.

  • Eklenme tarihi tabloya her veri eklendiğinde o anki tarihi tabloya kaydedecek.
  • Durum ise yapılacak şeyin tamamlanıp tamamlanmadığını gösterecek.

Tablomuzu oluşturduktan sonra visual studio’yu açıp projemizin tasarım kısmına geçiyoruz.

Tasarım kısmını geliştirebilirsiniz. Normal butonlar yerine ben devexpress’in araçlarından simple buton kullandım.

Kullanacağımız araçlar şunlar:

  • 5 buton
  • 1 richtextbox
  • 1 textbox
  • 1 checkbox
  • Datagridview

Kod kısmına geçmeden önce datagridview’in bazı özelliklerini değiştireceğiz.

Bu özellikler ile kullanıcı datagrid üstünde değişiklik yapamayacak.

Artık kod kısmına geçebiliriz.

İlk olarak sql kütüphanesini ekleyip sql bağlantı adresimizi tanımlayacağız.

using System.Data.SqlClient; //sql işlemlerini yapabilmek için sql kütüphanesini ekliyoruz.

namespace To_Do_List
{
    public partial class frmYapılacaklarListesi : Form
    {
        public frmYapılacaklarListesi()
        {
            InitializeComponent();
        }

        //bağlantımızı global alanda tanımlıyoruz
        SqlConnection baglanti = new SqlConnection(@"Data Source=TALHA-PC\SQLEXPRESS;Initial Catalog=ToDoList;Integrated Security=True");

Ardından datagridview’e tablomuzu getirelim.

void listele()
        {
            //listele isminde metod oluşturuyoruz. ekle/sil/güncelle gibi işlemlerden sonra bu metodu tekrar çağırmamız gerekicek
            SqlDataAdapter da = new SqlDataAdapter("select ID, YapilacakSey as 'Yapılacaklar', EklenmeTarihi as 'Eklenme Tarihi', durum from tbl_yapilacaklar order by EklenmeTarihi desc", baglanti); // order by EklenmeTarihi desc komutu tarihi azalana göre sıralıyor. 
            DataTable dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;
        }

        private void frmYapılacaklarListesi_Load(object sender, EventArgs e)
        {
            listele();
            dataGridView1.ClearSelection(); //bu komudu nasıl açkılasam bilemedim. başlangıçta datagrid'de seçilen veriyi temizliyo. deneyip görmeniz daha iyi :)
        }

Datagrid’e tablomuzu getirdikten sonra ekle/sil/güncelle işlemlerine geçiyoruz.

private void btnEkle_Click(object sender, EventArgs e)
        {
            //ilk olarak richtexbox'ın içinin boş olup olmadığını kontrol ediyoruz
            if (!string.IsNullOrEmpty(rchMetin.Text))
            {
                baglanti.Open();
                //tablomuza sadece yapilacak görevi ekleyeceğiz
                SqlCommand komut = new SqlCommand("insert into tbl_yapilacaklar (yapilacaksey) values (@p1)", baglanti);
                komut.Parameters.AddWithValue("@p1", rchMetin.Text); //richtexbox daki veriyi tabloya ekliyoruz
                komut.ExecuteNonQuery();
                baglanti.Close();
                listele(); //tablomuza yeni görev ekledikten sonra listele metodunu çağırıyoruz
                rchMetin.Clear(); //ardından richtexbox'u temizliyoruz
                MessageBox.Show("Yeni görev başarıyla eklendi!", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Boş alan bırakmayınız!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Ekleme işlemini tamamladıktan sonra silmeye geçiyoruz.

Silme işlemi için ilk olarak datagrid’de çift tıklanan veriyi richtexbox’a taşıyacağım. Metinle beraber tıklanan satıraki  ID’yide int id adlı değişkende tutacağım. Silme işlemini bu ‘id’ değişkenine göre yapmayı planlıyorum. İsterseniz bunun yerine richtexbox’daki text’i baz alarak da silme işlemini gerçekleştirebilirsiniz. Ama kullanıcı aynı isimli görevden ilerleyen zamanda tekrar giriş yaparsa bu iki veri de silinmiş olur. Mesela ‘Bugün yarım saat kitap oku’ gibi bir veri ekledim tabloma. Bundan birkaç gün sonra tekrar bu isimle veri girişi yaparsam ve bu veriyi silmek istersem 2 veride silinecektir. Bu yüzden silme işlemini id’ye göre yapmak daha sağlıklı olacaktır. (Aynısı güncelleme içinde geçerli)

İlk olarak datagrid’in event kısmından celldoubleclick eventini bulup tıklıyoruz.

int id; //id isminde değişken oluşturuyorum. silme işlemini id ye göre gerçekleştireceğiz

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int secilen = dataGridView1.SelectedCells[0].RowIndex;

            id = Convert.ToInt16(dataGridView1.Rows[secilen].Cells[0].Value.ToString()); 
            //datagrid'de secilen satırdaki 0 ıncı sütundaki veriyi id adlı değişkene atıyorum. 0. sutün tablomuzdaki ID alanı oluyor.
            rchMetin.Text = dataGridView1.Rows[secilen].Cells[1].Value.ToString();
            //rictexbox'a da secilen satirdaki 1. sutündaki veriyi atıyorum. buda bizim yapılacak görevimiz.
        }

Taşıma işlemini gerçekleştirdikten sonra artık silme ve güncelleme işlemlerini tamamlayabiliriz.

private void btnSil_Click(object sender, EventArgs e)
        {
            //ilk olarak richtexbox'ın içinin boş olup olmadığını kontrol ediyoruz
            if (!string.IsNullOrEmpty(rchMetin.Text))
            {
                //eğer boş değilse kullanıcıya bir mesaj gösteriyoruz
                if (MessageBox.Show("Bu görevi silmek istediğinizden emin misiniz?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    //eğer kullanıcı evet derse silme işlemini gerçekleştiriyoruz
                    baglanti.Open();
                    SqlCommand komut = new SqlCommand("delete from tbl_yapilacaklar where ID=@p1", baglanti);
                    komut.Parameters.AddWithValue("@p1", id); //oluşturduğumuz id adlı değişkene göre silme işlemini gerçekleştireceğiz
                    komut.ExecuteNonQuery();
                    baglanti.Close();
                    listele(); //tablomuzdaki veri silindikten sonra listele metodunu çağırıyoruz
                    rchMetin.Clear(); //ardından richtexbox'u temizliyoruz
                    MessageBox.Show("Görev listeden silindi!", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Veri silmek için tablodan seçtiğiniz veriye çift tıklayınız.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Sırada güncelleme var:

private void btnGuncelle_Click(object sender, EventArgs e)
        {
            //ilk olarak richtexbox'ın içinin boş olup olmadığını kontrol ediyoruz
            if (!string.IsNullOrEmpty(rchMetin.Text))
            {
                baglanti.Open();
                SqlCommand komut = new SqlCommand("update tbl_yapilacaklar set yapilacaksey=@p1 where ID=@p2", baglanti);
                komut.Parameters.AddWithValue("@p1", rchMetin.Text);
                komut.Parameters.AddWithValue("@p2", id); //oluşturduğumuz id adlı değişkene göre güncelleme işlemini gerçekleştireceğiz
                komut.ExecuteNonQuery();
                baglanti.Close();
                listele(); //tablomuza yeni görev ekledikten sonra listele metodunu çağırıyoruz
                rchMetin.Clear(); //ardından richtexbox'u temizliyoruz
                MessageBox.Show("Görev güncellendi!", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Veri güncellemek için tablodan seçtiğiniz veriye çift tıklayınız.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Ardından temizle butonunu aradan çıkartalım hemen.

private void btnTemizle_Click(object sender, EventArgs e)
        {
            rchMetin.Clear();
        }

Şimdi geriye yapılacak birkaç şey kaldı;

  1. Tamamlandı olarak işaretle butonunu tamamlayacağız.
  2. Datagrid’de tamamlanmamış görevlerin olduğu satırları sarı ile, tamamlanmış olanları yeşil ile renklendireceğiz.
  3. Textbox ile tablodan veri araması yapacağız.
  4. Son olarak ‘tamamlanmış olanları gösterme’ yi halledeceğiz.

Tamamlandı olarak işaretle butonu ile başlayalım. Burada da şart olarak id’yi kullanacağız.

private void btnTamamlandi_Click(object sender, EventArgs e)
        {
            //ilk olarak richtexbox'ın içinin boş olup olmadığını kontrol ediyoruz
            if (!string.IsNullOrEmpty(rchMetin.Text))
            {
                baglanti.Open();
                SqlCommand komut = new SqlCommand("update tbl_yapilacaklar set durum='True' where ID=@p1", baglanti);
                komut.Parameters.AddWithValue("@p1", id); //oluşturduğumuz id adlı değişkene göre güncelleme işlemini gerçekleştireceğiz
                komut.ExecuteNonQuery();
                baglanti.Close();
                listele(); //tablomuza yeni görev ekledikten sonra listele metodunu çağırıyoruz
                rchMetin.Clear(); //ardından richtexbox'u temizliyoruz
                MessageBox.Show("Görev tamamlandı olarak güncellendi!", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Tamamlandı olarak işaretlemek için tablodan seçtiğiniz veriye çift tıklayınız.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Şimdi sırada tablomuzu renklendirmek var. Tamamlanmış olanlar yeşil, tamamlanmamış olanları sarı renkte renklendireceğiz. Listele metoduna geri dönüyoruz.

void listele()
        {
            SqlDataAdapter da = new SqlDataAdapter("select ID, YapilacakSey as 'Yapılacaklar', EklenmeTarihi as 'Eklenme Tarihi', durum from tbl_yapilacaklar order by EklenmeTarihi desc", baglanti);
            DataTable dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;


            //listele metodunun içine bu kodlarıda ekliyoruz. böylece her yeni veri eklendikten sonra tekrar bu kodları yazmamız gerekmiyecek
            for (int i = 0; i < dataGridView1.Rows.Count; i++) 
            {
                DataGridViewCellStyle renk = new DataGridViewCellStyle();
                //eğer durum flase ise sarı, true ise yeiş ile renklendiriyoruz. 
                if (dataGridView1.Rows[i].Cells[3].Value.ToString() == "False")
                {
                    renk.BackColor = Color.Yellow;
                }
                else
                {
                    renk.BackColor = Color.FromArgb(128, 255, 128);
                }
                dataGridView1.Rows[i].DefaultCellStyle = renk;
            }
            dataGridView1.ClearSelection();
        }

Bu işlemi de bitirdikten sonra textbox ile tablomuzdaki verileri aratacağız.

Tablomuzdaki verileri aratırken bir şartımız olacak. Eğer ki  ‘Tamamlanmış Olanları Gösterme’ isimli checkbox işaretlenmiş ise sadece tamamlanmamış görevleri listeleyip o görevler arasından görev arayacağız.

void renklendir()
        {
            //renklendir isminde bir metot oluşturuyoruz. böylece texbox'da arama yaptıktan sonra veriler tekrar renkli gözükecek
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DataGridViewCellStyle renk = new DataGridViewCellStyle();
                //eğer durum flase ise sarı, true ise yeiş ile renklendiriyoruz. 
                if (dataGridView1.Rows[i].Cells[3].Value.ToString() == "False")
                {
                    renk.BackColor = Color.Yellow;
                }
                else
                {
                    renk.BackColor = Color.FromArgb(128, 255, 128);
                }
                dataGridView1.Rows[i].DefaultCellStyle = renk;
            }
        }

        private void txtGorevAra_TextChanged(object sender, EventArgs e)
        {
            //görev aramak için texbox'ın textchanged özelliğini kullanacağız.
            if (checkBox1.Checked)
            {
                //check box seçili ise tamamlanmış görevleri göstermiyoruz
                SqlDataAdapter da = new SqlDataAdapter("select ID, YapilacakSey as 'Yapılacaklar', EklenmeTarihi as 'Eklenme Tarihi', durum from tbl_yapilacaklar where yapilacaksey like '%" + txtGorevAra.Text + "%' and durum='False' order by EklenmeTarihi desc", baglanti);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dataGridView1.DataSource = dt;
                renklendir(); //renklendir metodunu çağırıyoruz
                dataGridView1.ClearSelection();
            }
            else
            {
                //checked false ise bütün görevler arasından arama yapıyoruz
                SqlDataAdapter da = new SqlDataAdapter("select ID, YapilacakSey as 'Yapılacaklar', EklenmeTarihi as 'Eklenme Tarihi', durum from tbl_yapilacaklar where yapilacaksey like '%" + txtGorevAra.Text + "%' order by EklenmeTarihi desc", baglanti);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dataGridView1.DataSource = dt;
                renklendir(); //renklendir metodunu çağırıyoruz
                dataGridView1.ClearSelection();
            }
        }

Bundan sonra geriye checkbox’a göre hangi verileri göstereceğimiz kaldı. Checked true ise sadece tamamlanmamış, false ise bütün görevleri datagrid’de göstereceğiz.

private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                //check box seçili ise tamamlanmış görevleri göstermiyoruz
                SqlDataAdapter da = new SqlDataAdapter("select ID, YapilacakSey as 'Yapılacaklar', EklenmeTarihi as 'Eklenme Tarihi', durum from tbl_yapilacaklar where durum='False' order by EklenmeTarihi desc", baglanti);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dataGridView1.DataSource = dt;
                renklendir(); //renklendir metodunu çağırıyoruz
                dataGridView1.ClearSelection();
            }
            else
            {
                //seçili değil ise listele metodunu çağırıyoruz.
                listele();
            }
        }

Bununla birlikte projemizi tamamlamış bulunmaktayız. Projenin içinde oluşabilecek birkaç hata var. Hataları fark edip çözümünü merak ederseniz yazmaktan çekinmeyin 🙂

Okuduğunuz için teşekkür ederim…


Like it? Share with your friends!

C# ile SQL Tabanlı Yapılacaklar Listesi Hazırlama

Giriş Yap

Hoşgeldin
Don't have an account?
Kayıt Ol

Şifreni Yenile

Back to
Giriş Yap

Kayıt Ol

Ekimize Katılmaya Hazırmısın

Back to
Giriş Yap
Choose A Format
Personality quiz
Series of questions that intends to reveal something about the personality
Trivia quiz
Series of questions with right and wrong answers that intends to check knowledge
Poll
Voting to make decisions or determine opinions
Story
Formatted Text with Embeds and Visuals