自己写啊
在ONCELLCLICK里面家事件啊
在ONCELLCLICK里面家事件啊
解决方案 »
- 提问:GDI+打开的图像怎么在timage里面显示
- RZRichEdit中为什么有时候会出现乱码?
- 用QReport如何处理下列报表?
- 在问个问题。关于ADO 连接数据库的问题!!!
- 使用IntraWEB发布为后台服务程序时,里面使用相对路径出错!我让adoconnectionstring的值是 FILE NAME=.\dblink.udl
- 第一次运行可以,第二次出错!‘Access violation at address 004B09BD in module’ Read of address,
- winapi函数可以 在delphi中直接使用吗?如果 不可以,还有那些手续要办!?
- 如何将父类中public的方法在子类中改为protected属性
- 怎样在DELPHI中实现对I/O端口的读写!急!!
- 如何取硬盘序列号?我想用在注册时候用,不知这种办法可行吗
- 如何一次选中dbgrid中所有的记录
- 这个矛盾如何解决?
在ONCELLCLICK里面家事件啊
轻松搞定!
ADOTable1: TADOTable;procedure TForm1MainMenu.DBGrid1TitleClick(Column: TColumn);
begin
with ADOTable1 do
begin
if DBGrid1Boolean then
TADOTable(ADOTable1).Sort := Column.FieldName + ' DESC'
else
TADOTable(ADOTable1).Sort := Column.FieldName;
DBGrid1Boolean := not(DBGrid1Boolean);
end;
end;
不过加上Order By子句后,结果集不可编辑(修改)
var blOrder :Boolean = False;
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var Sql:String;
sOrder :String;
begin
if blOrder then
begin
sOrder := 'DESC';
blOrder := False;
end
else
begin
sOrder := '';
blOrder := True;
end;
Sql := 'SELECT * FROM Table ORDER BY '+
Column.FieldName +' '+sOrder;
end;
2.对于AdoDataset,直接用Sort属性排序即可。
3.对于Query,可以用以下程序:
procedure TFHkdata.SortQuery(Column:TColumn);
var
SqlStr,myFieldName,TempStr: string;
OrderPos: integer;
SavedParams: TParams;
begin
if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
if Column.Field.FieldKind =fkData then
myFieldName := UpperCase(Column.Field.FieldName)
else
myFieldName := UpperCase(Column.Field.KeyFields);
while Pos(myFieldName,';')<>0 do
myFieldName := copy(myFieldName,1,Pos(myFieldName,';')-1)
+ ',' + copy(myFieldName,Pos(myFieldName,';')+1,100);
with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
SqlStr := UpperCase(Sql.Text);
// if pos(myFieldName,SqlStr)=0 then exit;
if ParamCount>0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('ORDER',SqlStr);
if (OrderPos=0) or
(pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then
TempStr := ' Order By ' + myFieldName + ' Asc'
else if pos('ASC',SqlStr)=0 then
TempStr := ' Order By ' + myFieldName + ' Asc'
else
TempStr := ' Order By ' + myFieldName + ' Desc';
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;
Prepare;
Open;
end;
end;
轻松搞定!最好的了,看源码还可以学习很多东西!!