===关于CXGRID排序后打印排序的问题【绝对经典】=== 最近在做DELPHI开发时遇到一个问题: 使用cxgrid控件和adoquery控件配合显示查询结果,客户要求可以随便根据调整cxgrid列的排序方式进行排序打印结果,花了1、2个小时,通过查网上资料和自己调试,终于成功。网上查资料的时候发现有不少询问这个问题的编程者,但是很多地方都找不到合适的解决方法,并且有好多地方回复的人都很不负责任地把别的地方搜索到的所谓的解决方法的代码直接复制贴给提问的人,那代码往往根本是错误的,强烈鄙视那些误导人的人们!! 本方法绝对原创,经过我自己调试通过,现将解决方法公布,希望对需要解决这个问题的同行们能有帮助,有什么不好的地方还请多包涵,有疑问可以加我QQ28240420.
方法一: 可以在打印前做如下处理: var i: integer;  Sortstr: string; begin   sortstr:='';  for i := 0 to cxGridDBTableView1.SortedItemCount - 1 do  begin    Sortstr := SortStr + cxGridDBTableView1.Columns[cxgriddbtableview1.SortedItems
[0].Index].DataBinding.FieldName + iif(cxgriddbtableview1.SortedItems.SortOrder = 
soAscending, ' ASC', ' DESC');    if I < cxgriddbtableview1.SortedItemCount - 1 then   Sortstr := Sortstr + ',';  end;
adoquery.Sort:=Sortstr;
{  //上面的方法比较简便,也可以使用下面这个注释掉的方法将排序方式加入到adoquery的sql中。 if Sortstr <>'' then sortstr:=' order by ' + Sortstr;
  querykehu.Close;   querykehu.SQL.Clear;   querykehu.SQL.Add(sqlstr + sortstr);   querykehu.Open;  }
方法二: 也可以在点击CXGRID列修改排序的过程中自动设置adoquery.sort procedure Tfrm_kehu.cxGridDBTableView1DataControllerSortingChanged(   Sender: TObject); var  i: integer;  Sortstr: string; begin
  sortstr:='';  for i := 0 to cxGridDBTableView1.SortedItemCount - 1 do    begin      Sortstr := SortStr + cxGridDBTableView1.Columns[cxgriddbtableview1.SortedItems[0].Index].DataBinding.FieldName + iif(cxgriddbtableview1.SortedItems.SortOrder = soAscending, ' ASC', ' DESC');      if I < cxgriddbtableview1.SortedItemCount - 1 then   Sortstr := Sortstr + ',';    end;  TCustomADODataSet(cxGridDBTableView1.DataController.DataSource.DataSet).Sort := Sortstr; end;
上面这个设置最好,只需要点击CXGRID的,自动设置好了SORT属性,然后打印按原来的代码即可。 注意:代码中的iif是我自己写的一个函数,您可以根据自己的需要去修改这个地方。
(本文已被浏览 12550 次)
|
|
|