DELPHI中DBGrid中行的定位及着色实现

EhLib 11.1在Delphi 12.3下的安装配置与实战应用指南 数据库应用开发中,表格控件(DBGrid)是数据展示与交互的核心。Delphi开发者常面临原生DBGrid功能足的问题,需要高效可扩展的解决方案。EhLib作为一款老牌的Delphi数据库网格控件,通过丰富的属性与事件,实现了多排序、固定列、合并单元格、自动筛选、统计合计以及一键导出Excel等企业级功能。其设计原理基于标准数据源(TDataSource)的封装,与ADO、ClientDataSet、FireDAC等无缝衔接,显著提升开发效率。本文针对EhLib 11.1 Professional Fu 阅读详情
 

DELPHIDBGrid中行的定位及着色实现

1 问题的提出

    在对一个数据库系统进行操作的时候,发现不能对DBGrid控件中的数据行定位及在定位到某行后无法对当前行进行明显的标志(例如改变颜色),在往上查找了很多资料,发现基本没有对这个内容的介绍,包括一些动态设顶行的颜色等文章讲的都是在数据初始化时做的操作,而没有在数据源刷新后的重新定位功能,所以下决心解决这个问题,通过一上午对DELPHI帮助的研究和查看相关的资料,稍有小成,现写出来和各位同行共同学习,不当之处请多指教。

2 解决的办法

首先查找TtableTquery控件没有发现能够直接定位数据行的方法,同样查找DBGrid也没有找到相应的能够直接定位到某行数据的函数,然后我就从数据集的类上查找,经过不断努力,终于在TdataSet中发现了一个方法:GoToBookmark,这个方法能够使当前的DBGrid中的记录指针指向你需要指定的行。

在找到这个方法后,问题还只解决了一半,还必须把当前指针指向的数据行改变颜色,就是说必须用一个明显的方式去标志当前选中的行(出了在DBGrid上的那个小的不明显的书签外)这个很显然就是在DBGrid控件中实现了,在DBGrid控件中有一个事件OnDrawDataCell,重载这个方法就可以实现指定的数据行的颜色的改变了。

具体的使用过程如下:

(1)    动态定位数据行

//===============================================================

//过程名:  DyDbgDataLine

//作者:    haitian

//日期:    2003-02-22

//功能:    根据用户指定的条件自动移动到DBGrid控件中符合此条件的某行数据上

//输入参数:

//          sValue:当前需要移动到的行的值;

//          tab:当前DBGrid中对应的表的数据;

//          dsr:当前需要操作的数据源;

//返回值: 

//修改记录:

//================================================================

Procedure DyDbgDataLine(sValue:string;tab:Ttable;dsr:TDatasource)

var

   bookmark:TBookMark;

begin

   //记录当前标记的行;

  bookmark:=self. tab.GetBookmark;

  self. tab.first;

  while not self. tab.Eof do

  begin

  if self. tab.FieldByName('cpbh').AsString= sValue then

  begin

  bookmark:=self. tab.GetBookmark;

  break;

  end;

  self. tab.Next;

  end;

  self. dsr.DataSet.GotoBookmark(pointer(bookmark));

End;

说明:使用的表已经和当前显示界面上的DBGrid绑定;

 

(2)    改变颜色标记当前数据行

首先把DBGridDefaultDrawing属性设为false;然后在OnDrawDataCell事件函数中调用下面的函数:

      //===============================================================

//过程名:  DrawLine

//作者:    haitian

//日期:    2003-02-22

//功能:    Dbgrid中的指定的行改变颜色作为标记;

//输入参数:

//          zdm:字段名;

//          Rect:需要出入的行的某个单元;

//          Field:当前显示的域;

//          state:当前行的显示状态;

//          zdz:当前需要移动到的行的值;

//          tab:当前DBGrid中对应的表的数据;

//          dbg:当前需要操作的DBGrid

//返回值: 

//修改记录:

//================================================================

 procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)

 begin

 if (tab.fieldbyname(zdm).asstring=zdz)then

begin

dbg.canvas.font.color:=clred;

dbg.canvas.brush.color:=clyellow;

end;

 dbg.DefaultDrawDataCell(Rect,Field,State);

Delphi DBGrid类控件定位到某一行,并更改为选中状态。 Delphi中,可以使用数据集控件提供的 Locate 成员方法快速定位至某条记录, 然后通过清除数据集控件的选中状态,并重新赋值达到我们的目的。 grDirectory.DataSource.DataSet.Locate('StepNo', StrToInt(stepList[i]), []); grDirectory.ClearSelectio... 阅读详情

相关推荐

DBGrid 当前列定位到指定的字段上

//--------------------------------------------------------------------------------// 功能:将 DbGrid 当前列定位到某字段上。// 参数: pDbGrid:TDbGrid;        DBGrid//              pcFieldName : string    数据表字段名,字段名区分大小

ForestK的公用模块 2226

delphi 工作日记

sty2008boy的专栏 559

DELPHIDBGrid中行定位着色实现(转载)

====================================================== 注:本文源代码点此下载 ====================================================== delphidbgrid中行定位着色实现 1 问题的提出 在对一个数据库系统进行操作的时候,发现能对dbgrid控件中的数据定位及在

javazhuanzai的专栏 669

Delphi DBGrid刷新闪动的处理

DBGrid的列没有先创建,由查询时数据集自动带入时,刷新会闪

中年求爱 1416

delphi grideh定位到满足某条件那行,即定位到等于某值的那行

ADOQuery1.locate('编号;名称',vararrayof(['20230101','王明']),[loPartialKey]);ADOQuery1.Locate('编号','20230101',[loPartialKey]);如下,定位到某两列,各自满足条件。如下,定位到某一列满足某条件。

gqwrg的博客 531

怎么获取DBGrid Cell坐标

The code to show over what cell in a DBGrid the cursor is, and how to change the cursor over the tite bar: ~~~~~~~~~~~~~~~~~~~~~~~~~ procedure TForm1.GridMouseMove   (Sender: TObject; Shift: TShiftS

冰点信息 1316

delphi中给TDBGrid上颜色

delphi中给TDBGrid上颜色 ; c++builder 中给TDBGrid上颜色

bobWu 的 学习日记 2653

dbgrideh排序后光标定位首行

dbgrideh显示数据后,光标在首行,排序后光标会在最后一行,还要把光标拉到第一行,很方便。以下方法可以使光标排序后一直定位在表格的首行。dbgrideh1titleclick事件中加入dbgrideh1.moveby(-fdquery1.recordcount)目前尚未发现问题,唯一想到的问题是如果在操作表格过程中需要点击表头的可能会移动记录,但我没有这样的情况出现。

leavesguth的博客 306

DBgrid网格特效

DBgrid网格特效2008年8月4日 11:25 作者:详 来源:中国烟机备件网 Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项足呢?本文从改变数据网格的色彩配置角度,提出了一种解

远方 677

DBGrid刷新问题

DBGrid刷新问题 Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061218110558245.html 我是一个新手,有一个问题,就是在一数据库中添加纪录后(ADOQuery),显示在DBGrid中,但是添加显示以后是追加到最后,而是清空了以前的纪录,并只加一条纪录,能显示...

aibi9196的博客 543
上一篇: MS SQL板块整理专辑
下一篇: 用DBGrid控件的Sort属性实现“点击标题栏自动排序功能”
hedylin
博客等级 码龄25年 35粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值