怎么可以直接点机dbgrid的列就可以排序
解决方案 »
- 哎,失业了,散分!!!!!!!!!!
- delphi如何引用类啊?
- 公司叫我开发一个项目管理软件,我在考虑是否要用三层结构呢?
- (三)11月19号结婚, 人生就只有一次. 狂放520分兄弟们抢分啦, 月底接贴.
- 求教:Ado如何访问PARADOX数据库
- 一个好问题,
- 请问如何设置excel每个例的各自宽度,还有如果超出宽度如何实现自动换行?谢谢
- 如何获取文件的创建和修改时间?
- 请问如何在delphi中懂得今天是星期几?(100分相送)
- 我用tdirctorylistbox做一个目录列表框, 但只能列一个驱动器的目录, 我想列出所有本地路径, 怎么办?
- Delphi7的rave报表的几个问题
- 怎样设置excel的打印设置?
在formcreate时,初始化
For i:=0 to 50 do FieldTitleState[i]:=False;在dbgrid 的titleclick事件中:
procedure TFrmStateCheck.DBGrid1TitleClick(Column: TColumn);
var
i,J:integer;
OldSql:string;
begin
i:=column.Index;
if Lowercase(column.FieldName)='yzname' then exit;
J:=POS('order by',lowercase(dm.Query1.SQL.Text));
if FieldTitleState[i]=false then
begin
if dm.Query1.SQL.Text='' then
oldsql:='select * from jfy order by '+Column.FieldName
else begin
if j=0 then oldsql:=dm.Query1.SQL.Text+' order by '+Column.FieldName
else oldsql:=copy(dm.Query1.SQL.Text,1,j-1)+' order by '+Column.FieldName;
end;
OrderData(oldsql);
FieldTitleState[i]:=true
end else
begin
if dm.Query1.SQL.Text='' then
oldsql:='select * from jfy order by '+Column.FieldName+' decs'
else begin
if j=0 then oldsql:=dm.Query1.SQL.Text+' order by '+Column.FieldName+' desc'
else oldsql:=copy(dm.Query1.SQL.Text,1,j-1)+' order by '+Column.FieldName+' desc';
end;
OrderData(oldsql);
FieldTitleState[i]:=False;
end;
end;
procedure TFrmStateCheck.OrderData(StrItem:string);
begin
dm.query1.Close; dm.query1.SQL.Clear;
dm.query1.SQL.Add(StrItem);
dm.query1.Prepare;
dm.query1.Open;
end;
如果沒有ehlib的,可發郵件給我:[email protected],我可發給你!,ehlib 3.0版的
procedure TFormfind.DBGrid1TitleClick(Column: TColumn);
begin
if pos('ASC',Adoqfind.Sort)<>0 then
Adoqfind.Sort:=column.FieldName + ' DESC'
else
Adoqfind.Sort:=column.FieldName + ' ASC'
end;
问题现在我们这个项目客户要求不能用第三方控件!!
以后,要是我需要我会跟你联系的!
利用sql语句重新查询
如果沒有ehlib的,可發郵件給我:[email protected],我可發給你!,ehlib 3.0版的"就用这个,第三方控件有罪吗?
请参看一下,肯定可以解决的
procedure TFmXsgl.DBGrid2TitleClick(Column: TColumn);begin
try
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from txsb order by '+column.FieldName);
showmessage('select * from txsb order by '+column.FieldName);
adoquery1.Open;
datasource2.DataSet :=adoquery1;
finally
//adoquery1.Close;
end;
end;
Flag_PaiXu:Boolean;//升降序
Field_Sort:String;//排序字段
再在DBGrid的TitleClick事件中写入下列代码
Flag_PaiXu:=Not Flag_PaiXu;
Field_Sort:=Column.FieldName ;
With ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('select * from 表名 order by '+Field_Sort);
if Flag_PaiXu then
begin
Sql.Add(' Desc');
end
else
Sql.Add(' Asc');
end;
Open;
end;
这样就行了
都带源码,比DBGRID要强多了