谁能提供第三方控件(网格控件DBGRID),点击标题能排序,定重谢!!!(50分)

  • 主题发起人 wangchengwu
  • 开始时间
W

wangchengwu

Unregistered / Unconfirmed
GUEST, unregistred user!
我的QQ:57959940,油箱:ah_wcw@sohu.com
 
qgrid321 for d56

www.51delphi.com

上有下的!~
QQ:2874105
 
给你发了,查收!
 
up!!!up!!!
 
你可以在dbgrid的title的点击事件里写程序来排序,根本不用第三方控件。
 
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;
 
我觉得 Ehlib控件就可以啊/ 我一直用的哦!
排序看你用的是BDE?ADO? ADO可以直接排序!
 
就是ontitle事件中
table1.IndexFieldNames:= Column.FieldName;
一条语句搞定,table1是一个dataset
 
有很多VCL都可以实现该功能
 
这个小功能还需要控件吗? 太懒了吧!!
 
to : 消遥浪子:

我用的就是这个控件,但不知怎样设置。谢了
 
devExpress系列的控件绝对可以,而且可以显示超级链接、筛选等绝对好用的功能

www.51delphi.com搜索 devExpress就可以找到grid
 
quantumgrid
 
用ado 控件
adodataset.sort = 'field desc '
就可以了
 
用ehlib控件,你可在dbgrideh的onsortmakingchange事件中写如下如下代码,就可以按任意
字段进行排序。
procedure SortbyColumn(FQuery: TQuery; Fgrid: TdbGridEh);
var
i: Integer;
s, Strupper: string;
begin
s := '';
for i := 0 to Fgrid.SortMarkedColumns.Count - 1 do
if Fgrid.SortMarkedColumns.Title.SortMarker = smUpEh then
s := s + Fgrid.SortMarkedColumns.FieldName + ' DESC , '
else
s := s + Fgrid.SortMarkedColumns.FieldName + ', ';
if s <> '' then s := ' ORDER BY ' + Copy(s, 1, Length(s) - 2);
StrUpper := UpperCase(FQuery.SQL.Text);
if Pos('ORDER BY', StrUpper) = 0 then
StrUpper := StrUpper + s
else
begin
Delete(StrUpper, Pos('ORDER BY', StrUpper),
length(StrUpper) - Pos('ORDER BY', StrUpper));
end;
FQuery.Close;
FQuery.SQL.Text := StrUpper;
FQuery.Open;
end;
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部