Anasayfa / Yazılım / ASP.NET / ASP.NET Kayıt Otomasyon Örneği ? 7

ASP.NET Kayıt Otomasyon Örneği ? 7

Bu yazıyı okumadan önce okumadı iseniz aşağıdaki yazıyı okuyunuz.

ASP.NET Kayıt Otomasyon Örneği ? 6

Uygulamamızı geliştirmeye devam ediyoruz. Şimdi de Öğretmen silme işlemlerini gerçekleştireceğiz. Tıpkı öğrenci silme işleminde olduğu gibi bir tasarım olacak hemen hemen. Dolayısı ile de oldukça benzer kod yapısı olacak. Bunun için MultiView kontrolümün OgretmenSil View?i içinde aşağıdaki gibi bir tasarım yapıyorum. Bu tasarımda; bir adet listbox, bir adet buton ve bir adette label kontrolü kullanacağım. Bunun için OgretmenSil view alanı içinde 4 satır bir sütundan oluşan table oluşturdum. Tasarımım aşağıdaki gibi :

Tasarıma ait kodlarımın tamamı ise şöyle, YoneticiPaneli.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="YoneticiPaneli.aspx.cs" Inherits="YoneticiPaneli" %>





    Yönetici Paneli
    


    
Hoşgeldin  Çıkış
Öğrenci Adı :
Öğrenci Soyadı :
     
     
    Öğrencileri Listele  
   
Öğrenci Listesi :
Öğrencileri Listele
Öğretmen Adı :
Öğretmen Soyadı :
     
     
    Öğretmenleri Listele  
     
Öğretmen Listesi :

Bu tasarımda öğretmenleri öncelikle listbox içinde listeliyorum, daha sonra listbox üzerinde seçilen öğretmenleri sil butonuna bastığımda siliyorum. Her sil butonuna basmam demek aynı zamanda öğretmenleri listele anlamına da geliyor.

Şimdi kullanıcı menüden öğretmen sil dediğinde OgretmenSil view alanı görüntülenecek. Bu view alanı içinde yer alan Öğretmen Sil butonuna bastığında yapacağı işlemleri yazıyorum. Bunun çin YoneticiPaneli.aspx web formumuzun design görünümüne geçelim ve OgretmenSil view alanı içinde yer alan Öğretmen Sil butonuna çift tıklayarak bu kontrolün Click eventine geçelim. Aşağıdaki kodları yazıyoruz, açıklamalarım kodların içinde :

 protected void btnOgretmenSil_Click(object sender, EventArgs e)
    {
        //hata yoksa try içindeki işlemler yapılır
        try
        {
            //listboxdan herhangi bir öğe seçilimi değilmi kontrol ediyorum seçili ise bir index no vardır
            //if içindeki işlemler yapılır
            if (lbOgretmenListesi2.SelectedIndex >= 0)
            {
                //seçili öğeyi listboxdan sildim.
                lbOgretmenListesi2.Items.RemoveAt(lbOgretmenListesi2.SelectedIndex);
            }
            //listboxdan silme işlemi yapıldı bilgilendirme yapıyorum.
            lblMesajSilme2.Text = "Silme işlemi gerçekleştirildi!";
            //listboxdan sildim ancak, aslında henüz dosyadan silmedim. Dolayısı ile FileStream classı ile
            //nesnelerimi oluşturup silme işlemi yapmam gerekiyor. Öncelikle doküman içeriğini tamamen boşaltıyorum
            //bu işlemi filemode türü Truncate seçerek yapıyorum. bunun için FileStream classından bir fs instance aldım
            FileStream fsSil = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Truncate);
            //fs instance kapatıyorum
            fsSil.Close();
            //şimdi içeriğini boşalttığım doküman içeriğini listboxda kalan diğer veriler ile doldurmam gerek
            //bunun için tekrar fileStram classımdan bir instance alıyorum adını fskaydet verdim.
            //FileMode ekleme yapacağım için Append oluyor yazma işlemi içinde FileAccess write olacak.
            FileStream fsKaydet = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Append, FileAccess.Write);
            //StreamWriter classımdan instance alıyorum ve fs nesnemi bağlıyorum
            StreamWriter sw = new StreamWriter(fsKaydet);
            //Listbox içindeki öğelerin sayısı kadar bir for döngüsü oluşturuyorum
            for (int i = 0; i < lbOgretmenListesi2.Items.Count; i++)
            {
                //her bir öğeyi sw nesnesi ile yazdırıyorum.
                sw.WriteLine(lbOgretmenListesi2.Items[i].Text);
            }
            //oluşturduğum nesneleri kapatıyorum.
            sw.Close();
            fsKaydet.Close();
            //tekrar listbox içinde listeliyorum.
            OgretmenleriListele();

        }
        //hata olursa mesajla kullanıcıyı bilgilendiriyorum
        catch (Exception ex)
        {
            lblMesajSilme2.Text = "Sistem hatası, işlem gerçekleştirilemedi! " + ex.Message;
        }
    }

Bu arada OgretmenleriListele metodumda da bir takım düzenlemeler yaptım :

void OgretmenleriListele()
    {
        //Dosyadan veri okuyacağım için FileStream classından aldığım fs instance FileMode özelliği open
        //ve erişim özelliği ise Read oluyor. Daha sonra StreamReader classımdan sr nesnesi oluşturup, fs'yi bağlıyorum
        FileStream fs = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs);
        //Daha önce listeleme olmuş olasılığını düşünerek listbox içeriğini ilk anda siliyorum
        lbOgretmenListesi.Items.Clear();
        lbOgretmenListesi2.Items.Clear();
        //txt dokümanım içeriğinde yer alan verilerin toplam satırı kadar dönmesi için while döngüsü kullanıyorum
        //satırlar bitince -1 değeri gelir.
        while (sr.Peek() != -1)
        {
            //gelen satırlardaki verileri ogretmenler değişkenine alıyorum
            string ogretmenler = sr.ReadLine();
            //her bir veriyi listboxa ekliyorum
            lbOgretmenListesi.Items.Add(ogretmenler);
            lbOgretmenListesi2.Items.Add(ogretmenler);
        }
        //döngüm sonlanınca, yani tüm satırlar bitince fs ve sr nesnemi kapatıyorum.
        sr.Close();
        fs.Close();
    }

Şimdi kaydetme işlemimiz tamam, ancak kullanıcı sayfayı ilk kez yüklediğinde öğretmenlerinde listelenebilmesi gerek, bunun için sayfamın Page_Load eventinde de OgretmenleriListele metodumuzun çalıştırılması gerekiyor. Sayfamızın Page_Load eventini aşağıdaki gibi düzenledim :

protected void Page_Load(object sender, EventArgs e)
    {
        //Eğer sayfam daha önce yüklenmedi ise aşağıdaki işlemleri yapacak
        if (!IsPostBack)
        {


            if (Session["Yonetici"] != null)
            {
                lblYoneticiAdi.Text = Session["Yonetici"].ToString();
                OgrencileriListele();
                OgretmenleriListele();
            }
            else
            {
                Response.Redirect("Default.aspx");
            }
        }

    }

Artık öğretmen kaydını silme işlemi de tamamlandı.

Şimdi birde web formumuz da çıkış link butonu var, bu butona basıldığında da session kapatılsın ve kullanıcı çıkış yapıp, default.aspx sayfasına yönlendirilsin. Bunun içinde YoneticiPaneli.aspx web formumuzun design görünümünde Çıkış link butonuna çift tıklıyorum ve click eventini oluşturuyorum. Click eventi altında aşağıdaki kodları yazıyorum :

 protected void lnkBtnCikis_Click(object sender, EventArgs e)
    {
        //session kapatıyorum
        Session.RemoveAll();
        //Default.aspx sayfasına yönlendirme yapıyorum
        Response.Redirect("Default.aspx");
    }

Evet uygulamamız bu kadar. Bu uygulama sayesinde ASP.NET ortamında FileStream, StreamReader, StreamWriter sınıflarını kullanmayı pekiştirdik. Bununla birlikte ASP.NET menü komponenti, ASP.NET Multiview ve View komponenti ve diğer komponentlerin kullanımı, session kullanımı, for döngüsü kullanımı, if karar yapısı kullanımı, listbox kontrolü dizi mantığını iyice pekiştirdik.

Son olarak bu yazımda içeriğini değiştirdiğim dosyaların kodlarını tekrar paylaşıyorum :

YoneticiPaneli.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="YoneticiPaneli.aspx.cs" Inherits="YoneticiPaneli" %>





    Yönetici Paneli
    


    
Hoşgeldin  Çıkış
Öğrenci Adı :
Öğrenci Soyadı :
     
     
    Öğrencileri Listele  
   
Öğrenci Listesi :
Öğrencileri Listele
Öğretmen Adı :
Öğretmen Soyadı :
     
     
    Öğretmenleri Listele  
     
Öğretmen Listesi :

YoneticiPaneli.aspx.cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class YoneticiPaneli : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Eğer sayfam daha önce yüklenmedi ise aşağıdaki işlemleri yapacak
        if (!IsPostBack)
        {


            if (Session["Yonetici"] != null)
            {
                lblYoneticiAdi.Text = Session["Yonetici"].ToString();
                OgrencileriListele();
                OgretmenleriListele();
            }
            else
            {
                Response.Redirect("Default.aspx");
            }
        }

    }
    protected void btnOgrenciKaydet_Click(object sender, EventArgs e)
    {
        //hata durumunu dikkate alarak işlem yapıyorum, eğer hata yoksa try yapım içindeki kodlar çalışıyor
        try
        {
            //Dosyaya veri kaydedeceğim için FileStream classımdan instance almış olduğum fs nesnemin
            //FileMode özelliği veri eklemek için Append ve erişim özelliği ise Write konumundadır.
            FileStream fs = new FileStream(Server.MapPath("ogrenciler.txt"), FileMode.Append, FileAccess.Write);
            //fs nesnemi StreamWriter classımdan türettiğim sw nesnesine bağlıyorum
            StreamWriter sw = new StreamWriter(fs);
            //textboxlardan aldığım veriyi string toplama işlemi ile aralarına boşluk ekleyerek alıyorum.
            sw.WriteLine(txtOgrenciAdi.Text + " " + txtOgrenciSoyadi.Text);
            //FileStream ve StreamWriter nesnelerimi kapatıyorum.
            sw.Close();
            fs.Close();
            //kayıt işleminin tamamlandığını label kontrolümde belirtiyoryum
            lblMesaj.Text = "Kayıt işlemi tamamlanmıştır!";
            //kayıt işlemlerinin ardından textbox içeriklerini boşaltıyorum ve OgrenciAdi textbox'a imlecimi konumlandırıyorum
            txtOgrenciAdi.Text = "";
            txtOgrenciSoyadi.Text = "";
            txtOgrenciAdi.Focus();

        }
            //eğer hata varsa uyarı veriyorum.
        catch (Exception ex)
        {            
            lblMesaj.Text = "Bir hata oluştu!!! " + ex.Message;
        }
    }
    protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
    {
        //multiview kontrolümün activeviewindex özelliğini menu kontrolümün seçili item'inde value değerinden alıyorum.
        MultiView1.ActiveViewIndex = Convert.ToInt32(Menu1.SelectedItem.Value);
        
    }
    protected void lnkbtnOgrencileriListele_Click(object sender, EventArgs e)
    {
        OgrencileriListele();
    }

    //OgrencileriListele adında geriye değer döndürmeyen parametresiz bir metot oluşturuyorum
    void OgrencileriListele()
    {
        //Dosyadan veri okuyacağım işçin FileStream classından aldığım fs instance FileMode özelliği open
        //ve erişim özelliği ise Read oluyor. Daha sonra StreamReader classımdan sr nesnesi oluşturup, fs'yi bağlıyorum
        FileStream fs = new FileStream(Server.MapPath("ogrenciler.txt"), FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs);
        //Daha önce listeleme olmuş olasılığını düşünerek listbox içeriğini ilk anda siliyorum
        lbOgrenciListesi.Items.Clear();
        lbOgrenciListesi2.Items.Clear();
        //txt dokümanım içeriğinde yer alan verilerin toplam satırı kadar dönmesi için while döngüsü kullanıyorum
        //satırlar bitince -1 değeri gelir.
        while (sr.Peek() != -1)
        {
            //gelen satırlardaki verileri ogrenciler değişkenine alıyorum
            string ogrenciler = sr.ReadLine();
            //her bir veriyi listboxa ekliyorum
            lbOgrenciListesi.Items.Add(ogrenciler);
            lbOgrenciListesi2.Items.Add(ogrenciler);
        }
        //döngüm sonlanınca, yani tüm satırlar bitince fs ve sr nesnemi kapatıyorum.
        sr.Close();
        fs.Close();
    }
    protected void btnOgrenciSil_Click(object sender, EventArgs e)
    {
        //hata yoksa try içindeki işlemler yapılır
        try
        {
            //listboxdan herhangi bir öğe seçilimi dğeilmi kontrol ediyorum seçili ise bir index no vardır
            //if içindeki işlemler yapılır
            if (lbOgrenciListesi2.SelectedIndex >= 0)
            {
                //seçili öğeyi listboxdan sildim.
                lbOgrenciListesi2.Items.RemoveAt(lbOgrenciListesi2.SelectedIndex);
            }
            //listboxdan silme işlemi yapıldı bilgilendirme yapıyorum.
            lblMesajSilme.Text = "Silme işlemi gerçekleştirildi!";
            //listboxdan sildim ancak, aslında henüz dosyadan silmedim. Dolayısı ile FileStream classı ile
            //nesnelerimi oluşturup silme işlemi yapmam gerekiyor. Öncelikle doküman içeriğini tamamen boşaltıyorum
            //bu işlemi filemode türü Truncate seçerek yapıyorum. bunun için FileStream classından bir fs instance aldım
            FileStream fsSil = new FileStream(Server.MapPath("ogrenciler.txt"), FileMode.Truncate);
            //fs instance kapatıyorum
            fsSil.Close();
            //şimdi içeriğini boşalttığım doküman içeriğini listboxda kalan diğer veriler ile doldurmam gerek
            //bunun için tekrar fileStram classımdan bir instance alıyorum adını fskaydet verdim.
            //FileMode ekleme yapacağım için Append oluyor yazma işlemi içinde FileAccess write olacak.
            FileStream fsKaydet = new FileStream(Server.MapPath("ogrenciler.txt"), FileMode.Append, FileAccess.Write);
            //StreamWriter classımdan instance alıyorum ve fs nesnemi bağlıyorum
            StreamWriter sw = new StreamWriter(fsKaydet);
            //Listbox içindeki öğelerin sayısı kadar bir for döngüsü oluşturuyorum
            for (int i = 0; i < lbOgrenciListesi2.Items.Count; i++)
            {
                //her bir öğeyi sw nesnesi ile yazdırıyorum.
                sw.WriteLine(lbOgrenciListesi2.Items[i].Text);
            }
            //oluşturduğum nesneleri kapatıyorum.
            sw.Close();
            fsKaydet.Close();
            //tekrar listbox içinde listeliyorum.
            OgrencileriListele();

        }
            //hata olursa mesajla kullanıcıyı bilgilendiriyorum
        catch (Exception ex)
        {
            lblMesajSilme.Text = "Sistem hatası, işlem gerçekleştirilemedi! " + ex.Message;
        }
    }
    protected void lnkbtnOgrencileriListele2_Click(object sender, EventArgs e)
    {
        OgrencileriListele();
    }
    protected void btnOgretmenKaydet_Click(object sender, EventArgs e)
    {
        //hata durumunu dikkate alarak işlem yapıyorum, eğer hata yoksa try yapım içindeki kodlar çalışıyor
        try
        {

            //Dosyaya veri kaydedeceğim için FileStream classımdan instance almış olduğum fs nesnemin
            //FileMode özelliği veri eklemek için Append ve erişim özelliği ise Write konumundadır.
            FileStream fs = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Append, FileAccess.Write);
            //fs nesnemi StreamWriter classımdan türettiğim sw nesnesine bağlıyorum
            StreamWriter sw = new StreamWriter(fs);
            //textboxlardan aldığım veriyi string toplama işlemi ile aralarına boşluk ekleyerek alıyorum.
            sw.WriteLine(txtOgretmenAdi.Text + " " + txtOgretmenSoyadi.Text);
            //FileStream ve StreamWriter nesnelerimi kapatıyorum.
            sw.Close();
            fs.Close();
            //kayıt işleminin tamamlandığını label kontrolümde belirtiyoryum
            lblMesaj2.Text = "Kayıt işlemi tamamlanmıştır!";
            //kayıt işlemlerinin ardından textbox içeriklerini boşaltıyorum ve OgretmenAdi textbox'a imlecimi konumlandırıyorum
            txtOgretmenAdi.Text = "";
            txtOgretmenSoyadi.Text = "";
            txtOgretmenAdi.Focus();
        }
        //eğer hata varsa uyarı veriyorum.
        catch (Exception ex)
        {
           lblMesaj2.Text = "Bir hata oluştu!!! " + ex.Message;
        }
    }

    void OgretmenleriListele()
    {
        //Dosyadan veri okuyacağım için FileStream classından aldığım fs instance FileMode özelliği open
        //ve erişim özelliği ise Read oluyor. Daha sonra StreamReader classımdan sr nesnesi oluşturup, fs'yi bağlıyorum
        FileStream fs = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs);
        //Daha önce listeleme olmuş olasılığını düşünerek listbox içeriğini ilk anda siliyorum
        lbOgretmenListesi.Items.Clear();
        lbOgretmenListesi2.Items.Clear();
        //txt dokümanım içeriğinde yer alan verilerin toplam satırı kadar dönmesi için while döngüsü kullanıyorum
        //satırlar bitince -1 değeri gelir.
        while (sr.Peek() != -1)
        {
            //gelen satırlardaki verileri ogretmenler değişkenine alıyorum
            string ogretmenler = sr.ReadLine();
            //her bir veriyi listboxa ekliyorum
            lbOgretmenListesi.Items.Add(ogretmenler);
            lbOgretmenListesi2.Items.Add(ogretmenler);
        }
        //döngüm sonlanınca, yani tüm satırlar bitince fs ve sr nesnemi kapatıyorum.
        sr.Close();
        fs.Close();
    }
    protected void lnkbtnOgretmenleriListele_Click(object sender, EventArgs e)
    {
        OgretmenleriListele();
    }
    protected void btnOgretmenSil_Click(object sender, EventArgs e)
    {
        //hata yoksa try içindeki işlemler yapılır
        try
        {
            //listboxdan herhangi bir öğe seçilimi değilmi kontrol ediyorum seçili ise bir index no vardır
            //if içindeki işlemler yapılır
            if (lbOgretmenListesi2.SelectedIndex >= 0)
            {
                //seçili öğeyi listboxdan sildim.
                lbOgretmenListesi2.Items.RemoveAt(lbOgretmenListesi2.SelectedIndex);
            }
            //listboxdan silme işlemi yapıldı bilgilendirme yapıyorum.
            lblMesajSilme2.Text = "Silme işlemi gerçekleştirildi!";
            //listboxdan sildim ancak, aslında henüz dosyadan silmedim. Dolayısı ile FileStream classı ile
            //nesnelerimi oluşturup silme işlemi yapmam gerekiyor. Öncelikle doküman içeriğini tamamen boşaltıyorum
            //bu işlemi filemode türü Truncate seçerek yapıyorum. bunun için FileStream classından bir fs instance aldım
            FileStream fsSil = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Truncate);
            //fs instance kapatıyorum
            fsSil.Close();
            //şimdi içeriğini boşalttığım doküman içeriğini listboxda kalan diğer veriler ile doldurmam gerek
            //bunun için tekrar fileStram classımdan bir instance alıyorum adını fskaydet verdim.
            //FileMode ekleme yapacağım için Append oluyor yazma işlemi içinde FileAccess write olacak.
            FileStream fsKaydet = new FileStream(Server.MapPath("ogretmenler.txt"), FileMode.Append, FileAccess.Write);
            //StreamWriter classımdan instance alıyorum ve fs nesnemi bağlıyorum
            StreamWriter sw = new StreamWriter(fsKaydet);
            //Listbox içindeki öğelerin sayısı kadar bir for döngüsü oluşturuyorum
            for (int i = 0; i < lbOgretmenListesi2.Items.Count; i++)
            {
                //her bir öğeyi sw nesnesi ile yazdırıyorum.
                sw.WriteLine(lbOgretmenListesi2.Items[i].Text);
            }
            //oluşturduğum nesneleri kapatıyorum.
            sw.Close();
            fsKaydet.Close();
            //tekrar listbox içinde listeliyorum.
            OgretmenleriListele();

        }
        //hata olursa mesajla kullanıcıyı bilgilendiriyorum
        catch (Exception ex)
        {
            lblMesajSilme2.Text = "Sistem hatası, işlem gerçekleştirilemedi! " + ex.Message;
        }
    }
    protected void lnkBtnCikis_Click(object sender, EventArgs e)
    {
        //session kapatıyorum
        Session.RemoveAll();
        //Default.aspx sayfasına yönlendirme yapıyorum
        Response.Redirect("Default.aspx");
    }
}

Aşağıdaki linkten uygulamanın tamamını indirebilirsiniz..

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir