cxGrid 在 GridMode = True 模式下实现标题点击排序以及标题列过滤筛选!!!
最近使用 cxGrid 這個表格控件,發現加載十幾萬筆數據時加載特別慢,同時用 DBGridEh 加載來對比,發現速度差異很大,
原來是 cxGrid 的 GridView 默認 GridMode=False ,此時加載數據集時會設置每一列的屬性(例如把每一列的不同值轉入篩選器中),
所以速度會慢很多,所以把 GridMode=True 后,速度和 DBGridEh 差不多了,但是問題來了,設置這個屬性后,原本的點擊
標題列功能無法排序,然后列篩序也不能使用。(要知道,這個2個功能是cxGrid 的特色,如果無法使用,那還不如使用DBGridEh)。
通過上網搜索了一下,基本能實現這2個功能,不過沒有封裝成通用的方法,還請大家多提出意見,代碼如下:
1.標題點擊排序功能:
procedure TForm1.cxGrid1DBBandedTableView1DataControllerSortingChanged(Sender: TObject); vari:Integer;sortstr:string; begintrysortstr:='';for i:= 0 to cxGrid1DBBandedTableView1.ColumnCount - 1 dobeginwith cxGrid1DBBandedTableView1.Columns[i] dobegincase SortOrder ofsoAscending:beginif sortstr<>'' thensortstr:=sortstr+',';sortstr:=sortstr+DataBinding.FieldName;end;soDescending:beginif sortstr<>'' thensortstr:=sortstr+',';sortstr:=sortstr+DataBinding.FieldName+' DESC';end;end;end;end;if sortstr<>'' thenad.Sort:=sortstr;finallyend; end;我用的是 adodataset 數據組件,加上以上代碼可以多列排序。注意:需要添加 ?dxCore 單元才能使用 SoDescending 等變量。
2.實現列篩選代碼如下:
varn,i: integer;field: string; beginfield := cxGrid1DBBandedTableView1.Columns[AItemIndex].DataBinding.FieldName;qy.close;qy.SQL.Clear;qy.SQL.Add('select distinct '+field+' from mbrecord ');qy.Open;n := qy.RecordCount;qy.First;for i := 0 to n-1 dobeginAValueList.Add(fvivalue,qy.FieldValues[field],vartostr(qy.FieldValues[field]),false);qy.Next;end; end;以上代碼是加載沒一列的篩選值列表;
?
procedure TForm1.cxGrid1DBBandedTableView1DataControllerFilterChanged(Sender: TObject); beginad.Filtered:=False;if cxGrid1DBBandedTableView1.DataController.Filter.FilterText<>'' thenbeginad.Filter:=cxGrid1DBBandedTableView1.DataController.Filter.FilterText;Tryad.Filtered:=True;FinallyEnd; end; end;以上代碼是當選擇篩選值后,對應要執行的數據查詢方法;
? ?注意: 這個語句
ad.Filter:=cxGrid1DBBandedTableView1.DataController.Filter.FilterText;
不能直接這樣寫,需要轉移一下,因為如果你的標題列標題是中文的話,那么這個 FilterText 也是中文的名字,
所以要把這個 FilterText 中的中文替換成對應的英文字段才可以使用。而且數據篩選后,
表格 DataController 的 recordcount 總數是不會變的,除非你的 DataSet 使用的是 Open 而不是過濾方式。
這樣一來,有很多地方要寫代碼,很麻煩,如果數據量少,還是建議使用 GridMode=False 方式吧。
轉載于:https://www.cnblogs.com/lpq21314/p/6010998.html
總結
以上是生活随笔為你收集整理的cxGrid 在 GridMode = True 模式下实现标题点击排序以及标题列过滤筛选!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言编译器masm,汇编环境搭建 --
- 下一篇: Fedora 17删除旧内核的操作