Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加数据后,用C#按字母顺序对复选框列表进行就地排序_C#_Asp.net_Sorting_Checkboxlist - Fatal编程技术网

添加数据后,用C#按字母顺序对复选框列表进行就地排序

添加数据后,用C#按字母顺序对复选框列表进行就地排序,c#,asp.net,sorting,checkboxlist,C#,Asp.net,Sorting,Checkboxlist,控件(ListItems)是动态创建的,因此无法对插入前进行排序 我尝试了一个解决方案,它可以完成这项工作(在列表上排序,然后重建控件),但我想要一个更优雅的解决方案 为了完整起见,以下是我当前的解决方案: List<ListItem> lli = new List<ListItem>(); foreach (ListItem item in cblGIFFlags.Items) lli.Add(item); cblGIF

控件(
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);
List lli=新列表();
foreach(cblGIFFlags.Items中的ListItem项目)lli.Add(项目);
cblGIFFlags.Items.Clear();
布尔排序=真;
while(排序)
{
排序=假;
对于(int i=0;i0)
{
lli[i]=y;
lli[i+1]=x;
排序=真;
}
}
}
foreach(lli中的ListItem项)cblGIFFlags.Items.Add(项);
由于实现了IEnumerable,我想也许我可以强制转换为IEnumerable之类的。我不知道该怎么做。以下是我能想到的最好的:

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());
var items=newlist();
foreach(listBox.Items中的ListItem项目)Items.Add(项目);
listBox.Items.Clear();
Items.AddRange(Items.OrderBy(i=>i.Value.ToArray());

气泡排序的实现
我相信每个人都熟悉它?@Ashburaczenko非常肯定Op说了尝试过的东西——手动排序并重新构造控件。@dbaseman完全正确。添加实现是完全没有意义的,只是用完全不可逆的代码来解决所有问题,这对解决这个问题是没有帮助的(我想它能以一种方式解决这个问题……)DasBeman,这就是为什么我说Studio不告诉的原因。虽然这是一个更优雅的解决方案,但它并没有排序到位。。您仍然需要添加/清除/添加项。@hkf是的,我不知道这是什么类型的集合(ListItemCollection),但它不支持正常的Linq操作。请注意,要使上述功能正常工作,您需要添加对System.Linq.dll的引用。