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

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

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

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

Uygulamamızı geliştirmeye devam ediyoruz. Şimdi de Öğrenci silme işlemlerini gerçekleştireceğiz. Bunun için MultiView kontrolümün OgrenciSil View’i içinde aşağıdaki gibi bir tasarım yapıyorum.

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

Tasarımıma ait tüm kodlarım aşağıdaki şekilde :

<%@ 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

Şimdi kullanıcı menüden öğrenci sil dediğinde OgrenciSil view alanı görüntülenecek. Bu view alanı içinde yer alan Öğrenci Sil butonuna bastığında yapacağı işlemleri yazıyorum.

 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;
        }
    }

Evet silme işlemini gerçekleştirme kodlarımızı yazdık. Ancak bu arada sayfamın PostBack olayını da kontrol etmek istiyorum, bunun için sayfamın PageLoad eventinde aşağıdaki kodları yazıyorum :

 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();
            }
            else
            {
                Response.Redirect("Default.aspx");
            }
        }

    }

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

 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();
    }

Çünkü artık uygulamam da bir listbox daha vardı. Şimdi ÖğrenciSil View alanı içinde ÖğrencileriListele linkbutonum var, bu butonun yapacağı işlemleri aslında daha önce metot ile yaptık. Dolayısı ile çok küçük bir kod parçası yazıyoruz. Aslında bu butona gerek yok ama ilk başta tasarıma ekledik, devam edelim. Design alanında bu kontrole çift tıklayalım ve click eventine girip aşağıdaki kodları yazalım.

 protected void lnkbtnOgrencileriListele2_Click(object sender, EventArgs e)
    {
        OgrencileriListele();
    }

Tüm kodları tekrar tümü ile paylaşalım, YoneticiPaneli.aspx kodlarımız :

<%@ 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

Default.aspx.cs kodlarımız :

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();
            }
            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();
    }
}

Bir sonraki yazıda da öğretmen ekle kısmını gerçekleştireceğiz. Uygulamanın şimdiye kadar olan kısmını aşağıdaki linkten indirebilirsiniz.

Bir Cevap Yazın

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