控件DBGridEh如何点击title如何排序,要query如何实现的,不用ADOtable?谢谢!
解决方案 »
- INI
- 如何保存RichText文本框中的RTF格式文本信息
- 用Delphi怎么实现禁止访问某些非法网站?
- tcp通信中同时收到两个数据包,怎么办?
- 问一个问题!!!很急!!一解决马上给分!!!
- ***烦闷啦,用Delphi6编译程序时,它就自动退关闭!!,请问高手怎么办啊?***
- cxgrid 一行多个checkbox的问题
- 各位大虾帮帮忙了,这是我的第一个程序,是猜数字游戏。怎么有这么多错误!必给分
- TBitMap的赋值的问题!
- 给分!给分!!一定给分!!!在local sql中,如何使用日期函数?
- sql case 小问题
- DELPHI里怎么定义日期类型??99/05/01-99/06/01怎么做??
没办法, 只有重新生成 query 语句, close, open
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
with query do
begin
close;
sql.add('order by ' + Column.FieldName );
open;
end;
你可以,知道单击了那个列,然后,对SORT属性进行处理。
详细的看看DELPHI的帮助。
var i :Integer;
s:String;
function DeleteStr(str:String; sunstr:String): String;
var i:Integer;
begin
i := Pos(sunstr,str);
if i <> 0 then Delete(str,i,Length(sunstr));
Result := str;
end;
begin
s := '';
for i := 0 to DBGridEh1.SortMarkedColumns.Count-1 do
if DBGridEh1.SortMarkedColumns[i].Title.SortMarker = smUpEh then
s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ' DESC , '
else
s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ', '; if s <> '' then s := ' ORDER BY ' + Copy(s,1,Length(s)-2);
s := DeleteStr(s,'1');
// LogADO.SQL.Strings[LogADO.SQL.Count-2] := s; STemp:='';
STemp:=s;end;
Column: TColumnEh);
var i :Integer;
s,Stemp:String;
function DeleteStr(str:String; sunstr:String): String;
var i:Integer;
begin
i := Pos(sunstr,str);
if i <> 0 then Delete(str,i,Length(sunstr));
Result := str;
end;
begin
case Column.Title.SortMarker of
smNoneEh: Column.Title.SortMarker := smDownEh;
smDownEh: Column.Title.SortMarker := smUpEh;
smUpEh: Column.Title.SortMarker := smNoneEh;
end; s := ''; if (Column.FieldName = 'Type_Id') then
begin
if Column.Title.SortMarker = smUpEh then s:='Type_Id'+ ' DESC , ' else s:='Type_Id'+ ', '
end; if (Column.FieldName = 'Recode_Data') then
begin
if Column.Title.SortMarker = smUpEh then s:='Recode_Data'+ ' DESC , ' else s:='Recode_Data'+ ', ' ;
end; if (Column.FieldName = 'Recode_Time') then
begin
if Column.Title.SortMarker = smUpEh then s:='Recode_Time'+ ' DESC , ' else s:='Recode_Time'+ ', ';
end; if (Column.FieldName = 'Come_resoure') then
begin
if Column.Title.SortMarker = smUpEh then s:='Come_resoure'+ ' DESC , ' else s:='Come_resoure'+ ', ' ;
end; if (Column.FieldName = 'Affair_id') then
begin
if Column.Title.SortMarker = smUpEh then s:='Affair_id'+ ' DESC , ' else s:='Affair_id'+ ', ' ;
end; if s <> '' then s := ' ORDER BY ' + Copy(s,1,Length(s)-2);
s := DeleteStr(s,'1'); //LogADO.SQL.Text:=LogADO.SQL.Text+s;
if Pos('ORDER BY',LogADO.SQL.Text)<>0 then LogADO.SQL.Text:=Copy(LogADO.SQL.Text, 0, Pos('ORDER BY',LogADO.SQL.Text)-1);
LogADO.SQL.Text:=LogADO.SQL.Text+s;
LogADO.Close;
LogADO.Open;
end;
var
i:integer;
begin
//设置DBGridEh的排序可用,排序的代码在titlebtnclick
with DBGridEh1 do
for i:=0 to Columns.Count-1 do
Columns[i].Title.TitleButton := true;
end;procedure TForm_Query.DBGridEh1TitleBtnClick(Sender: TObject;
ACol: Integer; Column: TColumnEh);
var
s:string;
begin
//进行排序
with Column do
begin
if FieldName = '' then
Exit; case Title.SortMarker of
smNoneEh:
begin
Title.SortMarker := smDownEh;
s := Column.FieldName + ' ASC';
end;
smDownEh: s := Column.FieldName + ' ASC';
smUpEh: s := Column.FieldName + ' DESC';
end;
//进行排序
try
QData.Query_Temp.Sort := s
except
end;
end;
end;
procedure TFmscdjcx.DBGridEHSortMarkingChanged(Sender: TObject);
VAR
INDEX : INTEGER;
SortString : String;
FirstFlag : boolean;
begin
inherited;
if adq_qd.Active then
begin
SortString := '';
FirstFlag := true;
FOR INDEX := 1 TO DBGridEH.SortMarkedColumns.Count DO
if DBGridEH.SortMarkedColumns[INDEX - 1].Title.SortMarker = smUpEh then
if FirstFlag then
begin
SortString := SortString + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName + ' DESC ';
FirstFlag := False;
end
else
SortString := SortString + ',' + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName + ' DESC '
else
if FirstFlag then
begin
SortString := SortString + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName;
FirstFlag := False;
end
else
SortString := SortString + ',' + DBGridEH.SortMarkedColumns[INDEX - 1].FieldName + ' ASC ';
if adq_qd.RecordCount > 0 then
begin
adq_qd.Sort := SortString;
adq_qd.Requery([eoAsyncFetch]);
end;
end;
end;
字段级
titile --》title butoon := true
数据源
optioneh下与排序有关的
begin
Adoquery1.Sort :=column.FieldName ;
end;结贴吧
算了还是贴上代码吧(在titleclick事件中)
if dbgrid1.DataSource.DataSet.active then
begin
screen.Cursor := crhourglass;
flag := not flag; //升降序
Field_sort := column.FieldName; //排序字段
with dbgrid1.DataSource.DataSet as tquery do
begin
close;
sql.clear;
sql.add('select * from table1 ');
if field_sort <> '' then
begin
sql.add('order by ' + Field_sort);
if flag then
begin
sql.add(' desc');
end
else
sql.add(' asc');
end;
if not prepared then prepare;
try
open;
finally
screen.Cursor := crdefault;
end;
end;
end;