哪个老大提供一个类似DBGRID控件(有源码的),点击TITLE就能按升序或按降序排列?解决了给分,一定!!!!

「已注销」 2003-08-19 09:56:59
哪个老大提供一个类似DBGRID控件(有源码的),点击TITLE就能按升序或按降序排列?解决了给分,一定!!!!一定是有效的地址啊。
...全文
34 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
siwuge 2003-08-19
  • 打赏
  • 举报
回复
dtb 帮顶,我也想学,收藏。
「已注销」 2003-08-19
  • 打赏
  • 举报
回复
lean77(lean) ,你好,谢谢!
Table1.IndexFieldNames := Column.FieldName;只能按升序排啊,那降序怎么办呢?
fhuibo 2003-08-19
  • 打赏
  • 举报
回复
这里有一过程;
procedure Tform1.SortQuery(column:TColumn);
var
SqlStr,myFieldName,TempStr: string;
OrderPos: integer;
SavedParams: TParams;
begin
if not(Column.Field.FieldKind in [fklookup,fkdata]) 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 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;

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
SortQuery(Column);
end;
「已注销」 2003-08-19
  • 打赏
  • 举报
回复
类似DBGIRD的控件,我要实现的功能如下:点击TITLE标题,就马上按那一列按升序或按降序排序,并在TITLE上显示三角型的标记。不管数据集是TABELE,QUERY,CLIENTDATASET都要能实现
wooden954 2003-08-19
  • 打赏
  • 举报
回复
同意楼上,办法简单!
lean77 2003-08-19
  • 打赏
  • 举报
回复
点击TITLE就能按升序或按降序排列:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
Table1.IndexFieldNames := Column.FieldName;
end;
「已注销」 2003-08-19
  • 打赏
  • 举报
回复
ClientDataSet1.IndexDefs.Add('Direction','Direction',[ixDescending]);
这个是什么意思,怎么用的?能达到要求吗?
newsofter 2003-08-19
  • 打赏
  • 举报
回复
再titleclick事件中//如果选用AdoDataSet(AdoTable,AdoQuery等)可以使用
with Column do
if Field <> nil then
if Field.DataSet is Tadodataset then
with Field.DataSet as Tadodataset do
if active then
begin
if tag = 0 then
begin
sort := '';
tag := 1;
end
else if tag = 1 then
begin
sort := column. fieldname + ' DESC';
tag := 2;
end
else
begin
sort := Column.FieldName + ' ASC';
tag := 0;
end;
end;
sy_315 2003-08-19
  • 打赏
  • 举报
回复
说明,如果发现有的字段没有发生变化,是因为其他字段没有建立索引。
sy_315 2003-08-19
  • 打赏
  • 举报
回复
我可以告诉你~的
// dbgrid 的oncolumnmoved事件进行编码如下

procedure tfrom1.dbgrid1columnmoved(sender: tobject;fromindex,toindex:integer);
var
i : integer;
fname: string;
begin
with dbgrid1.datasource.dataset as ttable do
for i:=0 to indexdefs.count-1 do
begin
fname:=dbgrid1.field[0].fieldname;
if copy(indexdefs[i].fields,1,length(fname))=fname then
indexname:=indexdefs[i].name;
end;
end;
「已注销」 2003-08-19
  • 打赏
  • 举报
回复
老大们有好东东可以发到:sunjier@yahoo.com.cn
谢谢了!!!!!!
「已注销」 2003-08-19
  • 打赏
  • 举报
回复
哪里有下的啊????????????
xyue 2003-08-19
  • 打赏
  • 举报
回复
源码就没有了
但是 qgrid能有这个功能 你的email是多少
我可以寄给你
liaoqingpeng 2003-08-19
  • 打赏
  • 举报
回复
RXDBGrid就有这个功能

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧