ListItem elemanlarını sıralama
Bu yazıda ListItem elemanlarını text veya value değerine göre nasıl sıralayabileceğinizi görebilirsiniz.
Önce bir form oluşturalım, bir ListBox, bir TextBox ve bir de Button olsun.
Textbox'a girilen değeri ListBox'a ekleyelim ve ListBox'ın elemanları alfabetik olarak sıralansın.
Formumuz:
<form id="form1" runat="server"> <asp:Panel ID="pnlEkle" runat="server" DefaultButton="btnEkle"> <asp:TextBox ID="txtEkle" runat="server" /> <asp:Button ID="btnEkle" runat="server" Text="Ekle" onclick="btnEkle_Click" /> </asp:Panel> <asp:ListBox ID="lbListe" runat="server" Width="200px" Rows="10" /> </form>
Elemanları ekleme ve sıralama kodumuz:
protected void Page_Load(object sender, EventArgs e) { txtEkle.Focus(); } protected void btnEkle_Click(object sender, EventArgs e) { var eklenecek = txtEkle.Text.Trim(); if (!string.IsNullOrEmpty(eklenecek)) { lbListe.Items.Add(eklenecek); Sirala(); txtEkle.Text = ""; txtEkle.Focus(); } } private void Sirala() { var list = lbListe.Items.Cast<ListItem>().OrderBy(x => x.Text).ToArray(); lbListe.Items.Clear(); lbListe.Items.AddRange(list); }
Linq yardımıyla ListBox itemlarını kolaylıkla sıralayabildiğimizi görüyorsunuz.
ListItem kolleksiyonu barındıran diğer kontroller şunlardır: BulletedList, CheckBoxList, DropDownList, RadioButtonList.
Bunların her biri ListControl class ından türemiştir.
Şimdi bir adım daha ileri gidelim, ListItem türünden kolleksiyon barındıran tüm kontroller için ortak genişletme metotları yazalım.
public static class ExtensionMethods { public static void Sort(this ListControl lb, bool desc = false) { var list = lb.Items.Cast<ListItem>().ToArray(); list = desc ? list.OrderByDescending(x => x.Text).ToArray() : list.OrderBy(x => x.Text).ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } public static void SortByValue(this ListControl lb, bool desc = false) { var list = lb.Items.Cast<ListItem>().ToArray(); list = desc ? list.OrderByDescending(x => x.Value).ToArray() : list.OrderBy(x => x.Value).ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } public static void SortByText(this ListControl lb, bool desc = false) { lb.Sort(desc); } public static void SortRandom(this ListControl lb) { var list = lb.Items.Cast<ListItem>() .OrderBy(x => Guid.NewGuid().ToString()) .ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } }
Kullanım kolaylığını gösterelim:
lbListe.Sort(); // text e göre a->z sırala lbListe.Sort(true); // text e göre z->a sırala lbListe.SortByText(); // text e göre a->z sırala lbListe.SortByText(true); // text e göre z->a sırala lbListe.SortByValue(); // value ya göre a->z sırala lbListe.SortByValue(true); // value ya göre z->a sırala lbListe.SortRandom(); // rastgele sırala
Artık ListItem kolleksiyonuna sahip tüm kontrollerde bu genişletme metotlarını kullanabilirsiniz.
Projeyi indirmek için tıklayın.
Herkese kolay gelsin..
bkz."Kullandığım genişletme metotlarım"
#BulletedList #CheckBoxList #dropdownlist #RadioButtonList #listbox #ListItem #ListControl #Sıralama #sort #Text #value