繁体   English   中英

如何按复选框名称对复选框列表进行排序?

[英]How do I sort a list of checkboxes by their name?

我有一个foreach循环,其中充满了来自groupbox checkboxes的列表。 问题在于它们是以随机顺序添加的。 由于我都按字母升序命名它们,因此我想按它们的Name属性对它们进行排序。

我已经尝试使用.Sort()但是它什么也没做。 我也尝试使用Linq表达式DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();

但这也无能为力...

这是我的代码:

GroupBox box = (GroupBox)e.Argument;
string DigInput = "";
List<CheckBox> DigBoxes = new List<CheckBox>();

foreach (Control c in box.Controls)
{
    if(c is CheckBox)
    {
        DigBoxes.Add(c as CheckBox);
    }
}
DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();

我要删除您在评论中提供的有关名称中包含数字的信息,因此我可能会不在此处。
根据您拥有的数量,您肯定会遇到问题。 Name排序是直接的字符串比较,也就是说,它不会以相同的方式考虑数值。

例如,假设您的集合由CheckBox_7CheckBox_10 如果要按数字顺序排列,则希望7排在10之前。字符串不是这种情况。 在每个名称的索引9处,我们有一个7和一个1。7显然更大,这意味着整体上, "CheckBox_7"将在"CheckBox_10"

如果要考虑数字值,则需要解析名称,并在自定义排序方法中添加一些额外的知识。
这是一个类似问题。 对于您的特定情况,这可能是一个很好的起点: 对字符串数字进行排序

您是否尝试过以下方法:

var items = CheckBoxList1.Items
            .Cast<ListItem>()
            .OrderBy(i=>i.Text)
            .ToArray();
        CheckBoxList1.Items.Clear();
        CheckBoxList1.Items.AddRange(items);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM