5 Şub 2016

C#'ta ListView Kullanımı


ListView, ListBox'a benzer olsa da onun biraz gelişmiş hali olarak nitelendirilebilir. ListView'un özellikleri Form tasarımında ya da kod ile düzenlenebilir.








Form tasarımında nasıl bir düzenleme yapılabilir bunu ekran görüntüleri ile anlatacağım;
Edit Columns'a tıklanarak sütunlar eklenir ve bu sütunlara isim verilir.






Her Add'e basılışında yeni bir sütun eklenmiş olur. Bu sütunların adı Text özelliğinden değiştirilir.








Buradaki gibi bir liste görünümü elde edebilmek için View'dan Details seçilmelidir.






Yukarıda Form'un tasarım kısmında yapılan bu değişiklikle kod ile de yapılabilir. Form1_Load'ın içine aşağıdaki kodlar yazılırsa Program çalışınca ListView istenildiği gibi oluşacaktır.
private void Form1_Load(object sender, EventArgs e)
        {
            listView1.View = View.Details;  //View özelliği details olarak değiştirildi
            //sütun ekleme
//sırasıyla sütun adı, sütun boyutu ve sütundaki textlerin ne tarafta duracağı belirtilir.
            listView1.Columns.Add("Ad", 100, HorizontalAlignment.Left);
            listView1.Columns.Add("Soyad", 100, HorizontalAlignment.Left);
        }
Şimdi Ogrenci tipinde bir class açıp Ad ve Soyad olmak üzere 2 tane property tanımlayacağım.
class Ogrenci
    {
        public string Ad { get; set; }
        public string Soyad { get; set; }
    }
Form çalışır çalışmaz Ogrenci class'ı tipinde bir liste oluşturup, bu listeye 2 tane eleman eklemek için de Form1_Load'a aşağıdaki kodları ekliyorum.
            List<Ogrenci> ogrList = new List<Ogrenci>()
            {
                new Ogrenci {Ad = "ahmet", Soyad = "şahin" },
                new Ogrenci {Ad = "burak", Soyad = "sal" }
            };
            foreach(var item in ogrList)
            {
                OgrenciEkle(item);
            }
ogrList'de 2 tane Ogrenci nesnesi var ama bunları listView'a eklemek için OgrenciEkle() metodunu yazıyorum.
private void OgrenciEkle(Ogrenci item)
        {
            ListViewItem lvi = new ListViewItem();
            lvi.Text = item.Ad;
            lvi.SubItems.Add(item.Soyad);
            lvi.Tag = item;
            listView1.Items.Add(lvi);
        }
Önce ListViewItem'dan bir nesne türetiyorum. Bu nesnenin yani lvi'nin text'i ilk sütundaki değerini ifade eder. Subitem'lar ise sırasıyla sonraki sütunlardaki değerleri ifade eder. Burada 2 sütun olduğu için bir tane subitem'a ihtiyacımız var. Tag, kullanıcıya gösterilmez, arka tarafta verileri saklar. Objeyi çekmek için kullanılır. En sonda da listView1.Items.Add ile lvi nesnesi listView'a eklenmiş olur. Bu bir satırın oluşturulması aşamasıdır. Foreach döngüsü ile bu tüm Ogrenci nesneleri için yapılırsa tüm satırlar eklenmiş olur.
TextBox'a girilen değerler listeye eklenmek istenirse bu sefer btnEkle_Click event'i için yeni bir Ogrenci nesnesi oluşturmalıyız. Bu nesnenin Ad property'sini textBox1.Text ve Soyad Property'sini de textBox2.Text olarak göstermeliyiz ve yine oluşan bu Ogrenci nesnesini aşağıdaki gibi OgrenciEkle metoduna parametre olarak göndermeliyiz.
private void btnEkle_Click(object sender, EventArgs e)
        {
            Ogrenci ogr = new Ogrenci()
            {
                Ad = textBox1.Text,
                Soyad = textBox2.Text
            };
            OgrenciEkle(ogr);
        }
Böylece artık yukarıda ekran görüntüsü gözüken programımız çalışabilir duruma gelmiştir. İsteyenler programı buradan da indirebilir.

Bir ListView'a ListViewItem kullanmadan da eleman eklemek mümkündür. ListView'a eklenen ilk elemanın ana eleman diğerlerinin de bunun alt elemanı olduğunu gözönünde bulundururusak bu şekilde ekleme de aşağıdaki gibi yapılır.
private void btnEkle_Click(object sender, EventArgs e)
        {            
            int sayi = listView1.Items.Count;
            listView1.Items.Add(textBox1.Text);
            listView1.Items[sayi].SubItems.Add(textBox2.Text);
        }
ListView'ın eleman sayısı sayi değişkeninde tutularak o indeksli satırın text'ine ve subitem'larına eleman eklenir.

1 yorum: