DBGrid排序

手把手教你用Logisim搭建5级流水MIPS CPU(附华中科技计组实验避坑指南) 本文详细介绍了如何使用Logisim从零构建5级流水MIPS CPU,特别针对华中科技大学计算机组成原理实验提供实用指南。内容涵盖单周期CPU过渡、流水线寄存器设计、数据冒险处理等核心环节,并附有实验避坑建议和性能优化技巧,帮助学生高效完成这一挑战性项目。 阅读详情

给DBGrid加入排序功能

在实际数据库管理系统中,用户对表中数据的操作,最频繁的莫过于浏览查询了,而查询中若能提供为某字段建立的排序功能,则非常有利于用户对“关键数据”的了解。

Windows的用户都知道,在“我的电脑”或“资源管理器”中打开任一文件夹,若以“详细资料”方式查看,系统会显示出该文件夹下的子文件夹和文件相关信息,如:名称、类型 、大小、修改时间,用户只需要单击标题栏中的相应项,则系统自动按该项进行“升序”(或“降序”)的排列显示,这样用户便能轻松查看相应的文件夹或文件对象的内容。

受此启发,考虑能不能在显示数据的Grid表格中完成如此功能呢?答案是肯定的。下面以在Delphi中的实现方法为例,通过具体内容,介绍该功能的实现。

步骤如下:

一、先建立一数据表

该表以Delphi 中最常用的Paradox为类型,取名为Student,反映(在职)学生的基本情况。该表各字段定义如下:

--------------------------------------------

字段名    类型      大小

序号     Short型     / (Key*)

学号     Alpha型     6

出生日期   Date型      /

性别     Alpha型     2

婚否     Logical型    /

英语     Number型     /

高数     Number型     /

PASCAL    Number型     /

备注     Memo型      20

-------------------------------------------

保存后,随意往表中输入3至5条记录内容。

注:①表中必须建立关键索引(为首字段建立)。此处为“序号”字段;
 with table1 do
 begin
 close;
 Exclusive := true;
 DatabaseName := '';
 TableName := '';
 Open;

{建立主索引 }
 AddIndex('','ID',[ixPrimary]);

{建立次索引 }
 AddIndex('NameIndex','ID;Name',[]);

 close;
 end;

②该表中使用了Paradox常用的几种字段类型,但尚未全部包含。

二、建立项目,实现功能

1.新建一项目,并为表单添加相关控件,各控件主要属性如下表:

2.建立各Click的事件代码

Button1(打开表)的Click事件代码如下:

procedure TForm1.Button1Click(Sender: TObject);

begin

Table1.Open; // 打开Table1关联的表Student

end;

Button2(关闭表单)的Click事件代码如下:

procedure TForm1.Button2Click(Sender: TObject);

begin

Application.Terminate;

end;

DBGrid1的TitleClick事件代码如下:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);

//注:本过程参数Column包含的信息量非常多

begin

MySort(DBGrid1,Column);

end; //调用字段排序

其中,MySort(DBGrid1,Column)为自定义的排序过程,具体代码见下述。

3.建立通用处理模块

为使该功能具有“通用性”,将其定义为一过程。

首先,预声明过程及建立两个全局私有变量:

...

Type

...

procedure MySort(DBGrid0:TDBGrid; Column: TColumn);//预声明过程

private

{ Private declarations }

psIndexName:string; //记录当前索引名称

plAscend:boolean; //记录当前索引名称的索引状态

public

{ Public declarations }

end;

...

其次,该过程完整代码如下:

procedure TForm1.MySort(DBGrid0:TDBGrid; Column: TColumn);

var

//本模块使用到的psIndexName, plAscend两个变量见上定义

mode:char; //记录是“升序”还是“降序”

ColName:string; //记录当前字段名

iCol:Integer; //记录当前列号

begin

with DBGrid0.DataSource.DataSet as TTable do //Table0

begin

//检测当前工作表是否已打开

if not Active

then begin

MessageBeep(0);

Application.MessageBox('工作表尚未打开!','停止',MB_OK+MB_ICONSTOP);

Abort

end;

//检测当前字段是否“能排序”。以下字段类型不能排序

case Column.Field.DataType of

ftBoolean,

ftBytes,

ftBlob, //Binary

ftMemo,

ftGraphic,

ftFmtMemo, //Formatted memo

ftParadoxOle: //OLE

begin

MessageBeep(0);

Application.MessageBox(Pchar('项目"'+Column.FieldName+'"'+'不能排序!'),'停止

',MB_OK+MB_ICONSTOP);

Abort

end;

end; //case

mode:='0';

iCol:=Column.Field.FieldNo-1;

try

ColName:=Column.fieldname;

if psIndexName=Column.fieldname

then begin //与原来同列

if plAscend //升序

then begin

mode:='2';

IndexName:=ColName+'2'; //应“降序”

end

else begin

mode:='1';

IndexName:=ColName+'1'; //应“升序”

end;

plAscend:=not plAscend;

end

else begin //新列

IndexName:=ColName+'2';

plAscend:=false;

psIndexName:=ColName;

end;

except

on EDatabaseError do //若未有索引,则重新建立

begin

Messagebeep(0);

//以下新建索引

IndexName:='';

Close;

Exclusive:=true;

if mode='1'

then AddIndex(ColName+'1',ColName,[ixCaseInsensitive],'')//

else //包括'0'

AddIndex(ColName+'2',ColName,[ixDescending,ixCaseInsensitive],'');

Exclusive:=false;

Open;

try //try 1

if mode<>'1'

then begin

mode:='2';//转换

plAscend:=false;

end

else plAscend:=true;

IndexName:=ColName+mode;

psIndexName:=ColName;

except

on EDBEngineError do

IndexName:='';

end //try 2

end

end;

First;

end; //with

DBGrid0.SelectedIndex:=iCol;

end;//End of MySort

本过程已对所有可能的错误进行了相应的检测及处理,代码是比较完整的。因此,把该过程放入你相应的单元中,对每一个DBGrid,只要传递不同的DBGrid及Column参数,就能实现对应数据表的自动排序处理,而事先只为某字段建立一关键索引即可,其它Secondery Indexes的建立均在程序中自动完成,但会为每一个建立了索引的字段生成了一些附加文件(如*.XG?,*YG?等)。当然若有必要,可以在表单关闭前将所有的附加文件删除。

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南 摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具 阅读详情

相关推荐

delphi DBGrid排序的两种方法(自己代码中,测试成功的)

delphi有些第三方控件确实有自带的排序功能,可是对于原始的DBGrid控件不存在自动排序功能,下面是两种不同显示的排序方法。我自己写成函数,可以调用。(自己程序中测试成功的)

巧用DBGrid控件的Sort属性实现“点击标题栏自动排序功能

巧用DBGrid控件的Sort属性实现“点击标题栏自动排序功能 很多朋友在使用DBGrid控件时,抱怨没有点击标题栏便可自动排序的功能,实际上通过ADOQuery或其它数据集组件的Sort属性配合DBGrid的OnTitleClick事件,可以方便地实现此功能。因为Sort属性可以让活动数据集按指定的字段进行排序,也可以选择排序方式(升序/降序),所以我们只要在OnTitleClick事件中设

fyl_077的专栏 995

delphi DBGrid_添加点击排序功能

dbgrid 添加点击字段名自动排序功能,注意空数据时候需要加入判断。

DBGrid的数据进行排序和过滤

这个是显示数据常用的操作,按道理看看CB的帮助就很容易找到答案,可是还有很多的人利用构造新的SQL重新检索的方法实现,实在是非~常~的不理解,利用ADO控件的Sort、Filter或者ClientDataSet的index、filter可以很容易在本地实现且效率很高的处理方式为什么不留意呐。附CB帮助的内容:过滤的://State = CA OR State = MAADO

萤火虫之光 1487

DBGrid点击标题栏实现自动排序功能

通过ADOQuery控件的Sort属性,配合DBGrid的OnTitleClick事件,可以方便地实现此功能。Sort属性可以让活动数据集按指定的字段进行排序,与SQL语句Order后面的写法一样(升序ASC/降序DESC)。 Form1; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource;...

weixin_44823889的博客 514

LAZARUS 在DBgridEH的控件里,点击列标题排序

LAZARUS 在DBgridEH的控件里,点击列标题排序

715

delphi dbgrid_如何在Delphi DBGrid中对记录进行排序

delphi dbgrid Delphi DBGrid is such a powerful component that you're probably using it every day if you're developing data-aware applications. Below, we'll take a look at how to add some more features...

cumao2792的博客 1392

DBGrid单击标题自动排序

procedure TForm1.DBGrid1TitleClick(Column: TColumn);var s,cFieldName:string; i:integer; DataSet:TDataSet;begin Try DataSet:=Column.Grid.DataSource.DataSet; if not DataSet.Act

jinzhili的专栏 1132

如何用DBGrid实现排序

我找到了使用 ADOQUERY 控件实现的方法,可做参考: 巧用DBGrid控件的Sort属性实现“点击标题栏自动排序功能 很多朋友在使用DBGrid控件时,抱怨没有点击标题栏便可自动排序的功能,实际上通过ADOQuery或其它数据集组件的Sort属性配合DBGrid的OnTitleClick事件,可以方便地实现此功能。因为Sort属性可以让活动数据集按指定的字段进行排序,也可以选择排序方式(

普森备忘录 3254

bcb中点击DBGrid标题进行排序

DBGrid,标题进行排序

bobWu 的 学习日记 2880

关于DBgrid排序的问题

自用极品代码: 添加定义: C/C++ code <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> TField *FSortField; void __fastcall SetSortFie

ZENITH 746

Delphi DBGrid重新排序

两种方式可以实现: 第一种

u012411236的专栏 687

Delphi DBGrid 按标题排序,按Shift + 鼠标左健多选

Delphi DBGrid 按标题排序,按Shift + 鼠标左健多选

1062

最全面的DBGrid点击标题实现排序

 最全面的DBGrid标题排序实现方法:procedure TSrv_SJSetForm.DBGridEh1TitleClick(Column: TColumnEh);var s,cFieldName:string; i:integer; DataSet:TDataSet; procedure setTitle; var ii:integer; cStr:str

小宇飞刀的BLOG 922

delphidbgrid升降序的简约代码

 procedure TForm13.DBGrid1TitleClick(Column: TColumn);  vari:integer;Str:string;  begin      for i:=0 to DBGrid1.Columns.Count-1 do  begin   Str:=DBGrid1.Columns[i].Title.Caption;   if (pos(▲,cStr)=

wonder_su的专栏 388

DBGridEh 的排序

概念。

pcplayer的博客 1889

Delphi 7 中DBGrid排序

procedure TfrmTraceReport.DBGrid1TitleClick(Column: TColumn); var SortField, FieldTitle: string; begin SortField := Column.Field.FieldName; FieldTitle := Column.Title.Caption; ShowMessage(Sor

easyboot的专栏 2943

DBGridEh,DBGrid点击标题排序

最近在找关于解决DBGridEh,DBGrid点击标题排序的最简单方法的同时,发现说法很多,但是没有找到一个比较详细的。 所以我在这里做一个小的总结,有不足之处请大家多多指教。 首先说下关于DBGridEh的排序,主要有两种解决方法。 1,只需设置属性,不需要写排序代码 //为什么要强调这里呢,因为在查资料的时候,很多人都说设置好属性就可以自动排序了,但都是只说其一,不说其二,等我慢...

weixin_30325487的博客 263

Dbgrid使用技巧(下)-

Dbgrid使用技巧(下)- -                                       二、建立项目,实现功能 1.新建一项目,并为表单添加相关控件,各控件主要属性如下表: 2.建立各Click的事件代码 Button1(打开表)的Click事件代码如下: procedure TForm1.Button1Click(Sender: TObject); begin  

xiaomaoxia的专栏 4566

全能地图下载器,可下载各种地图瓦片-zxy格式的.zip

全能地图下载器-可下载各种地图瓦片-zxy格式的.zip

上一篇: Delphi制作客户端系统功能组件分离的架构设计
下一篇: 正则表达式
softworkman
博客等级 码龄21年 1粉丝 11原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值