ListItem elemanlarını sıralama

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"