日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cxGrid 在 GridMode = True 模式下实现标题点击排序以及标题列过滤筛选!!!

發布時間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 模式下实现标题点击排序以及标题列过滤筛选!!!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。