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

「已注销」 2003-08-19 09:56:59
哪个老大提供一个类似DBGRID控件(有源码的),点击TITLE就能按升序或按降序排列?解决了给分,一定!!!!一定是有效的地址啊。
...全文
29 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就有这个功能
V1.83新增特性1.增加了TACFormReport控件,可以打印Form上的对象,目前支持打印DBGrid和Dataset,可以轻易扩充。 可以动态设置以下属性: HeaderFont: 列头字体 GridFont: 表格字体 PageHeader: 页眉(Rich文本) PageFooter: 页脚(Rich文本) PageTitle: 页头设置,含文字和字体。 ReportTitle: 表头设置,含文字和字体。 PrintControl: 要打印的控件。 PageInfo: 页面纸张、边距设置。 使用方法: 1) 将对应的TPrintDBGridObj或TPrintDataset控件拖到Form上。 2) 通过设置ACFormReport的以上各属性,并调用Prevew、Print、ShowDesigner等方法实现打印或设计功能。2.报表新增了"预览时可改变表格线"和"预览时可以编辑表格内容"选项。 "预览时可改变表格线"为默认选项,如果选取了此选项,则在预览时可以重新调整表格的栏宽。3.预览时可以临时设置页面纸张和页边距。4.新增了"页码#"和"总页数#"两个系统变量,因此可以在报表任何位置显示这两个值,而不限于页眉页脚,前提是报表必须在"页面属性"中选取"两遍报表"选项5.其它较重要的修改 1) 预览时可以输入页码直接跳转到某一页。 2) 如果在字段对象后面加上"$",如 "表.字段$",则将返回 "表.字段"的DisplayText值,而不是value值。 3) TACReport新增了TPaperInfo属性,制作动态报表时可以用来动态设置纸张。 4) TACReportCtrl新增了 ReadOnly和GridReset属性。 5) TACReportCell新增了SetFont方法。 6) 如果Field.Visible=false,则在报表的字段选择中不会出现,但仍然可以使用。注: 1.TACFormReport等新增的几个控件都含源码。2.Demo程序和相关文档有变动。

5,379

社区成员

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

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