开发平台:WINDOWS+.NET
开发语言:c#
问题: 软件里有一个下拉框,列出的是一个"版本号"的字段,字段是从0开始,依次加1,既:0,1,2……。一直到9没问题。到是10,问题出来了。里面的排序是0,1,10,2,3……,不是我需要的按数字大小排序,也既:0,1,2……9,10……。请教大虾这个问题要怎么处理,才能出现我要的结果!是和程序设计有关,还是在WINDOWS里设置排序规则。因为在WINDOWS里,按名称排序文件,也是1,10,2……这样的。(附:由于内部原因,不考虑把1,2…… 设置成01,02……)

解决方案 »

  1.   

    这是由于你绑定的列是字符串造成的,如果你绑定的列是int类型就不会有这种情况,你可以试着把下面的System.Int32换成System.String看看,效果就是你现在的这样,如果要正常显示,需要把绑定列改成int类型的,参考下面代码private void Page_Load(object sender, System.EventArgs e)
    {
    Dropdownlist3.DataSource=GetData();
    Dropdownlist3.DataTextField="Code";
    Dropdownlist3.DataValueField="FName";
    Dropdownlist3.DataBind();
    }
    private DataTable GetData()
    {
    DataTable dt;
    dt = new DataTable(); dt.Columns.Add("Code",System.Type.GetType("System.Int32"));//System.String
    dt.Columns.Add("FName"); for(int i=1; i <= 30; i++)
    {
    DataRow dr = dt.NewRow();
    dr["Code"] = i;
    dr["FName"] = "FName" + i.ToString();
    dt.Rows.Add(dr);
    }
    dt.DefaultView.Sort=" Code asc";
    return dt;
    }
      

  2.   

    System.Type.GetType("System.Int32"))这个是什么意思
      

  3.   

    你可以查一下 msdn。这是取得 int 整数类型的 类型。每个类都有类型。相应的,int 也是有类型的
      

  4.   

    设置你的下拉框Sorted属性为false
      

  5.   

    如果还不行的话,用绑定来做,即用数字来作为ValueMember
      

  6.   

    的确,这个字段是类型是:VARCHAR(30),但是这个是不能变的.请问有没有其他什么好的办法啊?
      

  7.   

    可以在sql中转换int类型,如
    select convert(int,field) as code,name from tbl order by convert(int,field)
    然后帮上去
      

  8.   

    不可以取消排序吗?
    按先后顺序添加.
    ComboBox a = new ComboBox();
    a.Sorted = false;
      

  9.   

    to 的确,这个字段是类型是:VARCHAR(30),但是这个是不能变的.请问有没有其他什么好的办法啊?你可以每次添加的时候,稍作修改,例如:
    comboBox.Item.Add( str )
    改为
    comboBox.Item.Add( str.PadLeft( 5, ' ' ) );即进行格式化显示。
      

  10.   

    不过要取出来的时候,每一项要trimleft
      

  11.   

    数据库结构不能变,但是你的sql语句可以变呀,在sql语句里处理(select convert(int,field) as code,name from tbl order by convert(int,field)),这是你自己写的,如果sql也不能变,哪就仿照
    private DataTable GetData()
    {
    DataTable dt;
    dt = new DataTable(); dt.Columns.Add("Code",System.Type.GetType("System.Int32"));//System.String
    dt.Columns.Add("FName"); for(int i=1; i <= 30; i++)//这个从数据库读取后自己构造datatable
    {
    DataRow dr = dt.NewRow();
    dr["Code"] = i;
    dr["FName"] = "FName" + i.ToString();
    dt.Rows.Add(dr);
    }
    dt.DefaultView.Sort=" Code asc";
    return dt;
    }
    把读取出来的dataset或其他自己构造一个类似上面的datatable,然后绑定就可以了,这样效率会低一些