相关组件:dbgrideh,adoquery,datasource,adoconnection
dbgrideh控件本身是支持点击列自动排列的,只要设置dbgrid.optionseh.dghautosortmarking:=true,同时设置所需实现点击自动排列的列的属性dbgrideh.columns[i].title.titlebutton:=true就可以实现了!
但是,如果数据量达到2万条,估计就会出现查询超时的状况!这就引出另外一个问题,adoquery.sql的问题了!
如果adoquery.sql里SQL语句所查询的数据量达到2万条(经我自己测试,数据2.7万)直接在grideh里显示出来的时间大概要3.4秒,如果adoquery.sql里在加上order by排序,就会超时!若筛选数据到1.5w左右就会很快,大概1到2秒就可以了
如果我在adoquery.sql里不加order by语句,而选择在adoquery.action:=true;后边加上:adoquery.sort := ’列名 DESC/ASC‘,那基本上2.7w数据量的查询时间会大大缩短!
可以用一个memo来显示查询前跟查询后,使用adoquery.sort与直接使用dbgrideh排序后adoquery.sql里的SQL语句变化,你就会知道为什么数据量多大2万的时候,dbgrideh的自动排序会超时了!那就是dbgrideh的自动排序是建立在动态修改SQL语句的基础上的!
所以,如果数据量少的,可以直接使用dbgrideh带有的排序就可以了,如果数据量大了,就得码代码了!代码很简单
在dbgrideh的ontitlebtnclick里加入以上代码就ok了,把dbgrid.optionseh.dghautosortmarking:=false,当然,不设置都可以(用if或者case都可以)!
各位大神有什么不同的建议意见,都可以发表~欢迎指教~