对一个DBGRID进行排序,按TITLECLICK时进行升降序,
procedure Tfrmpersondb_parent.RZdbmainTitleClick(Column: TColumn);
var titlecaption:string;i:integer;
begin
if (not qrymain.Active) or (qrymain.RecordCount = 0) then exit;
  if Column.Grid.DataSource.DataSet.FieldByName(column.FieldName).DataType=ftmemo then exit;
  titlecaption:=column.Title.Caption;
  if pos('▼',titlecaption)<>0 then
    column.Title.Caption:=copy(titlecaption,1,length(titlecaption)-2)
  else
  if pos('▲',titlecaption)<>0 then
    column.Title.Caption:=copy(titlecaption,1,length(titlecaption)-2)+'▼'
  else
    column.Title.Caption:=column.Title.Caption +'▲';
  for i:=0 to RZdbmain.Columns.Count-1 do
  begin
    if pos('▼',column.Title.Caption)<>0 then
      qrymain.Sort :=column.fieldname + ' DESC'
    else
    if pos('▲',column.Title.Caption)<>0 then
      qrymain.Sort :=column.fieldname + ' ASC'
    else
    //这里应怎么写,就是不升序不降序,还原来查询出来的记录顺序.
  end;
end;
还有发现在一个问题就是当我选择了一条记录之后,按TITLEclick,进行升序的话,指针永远会指向第一条,我想要的要求是当选择第一条记录之后,不管升序了还是降序了,指针一直指向该条记录,请问如何实现?谢谢!!`

解决方案 »

  1.   

    你可以在其中先记录标签dataset.book,(定义一个变量TBookMark,如RecordBookMark,RecordBookMark:=*DAtaset.BookMark),排序结束后,再将此标签赋予数据集*dataset.bookMark:=RecordBook;
      

  2.   

    还有发现在一个问题就是当我选择了一条记录之后,按TITLEclick,进行升序的话,指针永远会指向第一条,我想要的要求是当选择第一条记录之后,不管升序了还是降序了,指针一直指向该条记录,请问如何实现?谢谢!!`
    对于这个问题我是这样解决的:查询之前,先记下当前记录唯一标识(我的表都有一个ID字段,是自动编号),查询完后,再用query.locate('keyfields','keyvalue',[])定位,即可
      

  3.   

    我说的方法就行,已在本机上实现了!book!QQ419109411