c# Web

SqLite Programında Uyeler Tablosuyla İlgili Tüm İşlemleri Gerçekleştiren c# Web Uygulaması

Bir veri tabanında tablolar ile ilgili hangi işlemler yer almaktadır. Tablolara kayıt girişi nasıl yapılır. Tabloda kayıt silme nasıl gerçekleştirilir. Tabloda kayıtlar nasıl güncellenir. Bir tabloda tüm kayıtlar nasıl listelenir. Belirtilen kriterlere göre tabloda kayıt araması nasıl gerçekleştirilir. Bir tabloda Sql deyimleri nasıl kullanılır. İşte tüm bu soruların cevabını bu uygulamada bulacaksınız.

Hatırlarsanız SqLite programının bir projeye nasıl eklendiğini daha önce göstermiştik. Burada daha önce anlatılan tüm konuların özetinin yer alacağı bir uygulama yapacağız. Web sayfasının görünümü aşağıdaki gibi olacaktır.

Adım 1: Visual Studio programını açalım.

Adım 2: UyeTakipProgrami isminde bir klasik web projesi oluşturalım.

Adım 3: Projeye bilgiler.aspx isminde bir webform ekleyelim.

Adım 4: Bootstrap ve jquery kütüphalelerini projeye dahil edelim. Web sayfasında olması gereken standart tanımlamaları yapalım.

<!DOCTYPE html>

<html lang="tr">
<head runat="server">
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Üye Takip Programı</title>
    <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
    <script src="lib/jquery/jquery.min.js"></script>
    <script src="lib/bootstrap/js/bootstrap.min.js"></script>
    <script>
    </script>
    <style>
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
    </form>
</body>
</html>

Adım 5: Form görünümünün tüm platformlarda hatasız görülebilmesi için div etiketini yeninde tanımlayınız.

<form id="form1" runat="server">
    <div class="col-xl-6 col-lg-6 col-md-12 col-sm-12">
    </div>
</form>
Adım 6: Web sayfasına başlık ekleyelim. Sayfanın başlığını oluşturalım.
<div class="row">
    <div class="col-sm-12">
        <h3>Üye Takip Programı
        </h3>
    </div>
</div>

Adım 7: Web sayfasının içerik kısmını ayarlayalım. Bu satırın içine "Adı : " yazalım. Diğerine ise bir adet textbox ekleyelim. İsmini txtAdi olarak değiştirelim.           

<div class="row">
    <div class="col-sm-3">
        Adı :
    </div>
    <div class="col-sm-9">
        <asp:TextBox ID="txtAdi" runat="server"></asp:TextBox>
    </div>
</div>
Adım 8: Bir satır daha ekleyelim. Bu satırın içine "Soyadı : " yazalım. Diğerine ise bir adet textbox ekleyelim. İsmini txtSoyadi olarak değiştirelim.
<div class="row">
    <div class="col-sm-3">
        Soyadı :
    </div>
    <div class="col-sm-9">
        <asp:TextBox ID="txtSoyadi" runat="server"></asp:TextBox>
    </div>
</div>

Adım 9: Bir satır daha ekleyelim. Bu satırın içine "Kullanıcı Adı : " yazalım. Diğerine ise bir adet textbox ekleyelim. İsmini txtUsername olarak değiştirelim.

<div class="row">
    <div class="col-sm-3">
        Kullanıcı Adı :
    </div>
    <div class="col-sm-9">
        <asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
    </div>
</div>
Adım 10: Bir satır daha ekleyelim. Bu satırın içine "Şifre : " yazalım. Diğerine ise bir adet textbox ekleyelim. İsmini txtPassword olarak değiştirelim.
<div class="row">
    <div class="col-sm-3">
        Şifre :
    </div>
    <div class="col-sm-9">
        <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
    </div>
</div>

Adım 11: Bir satır daha ekleyelim. Burada butonları oluşturacağız. Sütunları üçerli olarak böleceğiz. 

<div class="row">
    <div class="col-sm-3">
    </div>
    <div class="col-sm-3">
    </div>
    <div class="col-sm-3">
    </div>
    <div class="col-sm-3">
    </div>
</div>

Adım 12: Birincisine 1 adet button ekleyelim. Başlığını "Kaydet" olarak değiştirelim. İsmini btnKaydet olarak değiştirelim. 

<asp:Button ID="btnKaydet" runat="server" Text="Kaydet" />

Adım 13: İkincisine 1 adet button ekleyelim. Başlığını "Düzelt" olarak değiştirelim. İsmini btnDuzelt olarak değiştirelim. 

<asp:Button ID="btnDuzelt" runat="server" Text="Düzelt" />

Adım 14: Üçüncüsüne 1 adet button ekleyelim. Başlığını "Sil" olarak değiştirelim. İsmini btnSil olarak değiştirelim. 

<asp:Button ID="btnSil" runat="server" Text="Sil" />

Adım 15: Dördüncüsüne 1 adet button ekleyelim. Başlığını "Ara" olarak değiştirelim. İsmini btnAra olarak değiştirelim. 

<asp:Button ID="btnAra" runat="server" Text="Ara" />
Adım 16: Bir satır daha ekleyiniz. Burada yeni butonları oluşturacağız. Sütunları üçerli olarak böleceğiz. 
<div class="row">
    <div class="col-sm-3">
    </div>
    <div class="col-sm-3">
    </div>
    <div class="col-sm-3">
    </div>
    <div class="col-sm-3">
    </div>
</div>

Adım 17: Birincisine 1 adet button ekleyelim. Başlığını "İlk" olarak değiştirelim. İsmini btnFirst olarak değiştirelim. 

<asp:Button ID="btnFirst" runat="server" Text="İlk" />

Adım 18: İkincisine 1 adet button ekleyelim. Başlığını "Önceki" olarak değiştirelim. İsmini btnBack olarak değiştirelim. 

<asp:Button ID="btnBack" runat="server" Text="Önceki" />                    
Adım 19: Üçüncüsüne 1 adet button ekleyelim. Başlığını "Sonraki" olarak değiştirelim. İsmini btnNext olarak değiştirelim. 
<asp:Button ID="btnNext" runat="server" Text="Sonraki" />
Adım 20: Dördüncüsüne 1 adet button ekleyelim. Başlığını "Son" olarak değiştirelim. İsmini btnLast olarak değiştirelim. 
<asp:Button ID="btnLast" runat="server" Text="Son" />
Adım 21: Bir tane daha row ekleyelim. Burada tabloda bulunan kayıtlar listelenecektir. 1 adet gridview ekleyelim. İsmini grvListe olarak değiştirelim. 
<div class="row">
    <div class="col-sm-12">
        <asp:GridView ID="grvListe" runat="server">
        </asp:GridView>
    </div>
</div>
Adım 22: Web sayfasını arkaplan rengini ayarlayalım. Şimdi web sayfasına eklediğimiz elemanlar için BootStrap temalarını kullanalım. Öncelikle formu ortalayalım. Bunun için m-auto özelliğini kullanacağız. Ana form elemanını aşağıdaki gibi düzenleyelim.
<body class="bg-body-tertiary">
Adım 23: Şimdi web sayfasına eklediğimiz elemanlar için BootStrap temalarını kullanalım. Öncelikle formu ortalayalım. Bunun için m-auto özelliğini kullanacağız. Ana form elemanını aşağıdaki gibi düzenleyelim.
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 m-auto">

Adım 24: Şimdi de başlığı ortalayalım.

<div class="col-sm-12 text-center">
    <h3>Üye Takip Programı
    </h3>
</div>
Adım 25: Kutuları düzenleyelim. Ben txtAdi kutusu için bootstrap tema tanımlaması yapacağım. Siz diğer kutular için gerekli ayarlamaları yaparsınız.
<asp:TextBox CssClass="form-control" ID="txtAdi" runat="server">
</asp:TextBox>

Adım 26: Dikkat ettiıseniz kutular birbirlerine çok yakınlar. Hepsinin arasını biraz açalım. Her bir elemanı row class değeriyle düzenlemiştik. Ben sadece bu class için aşağıdaki ayarlamayı yapacağım. Böylece tüm elemanlar arasında boşluk olacaktır.

.row {
    margin-top: 10px;
}
Adım 27: Şimdi de kutunun içinde mesaj görüntüleyelim. Ben txtAdi kutusu için gerekli kodları yazacağım. Diğerlerini siz yaparsınız. 
<asp:TextBox CssClass="form-control" ID="txtAdi" 
placeholder="Adı giriniz..." runat="server"></asp:TextBox>

Adım 28: Hatırlarsanız Uyeler tablosunda Adi, Soyadi, Username, Password alanlarına mutlaka değer girilmesini istemiştik. Kutulara da kullanıcının değer girmesini sağlayalım. Ben txtAdi için yapıyorum. Siz diğerlerini yaparsınız.

<asp:TextBox CssClass="form-control" ID="txtAdi" 
placeholder="Adı giriniz..." runat="server" required="required">
</asp:TextBox>
Adım 29: Şimdi butonlara bootstrap tema ekleyelim. Ben btnKaydet için yapacağım. Siz diğerlerini yaparsınız.
<asp:Button CssClass="btn w-100 btn-primary" ID="btnKaydet" 
runat="server" Text="Kaydet" />

Adım 30: Şimdi de altta yer alan butonları düzenleyelim. Ben sadece btnFirst için yapacağım. Siz diğerlerini yaparsınız.

<asp:Button CssClass="btn w-100 btn-success" ID="btnFirst" 
runat="server" Text="İlk" />
Adım 31: Şimdi imleç butonun üzerine geldiğinde bir baloncuk yardımıyla mesaj görüntüleyelim. Ben sadece btnKaydet için yapacağım. Siz diğer butonları yaparsınız.
<asp:Button CssClass="btn w-100 btn-primary" ID="btnKaydet" 
runat="server" Text="Kaydet" ToolTip="Kaydetme işlemini yapar"/>

Projeyi çalıştıralım. Mesaj ekranda görüntülenecektir. Şimdi bootstrap özelliği verelim.

<asp:Button CssClass="btn w-100 btn-primary" ID="btnKaydet" 
runat="server" Text="Kaydet" data-bs-toggle="tooltip" 
data-bs-placement="top" ToolTip="Kaydetme işlemini yapar" />
Bu arada aşağıdaki jquery kodunu da yazmalıyız.
$(function () {
    $('[data-bs-toggle="tooltip"]').tooltip()
})

Bu kodun çalışması için web sayfasına popper.js kütüphanesinin eklenmesi gerekir. Daha sonra aşağıdaki satırı head etiketi arasına eklemeyi unutmayınız.

<script src="lib/popper.js/umd/popper.min.js"></script>

Adım 32: Kullanıcı şifreyi girerken şifrenin görünmemesini sağlayalım.

<asp:TextBox CssClass="form-control" ID="txtPassword" 
placeholder="Şifreyi giriniz..." runat="server" required="required" 
TextMode="Password"></asp:TextBox>

Adım 33: Proje çalıştırıldığında kutuların içindeki bilgilerin silinmesini sağlayalım. Ben bu amaçla Temizle() isminde bir metot tanımlayacağım.

private void Temizle()
{
    txtAdi.Text = "";
    txtSoyadi.Text = "";
    txtUsername.Text = "";
    txtPassword.Text = "";
}

Tanımladığımız bu fonksiyonu page load olayında çağıralım.

if (!IsPostBack)
{
    Temizle();
}

Adım 34: İmlecin form sayfası çalıştığında txtAdi kutusuna konumlanmasını sağlayalım. Aşağıdaki kodu Temizle() fonksiyonunda alt satıra yazalım.

txtAdi.Focus();

Bu işlemi gerçekleştirmek için birden fazla yöntem vardır. Diğerlerini de yazalım.

a) Bootstrap kullanarak

<asp:TextBox CssClass="form-control" ID="txtAdi" 
placeholder="Adı giriniz..." runat="server" required="required" 
autofocus="true"></asp:TextBox>

b) jquery kodunu kullanarak

$("#txtAdi").focus();

c) c# dilini kullanarak

this.SetFocus(txtAdi);

Adım 35: SqLite kütüphanesini projeye ekleyelim. Aşağıdaki linkten ilgili konuya ulaşabilirsiniz.

https://www.maarificedid.com/makalegoster/3267/web-uygulamalarinda-sqlite-kullanimi

Adım 36: users.s3db veri tabanını oluşturalım. Aşağıdaki linkten ilgili konuya ulaşabilirsiniz.

https://www.maarificedid.com/makalegoster/3268/web-uygulamalarinda-sqlite-veritabanini-olusturma

Adım 37: Uyeler tablosunu oluşturalım. Aşağıdaki linkten ilgili konuya ulaşabilirsiniz.

https://www.maarificedid.com/makalegoster/3269/web-uygulamalarinda-sqlite-veritabaninda-uyeler-tablosunu-olusturma

Adım 38: Ş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/3270/web-uygulamalarinda-sqlite-veritabaninda-uyeler-tablosuna-kayit-girisi-yapma

https://www.maarificedid.com/makalegoster/3273/web-uygulamalarinda-sqlite-veritabaninda-uyeler-tablosunda-kayitlari-listeleme

Kodların son hali aşağıdaki gibi olacaktır.

using System;
using System.Data;
using System.Data.SQLite;
using System.IO;

namespace UyeTakipProgrami
{
    public partial class bilgiler : System.Web.UI.Page
    {
        SQLiteConnection con;
        SQLiteDataAdapter da;
        SQLiteCommand cmd;
        DataSet ds;
        string yol = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                yol = Server.MapPath("/");
                yol += "users.s3db";
                if (!File.Exists(yol))
                {
                    SQLiteConnection.CreateFile(yol);
                    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=" + yol + ";
Version=3;");
                    con.Open();
                    cmd = new SQLiteCommand(sql, con);
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
                Temizle();
                Listele();
            }
        }
        private void Temizle()
        {
            txtPassword.TextMode = TextBoxMode.Password;
            txtAdi.Text = "";
            txtSoyadi.Text = "";
            txtUsername.Text = "";
            txtPassword.Text = "";
            txtAdi.Focus();
        }
        protected void btnKaydet_Click(object sender, EventArgs e)
        {
            string ad, soyad, kullanici, sifre;
            ad = txtAdi.Text;
            soyad = txtSoyadi.Text;
            kullanici = txtUsername.Text;
            sifre = txtPassword.Text;
            yol = Server.MapPath("/");
            yol += "users.s3db";
            con = new SQLiteConnection("Data Source=" + yol + ";
Version=3;");
            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();
            Temizle();
            Listele();
        }

        private void Listele()
        {
            yol = Server.MapPath("/");
            yol += "users.s3db";
            con = new SQLiteConnection("Data Source=" + yol + ";
Version=3;");
            da = new SQLiteDataAdapter("SELECT * FROM Uyeler", con);
            ds = new DataSet();
            con.Open();
            da.Fill(ds, "Uyeler");
            grvListe.DataSource = ds.Tables["Uyeler"];
            grvListe.DataBind();
            con.Close();
        }
    }
}

Adım 39: Kayıt düzeltme ve silme için tabloda mutlaka kayıt olması gerekir. Tablomuzdaki kayıtları grvListe elemanıyla listelemiştik. Burada üzerinde değişiklik yapılacak elemanın seçilmesi gerelir. Bu arada grvListe elemanının BootStrap tema ile ayarlanması işlemini de yapalım.                      

<asp:GridView ID="grvListe" class="table table-bordered table-hover" 
runat="server"
    AutoGenerateColumns="false"
    <HeaderStyle CssClass="table-dark" />
    <SelectedRowStyle CssClass="table-active" />
    <Columns>
        <asp:BoundField DataField="Kodu" HeaderText="Kodu" />
        <asp:BoundField DataField="Adi" HeaderText="Adı" />
        <asp:BoundField DataField="Soyadi" HeaderText="Soyadı" />
        <asp:BoundField DataField="Username" HeaderText="Kullanıcı Adı" />
        <asp:BoundField DataField="Password" HeaderText="Şifre" />
    </Columns>
</asp:GridView>

Adım 40: Şimdi grvListe içindeki elemanlardan birinin seçilmesi işlemini yapalım. Öncelikle Properties panelinden AutoGenerateSelectButton özelliğini true yapmalıyız. Daha sonra SelectedIndexChanged olayını aktif hale getirmeliyiz. 

<asp:GridView ID="grvListe" class="table table-bordered table-hover" 
runat="server"
    AutoGenerateColumns="false"
    AutoGenerateSelectButton="true"
    OnSelectedIndexChanged="grvListe_SelectedIndexChanged">
    <HeaderStyle CssClass="table-dark" />
    <SelectedRowStyle CssClass="table-active" />
    <Columns>
        <asp:BoundField DataField="Kodu" HeaderText="Kodu" />
        <asp:BoundField DataField="Adi" HeaderText="Adı" />
        <asp:BoundField DataField="Soyadi" HeaderText="Soyadı" />
        <asp:BoundField DataField="Username" HeaderText="Kullanıcı Adı" />
        <asp:BoundField DataField="Password" HeaderText="Şifre" />
    </Columns>
</asp:GridView>

Buraya kod yazmadan önce ad, soyad, kullanici ve sifre değişkenlerini global olarak tanımlayalım. Bu arada seçilen kaydın kodunu almak için int tipinde global kodu değişkenini de tanımlayalım.

string ad, soyad, kullanici, sifre;
public static int kodu;

Artık kodları yazabiliriz.       

protected void grvListe_SelectedIndexChanged(object sender, EventArgs e)
{
    kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
    txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
    txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
    txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
    txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;
}

Projeyi çalıştıralım. Tabloda bulunan herrhangi bir kaydı seçelim. Bilgilerin geldiğini görürsünüz. Ancak şifre bilgisinin görüntülenmediğine dikkat ediniz. Çünkü txtPassword kutusu Password modundaydı. Önce bu modu kaldırmalıyız. 

txtPassword.TextMode = TextBoxMode.SingleLine;

Aşağıdaki satırı da Temizle() metodunun altına yazalım. 

txtPassword.TextMode = TextBoxMode.Password;

Adım 41: Artık kayıt üzerinde düzeltme ve silme yapabiliriz. Düzeltme işlemi için önceklikle btnDuzelt butonunun Click olayını oluşturalım. Düzeltme işlemleri için aşağıdaki linki tıklayabilirsiniz.

https://www.maarificedid.com/makalegoster/3272/web-uygulamalarinda-sqlite-veritabaninda-uyeler-tablosunda-kayit-guncelleme-islemini-yapma

Kodlar aşağıdaki gibi olacaktır.       

protected void btnDuzelt_Click(object sender, EventArgs e)
{
    ad = txtAdi.Text;
    soyad = txtSoyadi.Text;
    kullanici = txtUsername.Text;
    sifre = txtPassword.Text;
    yol = Server.MapPath("/");
    yol += "users.s3db";
    con = new SQLiteConnection("Data Source=" + yol + ";Version=3;");
    con.Open();
    string sql = @"UPDATE Uyeler SET adi = '" + ad + "', soyadi='" + soyad 
+ "',username='" + kullanici + "',password='" + sifre + "' 
WHERE kodu = " + kodu;
    cmd = new SQLiteCommand(sql, con);
    cmd.ExecuteNonQuery();
    con.Close();
    Temizle();
    Listele();
}

Adım 42: Silme işlemi için öncelikle btnSil butonunun Click olayını oluşturalım. Silme işlemleri için aşağıdaki linki tıklayabilirsiniz.

https://www.maarificedid.com/makalegoster/3271/web-uygulamalarinda-sqlite-veritabaninda-uyeler-tablosunda-kayit-silme-islemini-yapma

Kodlar aşağıdaki gibidir.       

protected void btnSil_Click(object sender, EventArgs e)
{
    yol = Server.MapPath("/");
    yol += "users.s3db";
    con = new SQLiteConnection("Data Source=" + yol + ";Version=3;");
    con.Open();
    string sql = @"DELETE FROM Uyeler WHERE kodu = " + kodu;
    cmd = new SQLiteCommand(sql, con);
    cmd.ExecuteNonQuery();
    con.Close();
    Temizle();
    Listele();
}

Adım 43: Bu arada dikkat ettiniz mi, tablo işlemleri için kullanılan butonların tamamı kullanıma açık olduğu için kayıt girişi, düzeltme ve silme işlemlerinde sıkıntı yaşanmaktadır. Şimdi bu sorunu çözelim. Proje ilk açıldığında kaydetme ve arama butonları aktif olmalı, silme ve düzeltme işlemleri pasif olmalıdır. Gerekli kodları Temizle() fonksiyonunda yazalım.       

void Temizle()
{
    txtAdi.Text = "";
    txtSoyadi.Text = "";
    txtUsername.Text = "";
    txtPassword.Text = "";
    txtPassword.TextMode = TextBoxMode.Password;
    txtAdi.Focus();

    btnKaydet.Enabled = true;
    btnDuzelt.Enabled = false;
    btnSil.Enabled = false;
    btnAra.Enabled = true;
}

Peki herhangi bir kayıt seçildiğinde ne olacak. Bu sefer Kaydet ve Ara pasif, silme ve düzeltme aktif olacak. Aşağıdaki metodu yeniden düzenleyelim. 

protected void grvListe_SelectedIndexChanged(object sender, EventArgs e)
{
    txtPassword.TextMode = TextBoxMode.SingleLine;
    kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
    txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
    txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
    txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
    txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;
    txtAdi.Focus();

    btnKaydet.Enabled = false;
    btnDuzelt.Enabled = true;
    btnSil.Enabled = true;
    btnAra.Enabled = false;
}

Projeyi kaydedip çalıştıralım. Artık butonların doğru çalıştığını görürsünüz.

Adım 44: Geldik arama işlemini yapmaya. Kullanıcının ad, soyad, kullanıcı adı bilgilerine göre arama işlemini yapmasını isteyelim. Öncelikle Listele metoduna bakalım. Burada "SELECT * FROM Uyeler" bilgisi bizim için belirleyici olacaktır. Bu komuta dışarıdan girilen bilginin ad, soyad, kullanıcı adı içinde olup olmadığını kontrol edelim. Metodu yeniden düzenleyelim.       

private void Listele()
{
    yol = Server.MapPath("/");
    yol += "users.s3db";
    con = new SQLiteConnection("Data Source=" + yol + ";Version=3;");
    da = new SQLiteDataAdapter();

    string query = "SELECT * FROM Uyeler"; 
    List<SQLiteParameter> parameters = new List<SQLiteParameter>();

    if (!string.IsNullOrEmpty(txtAra.Text.Trim()))
    {
        query += " WHERE Adi LIKE @Ad OR Soyadi LIKE @Ad OR Username 
LIKE @Ad";
        parameters.Add(new SQLiteParameter("@Ad", "%" + 
txtAra.Text.Trim() + "%"));
    }

    da.SelectCommand = new SQLiteCommand(query, con);
    da.SelectCommand.Parameters.AddRange(parameters.ToArray());

    ds = new DataSet();
    con.Open();
    da.Fill(ds, "Uyeler");
    grvListe.DataSource = ds.Tables["Uyeler"];
    grvListe.DataBind();
    con.Close();
}

Adım 45: Şimdi arama işlemini yapalım. Ad, soyad ve kullanıcı adına göre arama yapacağız. Form sayfasında yer alan kutuları kullanmak istediğimizde tüm kutuların doldurulması gerekir. Halbuki kullanıcı sadece bir değer yazmalı, bu değer ilgili alanlarda kontrol edilmelidir. Bu amaçla form sayfasına txtAra isminde bir kutu daha eklenmelidir.           

<div class="row">
    <div class="col-sm-3">
        Arama İşlemi :
    </div>
    <div class="col-sm-9">
        <asp:TextBox CssClass="form-control" ID="txtAra" 
placeholder="Aranılan kelimeyi giriniz..." runat="server"></asp:TextBox>
    </div>
</div>

Adım 46: Ara butonuna gerekli kodları yazalım. 

protected void btnAra_Click(object sender, EventArgs e)
{
    Listele();
}

Arama işlemi için girilen ifade txtAra kutusuna girildiğinde Ara butonuna basılırsa diğer kutuların required özelliği olduğu için arama işlemi gerçekleşmez. Zaten metin kutularına ait sınırlamaların client tabanlı değil sunucu tabanlı olması gerektiğinden required özelliklerini silelim. Ara dediğimizde arama işleminin gerçekleştiğini görürsünüz.

Adım 47: Peki girilen kelime tabloda yoksa ekrana boş bir liste gelir. Kullanıcı tüm listeyi nasıl görebilir. Bunun için txtAra metin kutusu içindeki değerler silinmeli ve Ara butununa yeniden basılmaldıır. Ara butonuna yeniden basmak yerine Enter tuşuna basılması işlemini yapmamız daha anlamlı olacaktır. Öncelikle txtAra kutusunu düzenleyelim.

<asp:TextBox CssClass="form-control" ID="txtAra" 
placeholder="Aranılan kelimeyi giriniz..." runat="server" 
AutoPostBack="true" OnTextChanged="txtAra_TextChanged"></asp:TextBox>

Daha sonra TextChanged olayını aşağıdaki gibi düzenleyelim.

protected void txtAra_TextChanged(object sender, EventArgs e)
{
    Listele();
}

Adım 48: Metin kutularının required özelliklerini sildiğimiz için Kaydet butonuna basıldığında tabloya boş kayıt eklenecektir. Bu sorunu çözmek için birden fazla yöntem mevcuttur. Ben bunlardan birini kullanacağım. Kullanıcının metin kutularına boş değer girmesini kontrol eden bir metod tanımlayalım.

bool kontrol(string ad, string soyad, string kullanici, string sifre)
{
    if (string.IsNullOrEmpty(ad) || string.IsNullOrEmpty(soyad) || 
string.IsNullOrEmpty(kullanici) || string.IsNullOrEmpty(sifre))
    {
        return false;
    }
    return true;
}

Adım 49: Tanımlanan bu metodu kaydetme ve düzeltme işleminde şöyle kullanabiliriz.

if (!kontrol(ad, soyad, kullanici, sifre))
{
    Response.Write("<script>alert('Lütfen tüm alanları doldurunuz.')
</script>");
    return;
}

Adım 50: Arama işleminden sonra ekrana gelen bir kayıt üzerinde silme ya da düzenleme işlemi yapıldığında tüm kayıtların ekrana gelmediğini görürsünüz. Bu sorunu çözmek için txtAra metin kutusunun içini boşaltmamız gerekir. Bu tanımlamayı Temizle() metodunun içine yazalım.

txtAra.Text = "";

Adım 51: Tablo üzerinde ekleme, silme, düzenleme ve arama işlemlerini gerçekleştirdik. Şimdi kayıtlar üzerinde hareket etme işlmini yapalım. İlk butonuna basarak tabloda yer alan kayıtlardan ilk kayda konumlanalım. Gerekli komutları aşağıya yazalım.

protected void btnFırst_Click(object sender, EventArgs e)
{
    if (grvListe.Rows.Count > 0)
    {
        grvListe.SelectedIndex = 0;

        kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
        txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
        txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
        txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
        txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;

        txtPassword.TextMode = TextBoxMode.SingleLine;

        btnKaydet.Enabled = false;
        btnDuzelt.Enabled = true;
        btnSil.Enabled = true;
        txtAra.Text = "";
        txtAra.Enabled = false;
    }
}

Adım 52: Tablo üzerinde ekleme, silme, düzenleme ve arama işlemlerini gerçekleştirdik. Şimdi kayıtlar üzerinde hareket etme işlmini yapalım. İlk butonuna basarak tabloda yer alan kayıtlardan ilk kayda konumlanalım. Gerekli komutları aşağıya yazalım.

protected void btnFırst_Click(object sender, EventArgs e)
{
    if (grvListe.Rows.Count > 0)
    {
        grvListe.SelectedIndex = 0;

        kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
        txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
        txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
        txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
        txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;

        txtPassword.TextMode = TextBoxMode.SingleLine;

        btnKaydet.Enabled = false;
        btnDuzelt.Enabled = true;
        btnSil.Enabled = true;
        txtAra.Text = "";
        txtAra.Enabled = false;
    }
}

Adım 53: Tablo üzerinde ekleme, silme, düzenleme ve arama işlemlerini gerçekleştirdik. Şimdi kayıtlar üzerinde hareket etme işlmini yapalım. İlk butonuna basarak tabloda yer alan kayıtlardan ilk kayda konumlanalım. Gerekli komutları aşağıya yazalım.

protected void btnFırst_Click(object sender, EventArgs e)
{
    if (grvListe.Rows.Count > 0)
    {
        grvListe.SelectedIndex = 0;

        kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
        txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
        txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
        txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
        txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;

        txtPassword.TextMode = TextBoxMode.SingleLine;

        btnKaydet.Enabled = false;
        btnDuzelt.Enabled = true;
        btnSil.Enabled = true;
        txtAra.Text = "";
        txtAra.Enabled = false;
    }
}

Adım 54: Son butonuna basarak tabloda yer alan kayıtlardan son kayda konumlanalım. Gerekli komutları aşağıya yazalım.

protected void btnLast_Click(object sender, EventArgs e)
{
    if (grvListe.Rows.Count > 0)
    {
        grvListe.SelectedIndex = grvListe.Rows.Count - 1;

        kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
        txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
        txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
        txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
        txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;

        txtPassword.TextMode = TextBoxMode.SingleLine;

        btnKaydet.Enabled = false;
        btnDuzelt.Enabled = true;
        btnSil.Enabled = true;
        txtAra.Text = "";
        txtAra.Enabled = false;
    }
}

Adım 55: Önceki butonuna basarak tabloda yer alan kayıtlardan geriye doğru konumlanalım. Gerekli komutları aşağıya yazalım.

protected void btnPrevious_Click(object sender, EventArgs e)
{
    if (grvListe.Rows.Count > 0 && grvListe.SelectedIndex > 0)
    {
        grvListe.SelectedIndex = grvListe.SelectedIndex - 1;

        kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
        txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
        txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
        txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
        txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;

        txtPassword.TextMode = TextBoxMode.SingleLine;

        btnKaydet.Enabled = false;
        btnDuzelt.Enabled = true;
        btnSil.Enabled = true;
        txtAra.Text = "";
        txtAra.Enabled = false;
    }
    else
    {
        Response.Write("<script>alert('Bu ilk kayıttır. 
Önceki kayıt yok.')</script>");
    }
}

Adım 56: Sonraki butonuna basarak tabloda yer alan kayıtlardan ileriye doğru konumlanalım. Gerekli komutları aşağıya yazalım.

protected void btnNext_Click(object sender, EventArgs e)
{
    if (grvListe.Rows.Count > 0 && 
grvListe.SelectedIndex < grvListe.Rows.Count - 1)
    {
        grvListe.SelectedIndex = grvListe.SelectedIndex + 1;

        kodu = Convert.ToInt32(grvListe.SelectedRow.Cells[1].Text);
        txtAdi.Text = grvListe.SelectedRow.Cells[2].Text;
        txtSoyadi.Text = grvListe.SelectedRow.Cells[3].Text;
        txtUsername.Text = grvListe.SelectedRow.Cells[4].Text;
        txtPassword.Text = grvListe.SelectedRow.Cells[5].Text;

        txtPassword.TextMode = TextBoxMode.SingleLine;

        btnKaydet.Enabled = false;
        btnDuzelt.Enabled = true;
        btnSil.Enabled = true;
        txtAra.Text = "";
        txtAra.Enabled = false;
    }
    else
    {
        Response.Write("<script>alert('Bu son kayıttır. 
Sonraki kayıt yok.')</script>");
    }
}

Adım 57: Seçili satırda gerekli işlemler yapıldıktan sonra hala ilgili satırın seçili olduğunu fark ettim. Seçili satırı iptal etmek için aşağıdaki kodu Temizle() metodu içine yazalım.

grvListe.SelectedIndex = -1;

Projeyi kaydedip çalıştıralım. Hatasız bi şekilde çalıştığını görürsünüz. 


İlgili Makaleler
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem Birinci Yazılı Çalışma Soruları
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Seri Port Yardımıyla Arduino Devresine Bağlanıp Ledleri Asp.Net Web Uygulamasından Yakıp Söndürme
Visual Studio 2022 Programında Asp.Net Web Application Şablonu Görünmüyor Hatasını Düzeltme
Microsoft Visual Studio Live Share Nedir? Nasıl Kullanılır?
Sitenin Alexa Dünya Sıralamasını Kodlarla Öğrenme
Personele Ait Boy ve Kilo Bilgilerine Göre İdeal Kiloyu Bulan Uygulamayı Asp.Net İle Yapınız
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem İkinci Yazılı Çalışma Soruları
Stripe Kullanarak Kredi Kartı ile Ödeme İşlemi Yapan Asp.Net Uygulaması
Verilen Bir Sayının Asal Sayı Olup Olmadığını Kontrol Eden Asp.Net c# Uygulaması
Core MVC Uygulamalarında Area Yapısı ile Modüler Tasarım ve Yönlendirme Yönetimi
Web Uygulamalarında SqLite Kullanımı
Asp.Net Uygulamalarında Sweet Alert Mesaj Kullanımı
Core Mvc Projesinde Model Binding Yaparak Toplama İşlemini Yapan Web Projesini Tasarlama
Core Mvc Projesinde Kullanıcıdan Farklı Veri Alma Yöntemlerini Kullanarak Toplama İşlemini Gerçekleştirme
Asp.Net Uygulamalarında Response.Redirect Kullanarak Web Sayfasını Yeni Sekmede Açma
Kredi Kartı Taksitlendirme İşlemini Yapan Uygulamayı Asp.Net Olarak Olarak Tasarlayan Web Uygulaması
Asp.Net Uygulamalarında Modal PopUp Oluşturma
Bir Otobüs Firmasına Ait Bilet Satış İşlemlerini Class(Sınıf) Tanımlayarak Yapan c# Form Uygulaması
Asp.Net Uygulamalarında DataList (Veri Listeleme) Kontrolü

Yorum Ekle
   
Kötü
İyi