【问题标题】:How do I sort a combobox after a user inputs text用户输入文本后如何对组合框进行排序
【发布时间】:2015-06-25 17:37:31
【问题描述】:

我有组合框,用户可以在其中输入文本或从列表中选择。当用户输入他们自己的文本,而不是显示在下拉列表的底部或顶部时,我希望它以正确的顺序出现。例如,如果用户输入 24,我希望它出现在 20 到 30 之间。

private void LoadComboBox()
    {
        if (ddlTypeUnits.SelectedValue == "HP")
        {
            MotorSizeThreePhase[] motors = MotorSizeThreePhaseFactory.GetList(ActingMotorType, IsHPorBTU, IsAC, true, Common.GetConnectionString());

            cmbOutputRating.DataSource = motors;
            cmbOutputRating.DataTextField = "MotorSizeHP";
            cmbOutputRating.DataValueField = "MotorSizeHP";
            cmbOutputRating.DataBind();

        }

        ThreePhaseMotorLoad curLoad = (ThreePhaseMotorLoad)this.LoadObject;
        ListItem item = new ListItem(curLoad.Size.ToString()); //gets the stored size value
        if (!cmbOutputRating.Items.Contains(item))  //add the size value to the dropdown list
        {
            cmbOutputRating.DataBind();
            cmbOutputRating.Items.Add(item);
            cmbOutputRating.Text = curLoad.Size.ToString();
        }
    }

【问题讨论】:

    标签: c# asp.net combobox


    【解决方案1】:

    C# - is it possible to arrange ComboBox Items from a to z?

    如果您使用的是 Win Forms,只需使用 ComboBox.Sorted = true;

    如果您的组合框中的数据来自列表的形式,只需使用 OrderBy 到您将要放入 ComboBox 中的数据列表,然后再放入。 示例:

        List<string> a = new List<string>()
        {
            "q",
            "w",
            "e",
            "r",
            "t",
            "y",
            "u",
            "i",
            "o",
            "p",
            "a",
            "s",
            "d",
            "f",
            "g",
            "h",
            "j",
            "k",
            "l",
            "z",
            "x",
            "c",
            "v",
            "b",
            "n",
            "m",
        };
    
        comboBox1.Items.AddRange(a.OrderBy(c => c).ToArray());
    

    【讨论】:

    • 数据来自motors数组,由于其保护级别,我无法将其转换为列表。你知道有什么方法可以把这些值放到一个列表中,排序,然后绑定吗?或者有没有办法对 cmbOutputRating.Items 进行排序?
    • 设置此属性不起作用? ComboBox.Sorted = true;
    • 我刚试过这个,它对我很有效 comboBox1.Items.Add("a"); comboBox1.Items.Add("d"); comboBox1.Items.Add("y");组合框1.Items.Add("b");组合框1.Items.Add("e"); comboBox1.Sorted = true;
    • 我使用的是 Ajax 控件工具包组合框,而不是 winforms 组合框。这没有 .sorted 属性。
    • msdn.microsoft.com/en-us/library/6tf1f0bc(v=vs.110).aspx 首先要对数组进行排序,也就是数据源。添加新项目时,不要将其添加到 combobox.items 中,而是将其添加到数组中,再次排序并再次绑定。希望你明白我的意思:)
    【解决方案2】:

    我没有执行 items.add() 并将项目附加到列表底部,而是将项目插入到正确的索引中。

                int newItemIndex = 0;
                foreach (ListItem li in cmbOutputRating.Items)
                {
    
                    if (Convert.ToDouble(li.Value) < curLoad.Size)
                    {
                        newItemIndex++;
                    }
                }
    
                cmbOutputRating.Items.Insert(newItemIndex, curLoad.Size.ToString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多