当单击DBGrid中的标题栏时,进行排序(在线等) 怎样当单击DBGrid中的标题栏时,进行排序 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法:关键是用DBGrid的事件 OnTitleClick首先判断单击是哪一列, i:=Column.Index;然后要确定是哪个字段 Field:=DBGrid1.Columns[i].FieldName+' ASC';最后进行排序: qryWork.Sort:=Field; 上面仅仅是进行升序排列,若要添加降序排列,则要用' DESC'若要单击后,升序,再单击,降序.....则要用到一个奇偶判断我的一个例子(其中的bSort:Boolean,在FormShow的时候初始化)procedure TfmPlayVideo.DBGrid1TitleClick(Column: TColumn);var i:integer; fieldname:string;begin//排序 i:=Column.Index; if bSort then begin fieldname:=DBGrid1.Columns[i].FieldName+' ASC'; bSort:=False; end else begin fieldname:=DBGrid1.Columns[i].FieldName+' DESC'; bSort:=True; end; qryShow.Sort:=fieldname;end; 用dbgrideh更方便一些呀.不防考虑一下喽 楼上说的不错,最好改成dbgrideh把因为它还可以在点击排序时,出现上下排序小三角图标。 严重推荐DbGridEh控件。实现起来真的好简单。我已经这样在用了。 dbgrideh要什么设置让他排序.还有TO:hujinger(克沙) qryShow.Sort:=fieldname;是什么意思.调试会出错. 就是你点击的DBGRID的数据表的列名,换一个是可能是保留字,换为 szField等试试。不要忘记将上面的都换了。 DBGrid1Title事件:ISDESC 為排序方向的BOOLEAN值。PROCEDURE THELPRIGHTSET_LOGFRM.DBGrid1TitleClick(Column: TColumn);BEGIN IF Column.FieldName = 'optname' THEN BEGIN IF ISDESC THEN OPENQRY('OPT_ID ASC ') ELSE OPENQRY('OPT_ID DESC '); END ELSE BEGIN IF ISDESC THEN OPENQRY(Column.FieldName + ' ASC ') ELSE OPENQRY(Column.FieldName + ' DESC '); END;END;PROCEDURE THELPRIGHTSET_LOGFRM.OPENQRY(SQLORDERSTR: STRING);BEGIN WITH GSDDATAMOD.QRYBAS_LOGDOC DO BEGIN close; SQL.Clear; SQL.Add(SQLSTR); sql.Add(WhereStr); SQL.Add(' ORDER BY ' + SQLORDERSTR); ParamByName('OPT_CREATDATE1').ParamType := ptInput; ParamByName('OPT_CREATDATE1').DataType := ftDateTime; ParamByName('OPT_CREATDATE1').AsDateTime := dt1; ParamByName('OPT_CREATDATE2').ParamType := ptInput; ParamByName('OPT_CREATDATE2').DataType := ftDateTime; ParamByName('OPT_CREATDATE2').AsDateTime := dt2; open; FieldByName('SYSTEMNAME').DisplayWidth := 14; FieldByName('MODNAME').DisplayWidth := 16; FieldByName('MODKEY_NO').DisplayWidth := 12; FieldByName('MODCONT').DisplayWidth := 20; FieldByName('OPTTYPE').DisplayWidth := 4; FieldByName('OPT_ID').DisplayWidth := 15; FieldByName('optname').DisplayWidth := 10; FieldByName('OPT_CREATDATE').DisplayWidth := 21; Label3.Caption := '返回的記錄數﹕' + inttostr(RecordCount) + ' 條'; END;END; 如何去掉PageControl下的TabSheet里的Caption标题(不是内容)。 Ehlib的送分问题! 请问如何实现用户自组查询? textout()中怎样控制打印字体? 小弟想问一下学习COM/COM+组件开发的书? 这段TFilestream有什么错呢?Delphi程序中怎么调用做好的exe文件? 问 DELPHI可以调用VB做的DLL吗? 有一个问题 请问这里的高手:刻录光盘时如何才能加入自动运行功能(即有autorun.exe和autorun.inf)? 虾们,帮我一把!!!一定有分 请教大家,一般delphi6的程序在做安装盘时一般用什么工具?
var
i:integer;
fieldname:string;
begin//排序
i:=Column.Index;
if bSort then
begin
fieldname:=DBGrid1.Columns[i].FieldName+' ASC';
bSort:=False;
end
else
begin
fieldname:=DBGrid1.Columns[i].FieldName+' DESC';
bSort:=True;
end;
qryShow.Sort:=fieldname;
end;
因为它还可以在点击排序时,出现上下排序小三角图标。
qryShow.Sort:=fieldname;是什么意思.调试会出错.
ISDESC 為排序方向的BOOLEAN值。PROCEDURE THELPRIGHTSET_LOGFRM.DBGrid1TitleClick(Column: TColumn);
BEGIN
IF Column.FieldName = 'optname' THEN
BEGIN
IF ISDESC THEN
OPENQRY('OPT_ID ASC ')
ELSE
OPENQRY('OPT_ID DESC ');
END
ELSE
BEGIN
IF ISDESC THEN
OPENQRY(Column.FieldName + ' ASC ')
ELSE
OPENQRY(Column.FieldName + ' DESC ');
END;
END;
PROCEDURE THELPRIGHTSET_LOGFRM.OPENQRY(SQLORDERSTR: STRING);
BEGIN
WITH GSDDATAMOD.QRYBAS_LOGDOC DO
BEGIN
close;
SQL.Clear;
SQL.Add(SQLSTR);
sql.Add(WhereStr);
SQL.Add(' ORDER BY ' + SQLORDERSTR);
ParamByName('OPT_CREATDATE1').ParamType := ptInput;
ParamByName('OPT_CREATDATE1').DataType := ftDateTime;
ParamByName('OPT_CREATDATE1').AsDateTime := dt1;
ParamByName('OPT_CREATDATE2').ParamType := ptInput;
ParamByName('OPT_CREATDATE2').DataType := ftDateTime;
ParamByName('OPT_CREATDATE2').AsDateTime := dt2;
open;
FieldByName('SYSTEMNAME').DisplayWidth := 14;
FieldByName('MODNAME').DisplayWidth := 16;
FieldByName('MODKEY_NO').DisplayWidth := 12;
FieldByName('MODCONT').DisplayWidth := 20;
FieldByName('OPTTYPE').DisplayWidth := 4;
FieldByName('OPT_ID').DisplayWidth := 15;
FieldByName('optname').DisplayWidth := 10;
FieldByName('OPT_CREATDATE').DisplayWidth := 21;
Label3.Caption := '返回的記錄數﹕' + inttostr(RecordCount) + ' 條';
END;
END;