如果我有一列是数字,int或者float,现在想点击列头的时候自动排序应该怎么做.
因为我发现自动排序是按字符串的方式来的,比如我有三行,每行是:90.1,80.2,9.3
那么降序排列将会是:90.1,9.3,80.2而不是我想要的90.1,80.2,9.3
请问该怎么做?

解决方案 »

  1.   

    处理sortcompare事件, 根据e.Column知道你要排序的是哪个列,如果是字符串列就按字符串排序,若为数字列,则按数字排序
      

  2.   

    怎么才能按数字排序呢?难道我排完还要遍历一遍,再把值都写进datagridview里面?
      

  3.   

    处理ColumnHeaderMouseClick事件,根据e.ColumnIndex,对绑定的数据源进行排序。
      

  4.   

    可以用以下条件实现字符串排序
    Order by CInt(Left(str,Instr(str,'.')-1)), CInt(Right(str,Len(str)-Instr(str,'.')))
      

  5.   

    补充下:
    刚是升序,其中str即为你要排序的字段名称
    Order by CInt(Left(字段名称,Instr(str,'.')-1)) Desc, CInt(Right(字段名称,Len(str)-Instr(字段名称,'.'))) Desc
      

  6.   

    忘了说了,我的数据不是来自于数据库
    是用
    string[] row = new string[this.dataGridView.Columns.Count];
    row = {"","",""}
    this.dataGridView.Rows.add(row)
    的方式添加的,因为数据全在文本文件上
      

  7.   

    自己添加的也可以先导入自己建的临时datatable,然后查询排序
      

  8.   

    把文本文件读到DataTable,再绑定到DataGridView吧,这样操作起来方便。
      

  9.   

    ........
    大家都建议datatable啊,那我试试吧
      

  10.   

    DataGridView的column有个DataType的属性,如果这个type是float或者int,排序的时候会按数字的方式来吗?
      

  11.   

    先把资料放进一个DataTable里面去,
    然后利用DataTable的DefaultView进行自己想要的排序
    例子:
             DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(decimal));
            dt.Rows.Add(new object[] { 90.1 });
            dt.Rows.Add(new object[] { 82.3 });
            dt.Rows.Add(new object[] { 10.5 });
            dt.Rows.Add(new object[] { 6.5 });        DataView dv = dt.DefaultView;
            //dv.Sort = "ID desc";
            dv.Sort = "ID ASC";        for (int i = 0; i < dv.Count; i++)
            {
                Response.Write(dv[i]["ID"].ToString() + "<BR>");
            }处理完之后,在绑定给Grid就可以达到楼主的目的了
      

  12.   

    按照大家说的试了一下,还是失败,不知道错在哪
    for (int i = 0; i < defaultColumn.Length; i++)
                {
                    FieldInfo fi = an.GetType().GetField(defaultColumn[i].Trim());
                    if (fi != null)
                    {
                         if ((string)fi.GetValue(an) == "MROM")
                        {
                            dt.Columns.Add((String)fi.GetValue(an), typeof(decimal));
                        }
                        else
                        {
                            dt.Columns.Add((String)fi.GetValue(an), typeof(string));
                        }
                    }
                }
    上面是datatble添加行,其中mrom那一列是decimal的
    DataView dv = dt.DefaultView;
                dv.Sort = "mrom desc";
                this.dataGridViewX1.DataSource = dt;这个设置mrom的倒叙排列object[] row = new object[this.dataGridViewX1.Columns.Count];for (int i = 0; i < row.Length; i++)
                                    {
                                        FieldInfo fi = tmp.GetType().GetField(Tools.defaultColumn[i].Trim());
                                        if (fi != null && Tools.defaultColumn[i].Trim() != "MROM")
                                        {
                                            row[i] = fi.GetValue(tmp).ToString();
                                        }
                                        else
                                        {
                                            row[i] = Convert.ToDecimal(fi.GetValue(tmp));
                                        }
                                    }
                                    dt.Rows.Add(row);
    这个是赋值最后排序结果还是按照字符的方式来的
    90过了就是9,不是80,我晕晕晕