7 Ocak 2019 Pazartesi

Winforms ListView

Giriş
ListView binding bir bileşen değil, kendisine verilen bilgisinin kopyasını alıyor gibi düşünülebilir. ListBox'tan daha gelişmiş özelliklere sahip. Bu sınıfla çalışırken barındırdığı iki sınıfı daha bilmek lazım. Bunlar ListViewItem ve ListViewSubItem sınıfları

View Tipi
ListView bileşeninin sağ üst köşesindeki küçük oka tıklanarak "View" tipi değiştirilebilir.  4 tane view tipi sunuluyor. Bunlar iconview, small icon-view, list-view, details-view. Ben hep "Details" seçeneğini kullandım.

BeginEdit metodu
LabelEdit alanı true yapılara liste düzenlenebilir. Düzenleme işlemini kodla başlatmak için şöyle yaparız.
listView1.SelectedItems[0].BeginEdit();
Bu kod sonucunda bir TextBox yaratılır. Bu TextBox'ın Key eventleri ne yazık ki ListView nesnesine gelmiyor. Düzenleme işlemi bitince AfterLabelEdit event'i yakalanırsa şu kod çağrılabilir.
private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
    // Validation code goes here
}
Columns Alanı - Sütun Eklemek
Tasarım ekranından sütun eklenebileceği gibi, koddan da sütun eklenebilir.
listView1.Columns.Add("ID",20);
listView1.Columns.Add("Name",40);
listView1.Columns.Add("Mobile",40);
Sütunu yaslayabiliriz.
listView1.Columns.Add("From", 100, HorizontalAlignment.Left);
FullRowSelect Alanı- Satır Seçimi
Satırın tamamı seçilsin istersek şöyle yaparız.
listView1.FullRowSelect = true;
ItemCheck Event
Şöyle yaparız.
this.listView1.ItemCheck += new ItemCheckEventHandler(listView1_ItemCheck);
Handler şöyledir.
private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
  if (e.CurrentValue != CheckState.Checked) return;
  for (int i = 0; i < lvBase.Items.Count; i++)
  {
    lvBase.Items[i].Checked = true;
  }
}
Items Alanı
Şöyle yaparız.
listView1.Items.Clear();
Items Alanı - Satır Eklemek
Yeni bir satır nesnesi eklemek için şöyle yaparız. Diğer sütunlara yazmak için ListViewItem sınıfının SubItems listesi kullanılır.
ListViewItem item = new ListViewItem("colum1");
item.SubItems.Add("column2");
item.SubItems.Add("column3");
item.SubItems.Add("column4");
listView1.Items.AddRange(item);
Bir csv dosyadındaki satırları şöyle gösteririz.
foreach(string strView = File.ReadLines(filepath))
{
  String[] strArray = strView.Split(new char[] { ',' });
  ListViewItem item = new ListViewItem(strArray[0].ToString());

  item.SubItems.Add(strArray[1].ToString());
  item.SubItems.Add(strArray[2].ToString());
  item.SubItems.Add(strArray[3].ToString());
  item.SubItems.Add(strArray[4].ToString());
  item.SubItems.Add(strArray[5].ToString());
  item.SubItems.Add(strArray[6].ToString());
  listView1.Items.Add(item);
}
Bir sütunun rengi şöyle değiştirilir.
item.SubItems[0].ForeColor = System.Drawing.Color.Red;
Bir sütunun font'u şöyle değiştirirlir.
item.SubItems[0].Font = new Font(..., FontStyle.Italic);
Şöyle yaparız.
item.UseItemStyleForSubItems = false;
LabelEdit Alanı
Şöyle yaparız.
listView1.LabelEdit = true;
SelectedItems Alanı - Seçili Satırlar
Seçili satırlar şöyle silinir.
foreach (ListViewItem item in lstImgAdded.SelectedItems)
{
    item.Remove();
}
SmallImageList Alanı
Şöyle yaparız.
listView1.SmallImageList = imageList1;
listView1.LargeImageList = imageList1;
StateImageList Alanı
Örnek ver

Tag Alanı
Seçili satırın 3. sütununun Tag alanıa erişmek için şöyle yaparız.
if ( listView1.SelectedItems.Count > 0 &&     
     listView1.SelectedItems[0].SubItems.Count > 2 )
   listView1.SelectedItems[0].SubItems[2].Tag == seen ?  "Seen" :  "Not Seen";
Sorting Alanı 
Şöyle yaparız.
listView1.Sorting = SortOrder.None;
View Alanı 
Şöyle yaparız.
listView1.View = View.Details;
SelectedIndexChanged Event
Bu event gelirse SelectedItems listesi seçilen nesneleri içerir.
void listView1_SelectedIndexChanged(object sender, EventArgs e) {
  if (listView1.SelectedItems.Count > 0) {
    label1.Text = (string)listView1.SelectedItems[0].Text;
    textBox1.Text = (string)listView1.SelectedItems[0].SubItems[1].Text;
  }
}

Hiç yorum yok:

Yorum Gönder