ListView Kullanımı

Bu yazmızda da sevdiğim bir nesne olan listView ' i anlatmak istiyorum.
Programlarınıza değişik bir hava katıyor tavsiye ederim az da olsa dataGridView kontrolüne göre zahmetli sayılabilir. Burda anlatılanları kabaca kontrol hakkında bilgi sahibi olabilmeniz için yazdım siz daha geliştirebilir ve benimlede paylaşabilirsiniz. Bu kada geyik yeter diyor ve kodlamaya geçiyorum :)
Öncelikle lisView e 3 tane kolon eklemeniz lazım. (isterseniz kodla yapabilirsiniz)

int i = 0;
Bu metod bizden 1 tane görsellik ayarlarını yapmak için listView nesnesi istiyor. Proje içinde çokca kullanacagımızı var sayarsak bu metod işleri hızlandırabilir. Bütün bunları ve daha fazlasını properties ekranından da yapabilirsiniz.

Satır satır açıklayalım biz nerde ne yaptık..

private void ListeDuzenle(ListView _listView)
{
_listView.View = View.Details; //listview in liste şeklinde görünmesi için kullandık.
_listView.Columns[0].Width = 50; // Kolon Genişliğini ayarladık.
_listView.Columns[1].Width = 150; //Kolon isimleride kullanılabilir.
_listView.Columns[2].Width = 150;
_listView.FullRowSelect = true; // Tüm satır seçilmesi için.
_listView.MultiSelect = false; //Birdeb fazla satır seçilemesin diye. Silme vs. işlerde lazım olacak.
_listView.GridLines = true; //Grid çizgileri görünsün istiyorum.
_listView.HideSelection = false; // !!! Normalde listview seçili satırdan (nesneden) ayrıldıgınız zaman seçim olayı kalkar. Biz bunun önüne geçmek için bu özelligi kullandık. Artık nesneden ayrılsanızda arkada gri bir renk bırakır.
}

//Yeni item ler eklediğimiz kısma geldik. Ben burda olayı göstermek için adımı ve web adresimi yazmakla geçiştirdim siz database işlemlerinde de sorgudan dönen degerleri sıkıntı çekmeden ekleye bilirsiniz.

private void btnEkle_Click(object sender, EventArgs e)
{
ListViewItem lstItem = new ListViewItem(); // Yeni bir item tanımladık. Artık item mimiz bu şekilde anılacak.
++i;
lstItem.Text = i.ToString(); // !!! Burdada SubItems.Add() kullanırsınız. 1. kolonun boş oldugunu görürsünüz.
lstItem.SubItems.Add("Fatih UYDURAN"); // SubItems lerimizi eklemeye başladık.
lstItem.SubItems.Add("http://www.artilogo.net");
listView1.Items.Add(lstItem); //Eklediğimiz SubItemleri listView nesnemize ekliyoruz.
}

Sıra geldi eklenen satırlardan silme işlemine

private void btnSil_Click(object sender, EventArgs e)
{
if (listView1.SelectedIndices.Count > 0) //Secili satır varmı yokmu kontrol ediliyor.
listView1.Items.RemoveAt(listView1.SelectedItems[0].Index); //Seçili satırın index i ni yakalayarak satırı sildik.
}
private void Form1_Load(object sender, EventArgs e)
{
ListeDuzenle(listView1); //listview in görünüm ayarlarını yapsın diye metodu çagırdık.
}
private void btnTemizle_Click(object sender, EventArgs e)
{
listView1.Items.Clear(); //listview i boşalttık.
}

Sıra aramada e kadar kayıt var arama olmalı mutlaka.

private void btnAra_Click(object sender, EventArgs e)
{

for (int i = 0 ; i < listView1.Items . Count ; i + + )

{
if (listView1.Items[i].SubItems[1].Text==txtAra.Text)
{
listView1.Items[i].ForeColor = Color.Blue; //Aynıymış ozaman buldugumuz belli olsun işaretleyelim. Yazı rengini mavi yaptık.
listView1.Focus(); // !!! Satırı seçebilmek için nesne üzerine odaklandık. Yoksa alttaki komut iş görmeyecekti. Hata vermezdi ama işlevini yerine getiremezdi.
listView1.Items[i].Selected = true; //Üzerinde oldugumuz satırı seçtik.
break; // !!! Diğer satırları boş yere dolaşmayalım diye döngüden çıktım. Farklı amaçlar için çıkılmayada bilir. Mesela buldugu tüm değerleri işaretlesin yazı rengini mavi yapsın diye.
}
else
{
listView1.Items[i].ForeColor = Color.Empty; //Bir önceki aramada mavi olarak işaretlen değer varsa şimdiki aramayla karışmaması için rengi kaldırdık.
}
}
}

lisview burda en basit haliyle konunun kavrana bilmesi için bu şekilde anlatıldı. Haliyle çok daha detayı var kullanım amacına göre detayladırılabilir.
Umarım faydalı olmuşdur.

String Metodları (String ifadeler üzerinde işlemler)

string str = "fatih"; Tüm işlemleri bu deger temel alınacak.
String boşmu ???
if (String.IsNullOrEmpty(str)) //String ifade Boşsa true dönderir
{
MessageBox.Show("Alana String Bir Deger Giriniz.");
return;
}
String ifadeler Aynımı (Karşılaştırma-1)
*** İnceleyiniz-> String.Compare(strA,strB);
if (str.CompareTo("fatih") == 0) // Aynı ise 0 degilse -1 degeri dönderir.
{
MessageBox.Show("Girilen String Degerler Aynı");
}
else
{
MessageBox.Show("Girilen String ifadeler Farklı");
}
String ifadeler aynımı (Karşılaştırma-2)
*** İnceleyiniz-> String.Equals(strA, strB);)
if (str.Equals("fatih")) //Degerler aynıysa true dönderir
{
MessageBox.Show("Degerler Aynı");
}
else
{
MessageBox.Show("Degerler Farklı");
}
String ifaden belirlenen harflerle başlıyormu ???
if (str.StartsWith("f")) // Başlıyorsa true dönderir
{
MessageBox.Show("Evet");
}
else
{
MessageBox.Show("Hayır");
}
String ifadenin belirlenen harflerle bitiyormu ???
if (str.EndsWith("h")) //Bitiyorsa true d”nderir
{
MessageBox.Show("Evet");
}
else
{
MessageBox.Show("Hayır");
}
Sisteminize e-posta kaydı alıyorsunuz ve sunucunuz. örnk. yahoo desteklemiyor. yahoo.com ile biten e-posta hesaplarını kontrol edip kullanıcılara uyarı verebilirsiniz.

String den parça alma
Kullanımı : string.Substring(BaslangicIndex, BitisIndex);
MessageBox.Show(str.Substring(1, 3));
Sonuç : "fatih" ifadesi için "ati" olarak döner

String ifadenin belilenen kısmını silmek
String.Remove(BaslangicIndex, BitisIndex);
MessageBox.Show(str.Remove(2, 3));
Sonuc : "fatih" ifadesi için "fa" olarak döner.

String ifadenin belirlenen kısmını yada tamamını yeni degerle degiştirmek
Kullanımı : String.Replace(ArananEskiDeger,YeniDeger)
MessageBox.Show(str.Replace("f", "F"));
*** Girilen isimlerin baş harflarini büyük almak isteye bilirsiniz butür durumlarda işinizi görür.
Sonuç : "fatih" ifaderisi için "Fatih" olarak dönderir.

Verilen karakteri String ifade işinde arar ve buldugu index numarasını geriye dönderir.

MessageBox.Show(str.IndexOf("i").ToString());

*** "fatih" ifadesi işinde "i" harfi 4 sırada oldugu için dönderecegi int deger 3 tür.
Neden 4 ncü sıradaki deger 3 dönderiyor diye bir soru oluşabilir. Cevap indexler 0 dan başladıgı için..


Örnek Uygulama:

e-posta adresinde @ işaretinden sonraki uzantıya aldık.
Böyle birşey ne için kullanılabilir. insanlar sisteminize (bu web yada desktop uygulamanız olabilir) e-postalarını kaydettikce bunu bir uzantı havuzu oluşturarak tutabilir bir sonra ki kullanıcı kaydında otomatik olarak listenize eklenmesi saglanabilir. bknz: Kullanıcı Dostu AutoCompleteSource yazımızla birleştirebilirsiniz.
string str = fatih@artilogo.net;

string sonucStr = "";
int Index=0,uzunluk=0;
if (str.IndexOf("@") == -1)
{
MessageBox.Show("Uygun E-posta adresi De§il");
}
else
{
Index = str.IndexOf("@")+1;
uzunluk = str.Length-Index;
sonucStr = str.Substring(Index, uzunluk);
MessageBox.Show(sonucStr);
}

DataView RowFilter

Bu yazımızda SQL de ki viewlere karşılık gelen DataView sınıfını inceleyecez. DataView tıpkı sql de ki View ler gibi belli kriter grupları oluşturularak veri çekilmesini sağlar. Datatable üzerinde çalıştıgı için sizi kaynaklarını boş yere kullanmakdan kurtarır buda performansı olumlu yönde etkiler.

DataView sınıfının RowFilter Özelliği sql deki where komutunun birebir destekler.
Where komutunda kullandıgının her şartı RowFilter da da kullanabilirsiniz.

Sıra geldi kodlamaya;

DataTable dt = new DataTable();

//Gerekli metodumuz
private DataView dtViewFilter(string filtre)
{
DataView dv = new DataView(dt);
dv.RowFilter="AD LIKE '" + filtre + "%'";
return dv;
}

// Metodun kullanımı..
private void textBox1_TextChanged(object sender, EventArgs e)
{
dataGridView1.DataSource = dtViewFilter(textBox1.Text);
}