根据数字对组合框内容进行排序

时间:2012-08-17 19:11:08

标签: c#

我有一个组合框,我用1到40的数字填充它但它显示为1比10-19而不是2比20-29等等甚至我试图通过代码插入数据

for(int i=0;i<41;i++)
Combobox.Items.Inert(i,(i+1).ToString())

还尝试了上面的代码而没有转换为字符串 但同样它显示相同的结果我认为它带来了它们的升序但这不是我想要的请告诉我如何做它,以便它显示数字从1-40 感谢

6 个答案:

答案 0 :(得分:3)

我相信this question is what you are looking for。您将不得不进行自己的排序并关闭它的自定义。

从文章中,这里是组合框排序的反射器代码(私有):

public int Compare(object item1, object item2)  
{  
    if (item1 == null)  
    {  
        if (item2 == null)  
        {  
            return 0;  
        }  
        return -1;  
    }  
    if (item2 == null)  
    {  
        return 1;  
    }  
    string itemText = this.comboBox.GetItemText(item1);  
    string str2 = this.comboBox.GetItemText(item2);  
    return Application.CurrentCulture.CompareInfo.Compare(itemText, str2, CompareOptions.StringSort);  
} 

因此,它将所有内容转换为字符串,因此关闭排序是最佳选择。

答案 1 :(得分:0)

ComboBox的排序始终是Alphabetically and Ascending

如果您不想要此行为,则只需将Sorted属性设置为false即可将其关闭。

答案 2 :(得分:0)

ComboBox总是添加和排序您通过“To String”函数添加的对象。

你总是可以做的是在数字之前添加一个空字符串

if(i < 10){ (Combo.Items.Add(i.ToString(StringFormat(" i",i)))); }
else { Combo.Items.Add(i); }

然后在检索时将其解析为整数。 (不像它应该的那样稳定,但是一个良好的开端)。

答案 3 :(得分:0)

你总是可以封装它。

public class Item : IComparer
{
public Item(int value) { this.Value = value; }

   public int Value { get; set; }

       public int CompareTo(Item item)
  {
                 int ret = -1;
        if (Value < item.Value)
            ret = -1;
        else if (Value > item.Value)
            ret = 1;
        else if (Value == item.Value)
            ret = 0;
        return ret;
      }

}

然后简单地......

for(int i = 0; i < 40; i++)
  comboBox.Items.Add(new Item(i));

答案 4 :(得分:-1)

尝试: -

for(int i=0;i<40;i++)
combobox.Items.Add((i+1).ToString("D2"));

答案 5 :(得分:-1)

试试这个:

for(int i=0;i<41;i++)
Combobox.Items.Add(i);