Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:组件使用    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  Delphi中控制DBGrid控件的单元格显示  
 
Delphi中控制DBGrid控件的单元格显示

笔者看了《电脑报》2001年第43期编程乐园刊载的《在Delphi中用ADO控件打开Access文件》的文章后,深受启发。我以前刚好用VB编过一个程序,其中的数据库就是Access97格式的,于是用该文所述方法进行打开,果然能很好地打开。由于我的数据库中存放的是科学实验数据,其中有单精度(Single)字段,打开后显示在DBGrid中的小数位数长达13位。而DBGrid在显示数值型字段的值时是默认右对齐显示,这样就看不到前面的整数部分。对于那些要求有效数字极严格的地方,也就是说小数后的0也要显示出来,比如54.1300。这显然不能满足要求,后来经过我的摸索,终于找到了一种可以控制DBGrid控件的显示格式的方法,现将其写出,供大家参考。

窗体的界面设置以及控件的添加、属性设置均按照《在Delphi中用ADO控件打开Access文件》一文,只是在DBRrid1的DrawDataCell事件过程中添加如下代码:

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);

var Temp:string; //说明一个字符串变量,用于暂存放单精度的数值

begin

with(Sender as TDBGrid).Canvas do

begin

FillRect(Rect);

//对字段的值的数据类型进行判断,如果是浮点型则进行格式设置

if (Field.DataType = ftFloat) then

begin

if not (field.IsNull) then

//当字段的值不为空时,调用format函数,对数值的格式进行设置

{格式字符串‘%8.4f'表示显示长度为8,以4位小数的形式输出。如果要改变输出的长度及小数位数,只须修改格式字符串即可。如要保留两位小数,则用‘%8.2'。更多的信息,请参考Delphi帮助文档}

temp:= format(‘%8.4f',[strtofloat(field.asstring)]);

TextOut(Rect.Right-TextWidth(temp)-3,Rect.Top+3, temp);//左对齐画出单元

end

else

TextOut(Rect.Left+2,Rect.Top+3,Field.AsString);

end;

end;

另外,我们在录入数据时习惯于按下回车(Enter)键就将输入光标移到下一单元格,要实现这一功能,只需在DBGrid1的OnKeyPress事件过程中添加如下代码:

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);

begin

if Key=#13 then //如果按键为ENTER键

if DBGrid1.selectedindex <(DBGrid1.fieldcount -1)then //如果当前活动焦点小于当前数据网格的字段数

DBGrid1.selectedindex:= DBGrid1.selectedindex +1 //转入该数据的下一个字段

else

begin

if not ADOtable1.Eof then //如果不是ADOTABLE1的最后一条记录

begin //指向下一条记录

ADOtable1.Next;

DBGrid1.SelectedIndex:=0; //将当前的活动焦点定位在该记录的第一个字段中

end;

end;

end;

注:以上程序在Win98 SE中文版及Delphi5上调试通过。

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站