解决方案 »

  1.   

    字段类型Integer就可以吧?建的是字符串类型的字段好像没办法。
      

  2.   

    上面的数字只是举了个例。实际上更多的是decimal类型的数据。我排查了一下。是因为使用了sqlite 自带的函数round取值之后出现了这种问题。
      

  3.   

    还是这个问题。在经过排查之后,发现导致这个现象出现的原因是因为使用了 SQLITE3自带的Round函数来求近似值。结果求出来的值就无法正常显示。
    比如说求出来的数据为  -0.01,-0.5,0, 2.5, 10.5
    由小到大正常顺序应该为 -0.5, -0.01, 0 ,2.5, 10.5
    由小到大实际排序顺序为 -0.01, -0.05, 0, 10.5, 2.5
    再经过试验发现,不管是Round函数也好,或者是cast函数,只要是在sql语句中对值进行了处理那么最后查询出来的值都不能按数字大小进行排序。
    用的查询控件是 ZeosLib,表格控件为 cxgrid,
      

  4.   

    设置cxgrid对应列为integer没有用吗?
      

  5.   


    如果你的意思是设置对应列的ValueType为Integer的话确实是没用的。
      

  6.   

    别动基本数据, cxgrid的列设置显示样式, 可以控制小数位长度.   字段类型设为浮点,或双精度的就可以.
      

  7.   

    谢谢回答。这也是我现在使用的方法。我在sqlite存储数据的过程中使用了一个值(-999999)来代替 Null 。然后在读取数据的时候需要判断,如果值为-99999就用null来替换掉。用sql语句执行的操作。举个例子:select ifnull((case col1 when -999999 then null else col1 end),null) from table1 这样的SQL句子。结合上面的内容,只要在SQL语句中对数据进行任何操作,就无法按正常数值的方式来排序。所以请问怎样才能替换掉数据中的-999999(查询的内容中一共有20列,共有14列有可能出现-999999)。谢谢。
      

  8.   

    看看官方论坛的两个帖子,有demo可以下载:
    https://www.devexpress.com/Support/Center/Question/Details/T102124https://www.devexpress.com/Support/Center/Question/Details/Q314923
      

  9.   

    我结合两个帖子修改了一下代码,支持数字列排序,保留原来的字符串列排序:
    http://blog.csdn.net/zengcong2013/article/details/40356301
      

  10.   

    查询不用这么麻烦,  直接取值就行, 显示的字符串可以在cxgrid中设置