【问题标题】:How do I sort a list of checkboxes by their name?如何按名称对复选框列表进行排序?
【发布时间】:2019-09-08 19:42:11
【问题描述】:

我有一个foreach 循环,它用来自groupboxcheckboxes 填充列表。问题是它们是按随机顺序添加的。由于我按字母升序对它们进行了命名,因此我想按它们的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();

【问题讨论】:

  • 定义“不做任何事情”。
  • 你把.OrderBy放在哪里了?
  • 您能否发布带有.OrderBy 的代码,因为您已经实现了它和输出示例?似乎很奇怪,这不起作用。
  • 说不做任何事情正是我的意思。在它执行那行代码后,当我使用调试器检查时没有任何变化
  • @Ziema 我不认为你的意思是你认为你的意思。当然,它正在做某事,它正在对集合进行排序。您只是没有以有意义的方式使用结果。

标签: c# list winforms sorting checkbox


【解决方案1】:

我将删除您在评论中提供的有关名称中数字的一些信息,因此我可能会或可能不会在这里关闭..
取决于你有多少,你肯定会看到一个问题。按Name 排序是直接的字符串比较,也就是说,它不会以相同的方式考虑数值。

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

如果您想考虑数值,您需要解析名称并将一些额外的智能添加到自定义排序方法中。
这是一个类似的问题。对于您的具体情况,这可能是一个很好的起点:sort string-numbers

【讨论】:

  • 谢谢!我删除了Name 属性中的数值,并将它们替换为按字母顺序排列的数值,这解决了问题。
【解决方案2】:

你有没有尝试过这样的事情:

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

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多