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
Ş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
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.
[wpdm_file id=87]
1 Yorum
Pingback: ASP.NET Kayıt Otomasyon Örneği ? 6 | Linefixed