簡體   English   中英

添加數據后,在C#中按字母順序對復選框列表進行適當排序

[英]Sort a checkboxlist alphabetically, in place, in C# after the data is added

控件( ListItems )是動態創建的,因此無法對插入前的內容進行排序。

我嘗試了一種解決方案,該解決方案可以完成工作(在列表中排序然后重建控件),但是我想要一個更優雅的解決方案。

為了完整起見,以下是我當前的解決方案:

        List<ListItem> lli = new List<ListItem>();

        foreach (ListItem item in cblGIFFlags.Items) lli.Add(item);
        cblGIFFlags.Items.Clear();
        bool sorting = true;
        while (sorting)
        {
            sorting = false;
            for (int i = 0; i < lli.ToArray().Length - 1; i++)
            {
                ListItem x = lli[i];
                ListItem y = lli[i + 1];
                if (Comparer<String>.Default.Compare(x.Text,y.Text) > 0)
                {
                    lli[i] = y;
                    lli[i + 1] = x;
                    sorting = true;
                }
            }
        }
        foreach (ListItem item in lli) cblGIFFlags.Items.Add(item);

由於ListItemCollection實現IEnumerable,所以我想也許可以將其轉換為IEnumerable <ListItem>之類的東西。 我不知道該怎么做。 這是我能想到的最好的方法:

var items = new List<ListItem>();
foreach (ListItem item in listBox.Items) items.Add(item);
listBox.Items.Clear();
listBox.Items.AddRange(items.OrderBy(i=>i.Value).ToArray());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM