声明
procedure OnDBGridTitleClick(Column: TColumn);
实现
procedure Tdbs.OnDBGridTitleClick(Column: TColumn);
begin
try
if column.Grid.DataSource.DataSet.Active=true then begin
if column.Grid.Tag=0 then begin
if column.Grid.DataSource.DataSet.ClassType=TADOQuery then begin
(column.Grid.DataSource.DataSet as TADOQuery).Sort:=Column.FieldName+' ASC';
column.Grid.Tag:=1;
end;
if column.Grid.DataSource.DataSet.ClassType=TADODataset then begin
(column.Grid.DataSource.DataSet as TADODataset).Sort:=Column.FieldName+' ASC';
column.Grid.Tag:=1;
end;
end
else begin
if column.Grid.DataSource.DataSet.ClassType=TADOQuery then begin
(column.Grid.DataSource.DataSet as TADOQuery).Sort:=Column.FieldName+' DESC';
column.Grid.Tag:=0;
end;
if column.Grid.DataSource.DataSet.ClassType=TADODataset then begin
(column.Grid.DataSource.DataSet as TADODataset).Sort:=Column.FieldName+' DESC';
column.Grid.Tag:=0;
end;
end;
end;
except
end;
end;我自己写的,使用时将表格的标题单击事件指向这个过程就可以了,你看看吧
procedure OnDBGridTitleClick(Column: TColumn);
实现
procedure Tdbs.OnDBGridTitleClick(Column: TColumn);
begin
try
if column.Grid.DataSource.DataSet.Active=true then begin
if column.Grid.Tag=0 then begin
if column.Grid.DataSource.DataSet.ClassType=TADOQuery then begin
(column.Grid.DataSource.DataSet as TADOQuery).Sort:=Column.FieldName+' ASC';
column.Grid.Tag:=1;
end;
if column.Grid.DataSource.DataSet.ClassType=TADODataset then begin
(column.Grid.DataSource.DataSet as TADODataset).Sort:=Column.FieldName+' ASC';
column.Grid.Tag:=1;
end;
end
else begin
if column.Grid.DataSource.DataSet.ClassType=TADOQuery then begin
(column.Grid.DataSource.DataSet as TADOQuery).Sort:=Column.FieldName+' DESC';
column.Grid.Tag:=0;
end;
if column.Grid.DataSource.DataSet.ClassType=TADODataset then begin
(column.Grid.DataSource.DataSet as TADODataset).Sort:=Column.FieldName+' DESC';
column.Grid.Tag:=0;
end;
end;
end;
except
end;
end;我自己写的,使用时将表格的标题单击事件指向这个过程就可以了,你看看吧
解决方案 »
- 三个socket的通信问题!以上三个问题困扰小弟很多天了,麻烦各位大哥指教,小弟万分感谢!
- 如何在程序中给FTP(serverU)新增加一个帐户?
- RzCheckTree的问题,请路过的都来留个印儿!!~~~
- ★★★★★DELPHI全体版主预祝大家春节快乐,新年快乐★★★★★
- 请问这样的报表如何在FASTREPORT中实现?
- 连接远程SQL SERVER的问题,请高手看一看。
- 我要跳槽,哪位兄台帮个忙....
- 我建了个mdb 库,但access由同时生成了一个.ldb文件,那是什么?
- 如何在Delphi中调用C++的动态连接库
- Delphi书评?
- 各位大哥,帮小妹看看这段查询代码好吗??
- 各位老大,哪有delphi6 update2下载啊。来者有份
利用COLUMN.field.fieldname来设置TABLE的索引字段,或者QUERY的ORDER BY 。。
with AdoQuery1 do
begin
close;
Sql.clear;
Sql.Add('Select * from table');
Prepared;
Sql.Open;
end;
设置排序字段:
self.ADOResult1.Sort:='编码 ASC';
在DBGrid1CellClick里面编写程序,根据不同的列
再次给self.ADOResult1.Sort赋不同的值
谢谢,不过我的DataSet不是ADO,不支持排序
什么地方可以下载Dxdbgrid,
要不给我发一个 :[email protected]
先谢了
var
desc: Boolean;
begin
with TTable(Column.Grid.DataSource.DataSet) do
begin
desc:=false;
if (AIndexName=Column.Fieldname) and (AIndexName<>'') then
desc:=true;
if AIndexName<>'' then
DeleteIndex(AIndexName);
if desc then
AIndexName:=Column.FieldName+'desc'
else
AIndexName:=Column.FieldName;
if desc then
AddIndex(AIndexName,Column.FieldName,[ixCaseInsensitive,ixDescending])
else
AddIndex(AIndexName,Column.FieldName,[ixCaseInsensitive]);
IndexName:=AIndexName;
end
end
AddIndex是不是要动态给Table生成索引的
//点击DBGrid标题栏对查询结果排序************************************************
//==============================================================================
procedure DBGridTitleOrder(Column: TColumn);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TableOrder;
begin end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure QueryOrder;
var
SQLStr, OrderFieldName, TempStr: string;
i, OrderPos: integer;
SavedParams: TParams;
begin
if not (TQuery(TDBGrid(Column.Grid).DataSource.DataSet).State in [dsBrowse]) then Exit;
SavedParams := nil;
for i:=0 to Column.Grid.FieldCount-1 do
begin
{TDBGrid(Column.Grid).Columns[i].Font.Color := clBlack;}
TDBGrid(Column.Grid).Columns[i].Title.Caption := TDBGrid(Column.Grid).Columns[i].Field.DisplayName;
end;
if not (Column.Field.FieldKind in [fkData,fkLookup]) then Exit;
if Column.Field.FieldKind=fkData
then OrderFieldName := LowerCase(Column.Field.FieldName)
else OrderFieldName := LowerCase(Column.Field.KeyFields);
while Pos(OrderFieldName,';')<>0 do OrderFieldName := copy(OrderFieldName,1,Pos(OrderFieldName,';')-1)+','+copy(OrderFieldName,Pos(OrderFieldName,';')+1,100);
with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
SQLStr := LowerCase(SQL.Text);
if ParamCount>0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('order',SQLStr);
if (OrderPos=0) or (pos(OrderFieldName,copy(SQLStr,OrderPos,100))=0) then
begin
TempStr := ' order by ' + OrderFieldName + ' asc';
{Column.Title.Caption := Column.Title.Caption + '(▲)';}
{Column.font.Color := clRed;}
end else if pos('asc',SQLStr)=0 then
begin
TempStr := ' order by ' + OrderFieldName + ' asc';
{Column.Title.Caption := Column.Title.Caption + '(▲)';}
{Column.font.Color := clRed;}
end else
begin
TempStr := ' order by ' + OrderFieldName + ' desc';
{Column.Title.Caption := Column.Title.Caption + '(▼)';}
{Column.font.Color := clGreen;}
end;
if OrderPos<>0 then SQLStr := Copy(SQLStr,1,OrderPos-1);
SQLStr := SQLStr + TempStr;
Active := False;
SQL.Clear;
SQL.Text := SQLStr;
if ParamCount>0 then
begin
Params.AssignValues(SavedParams);
SavedParams.Free;
end;
Open;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ClientDataSetOrder;
//var Descend: Byte;
begin
{
with (TDBGrid(Column.Grid).DataSource.DataSet as TClientDataSet) do
begin
Descend := Descend xor Round(Exp(Column.Index * Ln(2)));
if Column.Field.DataType<ftAutoInc then
begin
if (Descend and Round(Exp(Ln(2) * Column.Index)))=0 then
begin
AddIndex(Column.FieldName + 'InxDES' , Column.FieldName, [ixDescending],'','',0);
IndexName := Column.FieldName + 'InxDES';
end else
begin
AddIndex(Column.FieldName + 'Inx' ,Column.FieldName ,[],'','',0);
IndexName := Column.FieldName + 'Inx';
end;
end;
end;
}
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (TDBGrid(Column.Grid).DataSource.DataSet is TTable) then TableOrder
else if (TDBGrid(Column.Grid).DataSource.DataSet is TQuery) then QueryOrder
else if (TDBGrid(Column.Grid).DataSource.DataSet is TClientDataSet) then ClientDataSetOrder;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
end;
dx在哪儿也告诉我吧。