Anasayfa / Yazılım / ASP.NET / ListBox Kontrolü, Diziler ve PostBack – 2

ListBox Kontrolü, Diziler ve PostBack – 2

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

ListBox Kontrolü, Diziler ve PostBack Olayı

Şu ana kadar sayfam yüklendiği anda isimler soldaki listboxa yazılıyor, ekle butonuna da basınca sağdaki listboxa alınıyor. Şimdiki amacım sağdaki listbox altında yer alan Çıkar butonuna basıncada hepsini buradan çıkarsın. Yani hepsini silsin. Bunun için Items.Remove özelliğini kullanacağım. Her bir öğeyi döngü ile silmeyi gösterelim. Çıkar butonuna çift tıklayıp click eventine giriyorum kodlarımı yazıyorum.

protected void btnCikar_Click(object sender, EventArgs e)
    {
        //çıkarma işlemi yapacağım için bu sefer ters bir döngü kuruyorum, düz döngü kurarsam yarı-yarı çıkarma işlemi yapar.
        for (int i = lbSinif.Items.Count -1; i>=0; i--)
        {
            lbSinif.Items.Remove(lbSinif.Items[i].Text);
        }
    }

Şimdi uygulamamda ekleme ve çıkarma işlemini tüm liste için yapmayı gördüm. Buraya kadar tamam. Buraya kadar aslında uygulamamın birinci aşaması idi. Şu anki tüm kodlarım şöyle :

Default.aspx :

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





    
    


    
Öğrenci Listesi Sınıftaki Öğrenciler

Default.aspx.cs

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

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //isimler isminde string tipinde 10 elemanlı bir dizi oluşturuyorum, ve kod ile isimleri dizime yani listboxa indeks
        //numaraları ile yüklüyorum
        string[] isimler = new string[10];
        isimler[0] = "İsmail";
        isimler[1] = "Ayşe";
        isimler[2] = "Ali";
        isimler[3] = "Fatma";
        isimler[4] = "Veli";
        isimler[5] = "Mehmet";
        isimler[6] = "Zeynep";
        isimler[7] = "Yusuf";
        isimler[8] = "Erkan";
        isimler[9] = "Eyüp";

        //Dizimi oluşturdum, şimdi bu dizi içinde for döngüsü ile dönerek her bir elemanı lbogrncilere alıyorum
        //Ancak öncelikle sayfamın PostBack durumunu kontrol ediyorum

        if (!Page.IsPostBack)  //Sayfam PostBack edilmemişse for döngüsü çalışcak, edilmişse tekrar çalışmayacak
        {
            for (int i = 0; i < isimler.Length; i++)
            {
                lbOgrenciler.Items.Add(isimler[i]);
            }
        }
    }
    protected void btnEkle_Click(object sender, EventArgs e)
    {
        //Bu işlemi yapabilmek için lbogrenciler içinde for döngüsü ile döneceğim, sonra buradaki her elemanı lbsinifa alacağım
        for (int i = 0; i < lbOgrenciler.Items.Count; i++)
        {
            lbSinif.Items.Add(lbOgrenciler.Items[i].Text);
        }
    }
    protected void btnCikar_Click(object sender, EventArgs e)
    {
        //çıkarma işlemi yapacağım için bu sefer ters bir döngü kuruyorum, düz döngü kurarsam yarı-yarı çıkarma işlemi yapar.
        for (int i = lbSinif.Items.Count - 1; i >= 0; i--)
        {
            lbSinif.Items.Remove(lbSinif.Items[i].Text);
        }

    }
}

Şimdi uygulamamı farklı bir boyuta taşımak istiyorum, yapmak istediğim şu, ekle butonuna basınca solda yer alan listboxda mouse ile seçtiğim isim sağdakine eklensin. Bunun için Selected.Item özelliği kullanılır. Bunun için ekle butonuna çift tıklıyorum ve Click eventinde yer alan mevcut kodları siliyorum ve aşağıdaki kodları ekliyorum.

protected void btnEkle_Click(object sender, EventArgs e)
    {
        lbSinif.Items.Add(lbOgrenciler.SelectedItem.Text);
    }

Bu şekilde uygulamamı çalıştırıp, solda yer alan listboxdan bir isim seçili iken ekle butonuna basınca bu sefer sadece seçtiğim isim ekleniyor. Bu arada çoklu seçim yapabilmek için mouse sol tuş ile birlikte klavyeden Ctrl tuşunu basılı tutmak gerekiyor.

Peki şu anda çıkar butonuna basınca isimlerin hepsi çıkıyor, aynı mantıkla çıkar butonuna basınca ben seçili ismin çıkarılmasını istiyorsam ne yaparım. Bu seferde çıkar butonun click eventinde aşağıdaki kodları yazarım.

 protected void btnCikar_Click(object sender, EventArgs e)
    {
        lbSinif.Items.Remove(lbSinif.SelectedItem.Text);
    }

Tek tek ekleme ve tek tek çıkarma da yapabildik. Peki yine farklı bir boyuta geçelim. Diyelim ki anda birden fazla eklemek istiyorum. 2-3-4-5 vs seçip sonra ekle demek istiyorum yani. Aynı şekilde çıkarmak içinde bunu yapacağım. Bunun için ne yapabilirim. Bunun için öncelikle listboxlarımın bir özelliğini aktif hale getirmem gerek. Bu da şöyle oluyor, web formumun design alanında soldaki listboxı seçiyorum.

Sonra sağda yer alan properties alanından SelectionMode’u Multiple yapıyorum. Aynı şekilde sağda yer alan listboxı seçip bununda SelectionMode özelliğini Multiple yapıyorum.

Mantık ne olacak peki, birden fazla kişi seçilebileceği için bir defa for döngüsü kullanmam gerek, çünkü kaç tane seçilebileceğini bilmiyorum. Peki bu döngüde listbox içinde yer alan kontrolün seçili olup olmadığını nasıl anlayacağım. İşte burada da karşıma karar yapısı çıkıyor, yani if yapısını kullanacağım. İf ile öğenin seçili olup olmadığını kontrol edeceğim, seçili ise bunu sağda yer alan sinif listboxına atacağım.

Şimdi ekle butonuna çift tıklayıp, içindeki yer alan kodları siliyorum ve aşağıdaki gibi düzenliyorum.

protected void btnEkle_Click(object sender, EventArgs e)
    {
        //Döngüm ile tüm listbox içinde dönüyorum
        for (int i = 0; i < lbOgrenciler.Items.Count; i++)
        {
            //her dönüşte ilgili sıradaki indeks nodaki elemanı kontrol ediyorum, eğer seçili ise bunu
            //sinif listesine ekliyorum
            if (lbOgrenciler.Items[i].Selected)
            {
                lbSinif.Items.Add(lbOgrenciler.Items[i].Text);
            }
        }
    }

Şimdi eklemeyi yaptık peki aynı anda birden fazla seçilip çıkarılmasını da sağlayalım. Mantık aynı yine döngü ile tüm listbox içinde dönerim, seçili olanları if mekanizması ile bulup çıkarırım.

Çıkar butonumun click eventindeki kodları aşağıdaki gibi düzenliyorum.

protected void btnCikar_Click(object sender, EventArgs e)
    {
        for (int i = lbSinif.Items.Count - 1; i >= 0; i--)
        {
            if (lbSinif.Items[i].Selected)
            {

                lbSinif.Items.Remove(lbSinif.Items[i].Text);
            }
        }
    }

Evet tüm kodlarım ise şöyle :

Default.aspx :

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





    
    


    
Öğrenci Listesi Sınıftaki Öğrenciler

Default.aspx.cs :

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

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //isimler isminde string tipinde 10 elemanlı bir dizi oluşturuyorum, ve kod ile isimleri dizime yani listboxa indeks
        //numaraları ile yüklüyorum
        string[] isimler = new string[10];
        isimler[0] = "İsmail";
        isimler[1] = "Ayşe";
        isimler[2] = "Ali";
        isimler[3] = "Fatma";
        isimler[4] = "Veli";
        isimler[5] = "Mehmet";
        isimler[6] = "Zeynep";
        isimler[7] = "Yusuf";
        isimler[8] = "Erkan";
        isimler[9] = "Eyüp";

        //Dizimi oluşturdum, şimdi bu dizi içinde for döngüsü ile dönerek her bir elemanı lbogrncilere alıyorum
        //Ancak öncelikle sayfamın PostBack durumunu kontrol ediyorum

        if (!Page.IsPostBack)  //Sayfam PostBack edilmemişse for döngüsü çalışcak, edilmişse tekrar çalışmayacak
        {
            for (int i = 0; i < isimler.Length; i++)
            {
                lbOgrenciler.Items.Add(isimler[i]);
            }
        }
    }
    protected void btnEkle_Click(object sender, EventArgs e)
    {
        //Döngüm ile tüm listbox içinde dönüyorum
        for (int i = 0; i < lbOgrenciler.Items.Count; i++)
        {
            //her dönüşte ilgili sıradaki indeks nodaki elemanı kontrol ediyorum, eğer seçili ise bunu
            //sinif listesine ekliyorum
            if (lbOgrenciler.Items[i].Selected)
            {
                lbSinif.Items.Add(lbOgrenciler.Items[i].Text);
            }
        }
    }
    protected void btnCikar_Click(object sender, EventArgs e)
    {
        //Döngüm ile tüm listbox içinde dönüyorum
        for (int i = lbSinif.Items.Count - 1; i >= 0; i--)
        {
            //her dönüşte ilgili sıradaki indeks nodaki elemanı kontrol ediyorum, eğer seçili ise bunu
            //sinif listesinden çıkarıyorum
            if (lbSinif.Items[i].Selected)
            {

                lbSinif.Items.Remove(lbSinif.Items[i].Text);
            }
        }
    }
}

Aşağıdaki linkten indirebilirsiniz.

Bir cevap yazın

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