https://www.maarificedid.com/makalegoster/3263/csharp-form-uygulamalarinda-sqlite-kullanimi
Adım 24: skorlar.s3db veri tabanını oluşturalım. Aşağıdaki linkten ilgili konuya ulaşabilirsiniz.
https://www.maarificedid.com/makalegoster/3264/csharp-form-uygulamalarinda-sqlite-veritabanini-olusturma
Adım 25: Uyeler tablosunu oluşturalım. Aşağıdaki linkten ilgili konuya ulaşabilirsiniz.
https://www.maarificedid.com/makalegoster/3265/csharp-form-uygulamalarinda-sqlite-veritabaninda-uyeler-tablosunu-olusturma
Adım 26: Şimdi kayıt girişi ve listeleme işlemini gerçekleştirelim. Aşağıdaki linkten ilgili konuya ulaşabilirsiniz.
https://www.maarificedid.com/makalegoster/3427/csharp-form-uygulamalarinda-sqlite-tablosuna-kayit-girisini-gerceklestirme
Projemize ait kodlar aşağıdaki gibi olacaktır.
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Data.SQLite;
using System.IO;
using System.Data;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SQLiteConnection con;
SQLiteDataAdapter da;
SQLiteCommand cmd;
DataSet ds;
private void Form1_Load(object sender, EventArgs e)
{
Temizle();
txtAdi.Text = "Adınızı Girin";
txtAdi.ForeColor = Color.Gray;
txtSoyadi.Text = "Soyadınızı Girin";
txtSoyadi.ForeColor = Color.Gray;
txtUsername.Text = "Kullanıcı Adınızı Girin";
txtUsername.ForeColor = Color.Gray;
txtPassword.Text = "Şifrenizi Girin";
txtPassword.ForeColor = Color.Gray;
ToolTip tt = new ToolTip();
tt.SetToolTip(btnKaydet, "Bilgileri kaydetme işlemi yapar...");
tt.SetToolTip(btnDuzelt, "Bilgileri düzeltme işlemi yapar...");
tt.SetToolTip(btnSil, "Bilgileri silme işlemi yapar...");
tt.SetToolTip(btnAra, "Bilgileri arama işlemi yapar...");
tt.SetToolTip(btnFirst, "İlk kayda gider...");
tt.SetToolTip(btnBack, "Önceki kayda gider...");
tt.SetToolTip(btnNext, "Sonraki kayda gider...");
tt.SetToolTip(btnLast, "Son kayda gider...");
if (!File.Exists("skorlar.s3db"))
{
SQLiteConnection.CreateFile("skorlar.s3db");
string sql = @"CREATE TABLE Uyeler(
Kodu INTEGER PRIMARY KEY AUTOINCREMENT ,
Adi VARCHAR(25) NOT NULL,
Soyadi VARCHAR(25) NOT NULL,
UserName VARCHAR(25) NOT NULL,
Password VARCHAR(25) NOT NULL
);";
con = new SQLiteConnection("Data Source=skorlar.s3db;Version=3;");
con.Open();
cmd = new SQLiteCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
}
Listele();
}
private void Temizle()
{
txtAdi.Text = "";
txtSoyadi.Text = "";
txtUsername.Text = "";
txtPassword.Text = "";
txtAdi.Focus();
}
private void txtAdi_Enter(object sender, EventArgs e)
{
if (txtAdi.Text == "Adınızı Girin")
{
txtAdi.Text = "";
txtAdi.ForeColor = Color.Black;
}
}
private void txtAdi_Leave(object sender, EventArgs e)
{
if (txtAdi.Text == "")
{
txtAdi.Text = "Adınızı Girin";
txtAdi.ForeColor = Color.Gray;
}
}
private void txtSoyadi_Enter(object sender, EventArgs e)
{
if (txtSoyadi.Text == "Soyadınızı Girin")
{
txtSoyadi.Text = "";
txtSoyadi.ForeColor = Color.Black;
}
}
private void txtSoyadi_Leave(object sender, EventArgs e)
{
if (txtSoyadi.Text == "")
{
txtSoyadi.Text = "Soyadınızı Girin";
txtSoyadi.ForeColor = Color.Gray;
}
}
private void txtUsername_Enter(object sender, EventArgs e)
{
if (txtUsername.Text == "Kullanıcı Adınızı Girin")
{
txtUsername.Text = "";
txtUsername.ForeColor = Color.Black;
}
}
private void txtUsername_Leave(object sender, EventArgs e)
{
if (txtUsername.Text == "")
{
txtUsername.Text = "Kullanıcı Adınızı Girin";
txtUsername.ForeColor = Color.Gray;
}
}
private void txtPassword_Enter(object sender, EventArgs e)
{
if (txtPassword.Text == "Şifrenizi Girin")
{
txtPassword.Text = "";
txtPassword.ForeColor = Color.Black;
}
}
private void txtPassword_Leave(object sender, EventArgs e)
{
if (txtPassword.Text == "")
{
txtPassword.Text = "Şifrenizi Girin";
txtPassword.ForeColor = Color.Gray;
}
}
private void txtAdi_Validating(object sender, CancelEventArgs e)
{
if (txtAdi.Text == "Adınızı Girin" || txtAdi.Text == "")
{
e.Cancel = true;
txtAdi.Focus();
errorProvider1.SetError(txtAdi, "Lütfen burayı boş bırakmayınız...");
}
else
{
e.Cancel = false;
errorProvider1.SetError(txtAdi, "");
}
}
private void txtSoyadi_Validating(object sender, CancelEventArgs e)
{
if (txtSoyadi.Text == "Soyadınızı Girin" || txtAdi.Text == "")
{
e.Cancel = true;
txtSoyadi.Focus();
errorProvider1.SetError(txtSoyadi, "Lütfen burayı boş bırakmayınız...");
}
else
{
e.Cancel = false;
errorProvider1.SetError(txtSoyadi, "");
}
}
private void txtUsername_Validating(object sender, CancelEventArgs e)
{
if (txtUsername.Text == "Kullanıcı Adınızı Girin" || txtAdi.Text == "")
{
e.Cancel = true;
txtUsername.Focus();
errorProvider1.SetError(txtUsername, "Lütfen burayı boş bırakmayınız...");
}
else
{
e.Cancel = false;
errorProvider1.SetError(txtUsername, "");
}
}
private void txtPassword_Validating(object sender, CancelEventArgs e)
{
if (txtPassword.Text == "Şifrenizi Girin" || txtAdi.Text == "")
{
e.Cancel = true;
txtPassword.Focus();
errorProvider1.SetError(txtPassword, "Lütfen burayı boş bırakmayınız...");
}
else
{
e.Cancel = false;
errorProvider1.SetError(txtPassword, "");
}
}
private void btnKaydet_Click(object sender, EventArgs e)
{
string ad, soyad, kullanici, sifre;
ad = txtAdi.Text;
soyad = txtSoyadi.Text;
kullanici = txtUsername.Text;
sifre = txtPassword.Text;
cmd = new SQLiteCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO Uyeler(Adi, Soyadi, Username, Password) VALUES ('" + ad + "','" + soyad + "','" + kullanici + "','" + sifre + "')";
cmd.ExecuteNonQuery();
con.Close();
Listele();
}
private void Listele()
{
con = new SQLiteConnection("Data Source=skorlar.s3db;Version=3;");
da = new SQLiteDataAdapter("SELECT * FROM Uyeler", con);
ds = new DataSet();
con.Open();
da.Fill(ds, "Uyeler");
dgrvListe.DataSource = ds.Tables["Uyeler"];
con.Close();
}
}
}
Adım 27: Proje çalıştırıldığında imleç txtAdi kutusuna konumlanmaktadır. Ancak programdan çıkmak istediğimizde txtAdi kutusunun içi boş olduğu için program izin vermeyecektir. Projede yer alan bir butona tıkladığımızda da yine aynı sorunla karşılaşmaktayız. Bu sorunu nasıl çözeceğiz. Bu sorunu çözmek için Form nesnesinin formClosing olayını kullanacağız. Öncelikle bu olayını tanımlayalım. Aşağıdaki gibi metodumuzu oluşturalım.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = false;
}
Projeyi çalıştrıdığımızda artık rahatlıkla form sayfası kapatılabilmektedir.
Adım 29: Dikkat ettiyseniz txtPassword kutusunda "Şifrenizi Giriniz" mesajı yerine * karakteri görüntülenmektedir. Şimdi bu sorunu çözelim. Hatırlarsanız UseSystemPasswordChar özelliğini kullanarak * karakteri gösteriliyordu. Şimdi bu özelliği geçici olarak iptal edeceğiz. Temizle() metodunu aşağıdaki gibi değiştiriniz.
private void Temizle()
{
txtAdi.Text = "";
txtSoyadi.Text = "";
txtUsername.Text = "";
txtPassword.Text = "";
txtPassword.UseSystemPasswordChar = false;
txtAdi.Focus();
}
Daha sonra txtPassword kutusunun Enter olayını aşağıdaki gibi değiştiriniz.
private void txtPassword_Enter(object sender, EventArgs e)
{
if (txtPassword.Text == "Şifrenizi Girin")
{
txtPassword.Text = "";
txtPassword.ForeColor = Color.Black;
txtPassword.UseSystemPasswordChar = true;
}
}
Projeyi çalıştırdığınızda şifre kutusunda mesaj görüntülenecektir.
Adım 30: Kaydet butonuna basıldığında kullanıcıdan onay alınmasını sağlayalım. Böylece istenilmeyen kayıtlar tabloda yer almamış olacaktır. Kaydetme işlemini yeniden düzenleyelim.
private void btnKaydet_Click(object sender, EventArgs e)
{
ad = txtAdi.Text;
soyad = txtSoyadi.Text;
kullanici = txtUsername.Text;
sifre = txtPassword.Text;
DialogResult cevap = MessageBox.Show("Tabloya kaydedeyim mi?", "Kaydetme İşlemi", MessageBoxButtons.YesNo);
if (cevap==DialogResult.Yes)
{
cmd = new SQLiteCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO Uyeler(Adi, Soyadi, Username, Password) VALUES ('" + ad + "','" + soyad + "','" + kullanici + "','" + sifre + "')";
cmd.ExecuteNonQuery();
con.Close();
Listele();
}
}
Adım 31: Şimdi düzeltme işlemini yapalım. Düzeltme işleminin yapılabilmesi için tabloda kayıt olmalı ve istenen kaydın seçili olması gerekir. Bu işlemi gerçekleştirmek için DataGridView nesnesinden yararlanacağız. Öncelikle bu nesnenin bazı özelliklerini düzenleyelim. AllowUserToAddRows özelliğini false yapalım. EditMode özelliğini EditProgrammatically yapalım. MultiSelect özelliğini false yapalım. SelectionMode özelliğini FullRowSelect yapalım. Fontun büyüklüğünü 12 yapalım. DataGridView içinden herhangi bir kaydı seçmek için SelectionChanged olayından yararlanacağız. Bu arada seçilen kayıt üzerinde silme ve düzeltme işlemlerini gerçekelştirmek için int tipinde kodu değişkenini global olarak tanımlayalım.
private void dgvListe_SelectionChanged(object sender, EventArgs e)
{
if (dgvListe.SelectedCells.Count > 0)
{
int i = dgvListe.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = dgvListe.Rows[i];
kodu = Convert.ToInt32(selectedRow.Cells[0].Value);
txtAdi.Text = Convert.ToString(selectedRow.Cells[1].Value);
txtSoyadi.Text = Convert.ToString(selectedRow.Cells[2].Value);
txtUsername.Text = Convert.ToString(selectedRow.Cells[3].Value);
txtPassword.Text = Convert.ToString(selectedRow.Cells[4].Value);
txtAdi.Focus();
}
}
Var olan kayıtlardan biri seçildiğinde kayda ait bilgiler ekranda görüntülenir.
Adım 32: Proje çalıştırıldığında herhangi bir işlem yapılmamasına rağmen ilk kayıt ekranda görüntülenir. Görüntülenen kayıt üzerinde kullanıcının ne yapacağı belli değildir. Zira formda yer alan tüm butonlar aktif durumdadır. Öncelikle butonların durumlarını kontrol edelim. Form yüklendiğinde Kaydet ve Ara butonları aktif olmalı, Düzelt ve Sil butonları ise pasif olmalıdır. Buna göre Temizle() metodunu yeniden düzenleyelim.
private void Temizle()
{
txtAdi.Text = "";
txtSoyadi.Text = "";
txtUsername.Text = "";
txtPassword.Text = "";
txtPassword.UseSystemPasswordChar = false;
txtAdi.Focus();
btnKaydet.Enabled = true;
btnDuzelt.Enabled = false;
btnSil.Enabled = false;
btnAra.Enabled = true;
}
Adım 33: Projeyi çalıştıralım. Ekranda ilk kayıt görüntülenmektedir. Halbuki herhangi bir kayıt seçimi yapılmamıştı. Proje çalıştırıldı anda herhangi bir kayıt seçiminin olmamasını sağlayalım. Bunun için bool tipinde bir sec değişkeni tanımlayalım. İlk değeri de false olsun. Daha sonra Listele metodunu aşağıdaki gibi düzenleyelim.
private void Listele()
{
con = new SQLiteConnection("Data Source=skorlar.s3db;Version=3;");
da = new SQLiteDataAdapter("SELECT * FROM Uyeler", con);
ds = new DataSet();
con.Open();
da.Fill(ds, "Uyeler");
dgvListe.DataSource = ds.Tables["Uyeler"];
con.Close();
if (!sec)
{
sec = true;
dgvListe.ClearSelection();
}
}
İşimiz bitmedi. DataGridView nesnesinin SelectionChanged olayını şöyle düzenleyelim.
private void dgvListe_SelectionChanged(object sender, EventArgs e)
{
if (dgvListe.SelectedCells.Count > 0 && sec == true)
{
int i = dgvListe.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = dgvListe.Rows[i];
kodu = Convert.ToInt32(selectedRow.Cells[0].Value);
txtAdi.Text = Convert.ToString(selectedRow.Cells[1].Value);
txtSoyadi.Text = Convert.ToString(selectedRow.Cells[2].Value);
txtUsername.Text = Convert.ToString(selectedRow.Cells[3].Value);
txtPassword.Text = Convert.ToString(selectedRow.Cells[4].Value);
txtAdi.Focus();
}
}
Projeyi çalıştırdığımızda artık satır seçilmeyecektir.
Adım 34: Tablodan bir kayıt seçildiğinde artık Düzeltme ve Silme butonları aktif, Kaydetme ve Arama butonları pasif olacaktır. Buna göre DataGridView nesnesinin SelectionChanged olayını şöyle düzenleyelim.
private void dgvListe_SelectionChanged(object sender, EventArgs e)
{
if (dgvListe.SelectedCells.Count > 0 && sec == true)
{
int i = dgvListe.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = dgvListe.Rows[i];
kodu = Convert.ToInt32(selectedRow.Cells[0].Value);
txtAdi.Text = Convert.ToString(selectedRow.Cells[1].Value);
txtSoyadi.Text = Convert.ToString(selectedRow.Cells[2].Value);
txtUsername.Text = Convert.ToString(selectedRow.Cells[3].Value);
txtPassword.Text = Convert.ToString(selectedRow.Cells[4].Value);
txtAdi.Focus();
btnKaydet.Enabled = false;
btnDuzelt.Enabled = true;
btnSil.Enabled = true;
btnAra.Enabled = false;
}
}
Adım 35: Şimdi düzeltme işlemini yapabiliriz. Bunun için btnDuzelt butonunun Click olayını oluşturalım. Bu metodu aşağıdaki gibi düzenleyelim.
private void btnDuzelt_Click(object sender, EventArgs e)
{
ad = txtAdi.Text;
soyad = txtSoyadi.Text;
kullanici = txtUsername.Text;
sifre = txtPassword.Text;
DialogResult cevap = MessageBox.Show("Kaydı güncelleyeyim mi?", "Düzenleme İşlemi", MessageBoxButtons.YesNo);
if (cevap == DialogResult.Yes)
{
cmd = new SQLiteCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "UPDATE Uyeler SET Adi = '" + ad + "', Soyadi= '" + soyad + "', Username= '" + kullanici + "', Password= '" + sifre + "' WHERE kodu =" + kodu;
cmd.ExecuteNonQuery();
con.Close();
Listele();
}
}
Adım 36: Güncelleme işlemi bittikten sonra Kaydet ve Ara butonunun aktif, Düzelt ve Sil butonlarının pasif olması gerekir. Form sayfasında herhangi bir kaydın olmaması gerekir.