人们在利用Delphi开发数据库应用程序时经常使用表格控件制作报表灵活地使用表格控件的OnDrawCell事件可以完成一些特殊效果的显示能更好地满足用户需求本文介绍灵活使用OnDrawCell事件的三个技巧
动态更新表格行的颜色
有时需要在报表中动态更新表格行的颜色例如在供应商列表中优先供货的供应商用绿色显示其他的供应商用红色显示此时可以在OnDrawCell事件中用如下代码实现
if TableFieldByName(CustNo)AsInteger > then
DBGridCanvasFontColor := clRed;
DBGridDefaultDrawColumnCell(Rect DataCol
Column State)
上述的代码可以根据应用的需要进行扩充例如需要用黑体显示时只要将对应行改为
DBGrid
Canvas
Font
Style := [fsBold];
在表格中插入其他可视控件
在数据库编程中外键约束是保证数据库中的数据按用户要求存放的有效方法例如在一个订单处理环境中订单表和客户表之间就存在外键约束即订单表中的每条记录在客户表中应该有对应项这样在填写订单表时如果在输入焦点提供客户列表供用户选择将有效地保证数据的正确性
DBGrid控件和StringGrid控件都派生于TcustomGrid其中DBGrid控件可以输入数据Delphi对DBGrid处理的内部机制是在网格上浮动一个DBEdit控件能够获得焦点输入数据的网格其实是浮动的DBEdit控件当焦点转移时把编辑框中的文字显示到表格其他未获得焦点地方和StingGrid并没有区别这样就达到了在表格上输入数据的目的所以在表格中插入其他可视控件的方法就是在网格上浮动该可视控件因此从原理上讲任何控件都可以在表格中插入本文以在表格中插入下拉框为例介绍在网格上插入其他控件的具体步骤
.设置属性
读入客户列表到下拉框的Items属性
.设置OnDrawCell事件
OnDrawCell事件在绘制表格的单元格时被触发当获得焦点的单元格所对应的字段与下拉框所对应的字段一致时移动下拉框到获得焦点的网格上并且使下拉框可见从而达到在表格指定列上显示下拉框的功能设置表格的OnDrawCell事件如下
if (gdFocused in State) then
begin
//对应字段一致则执行
if (GridCells[ACol]=Company) then
begin
//移动下拉框到指定位置
ComboBoxLeft := RectLeft + GridLeft;
ComboBoxTop := RectTop + Gridtop;
ComboBoxWidth :=RectRight-RectLeft;
ComboBoxHeight:=RectBottom-RectTop;
// 使下拉框可见并获得焦点
ComboBoxVisible := True;
ComboBoxSetFocus;
end;
end;
[] [] []