ListItem elemanlarını sıralama
Ö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