.设置OnClick事件
如果获得焦点的单元格所对应的字段与下拉框所对应的字段不一致下拉框不可见为此设置表格的OnClick事件如下
If (GridCells[GridCol]<>Company) then
begin
ComboBoxVisible := false;
end;
.设置OnChange事件
在OnDrawCell事件中只完成了绘制单元格和显示下拉框的工作并不能将数据输入到表格为此设置下拉框的OnChange事件如下
GridCells[GridColGridRow]:=ComboBox
Items[ComboBoxItemIndex];
这样就完成了在表格中插入下拉框的工作
在表格中显示图形字段
在程序开发中有时需要在报表中显示一些非常规字符例如在零件检验报表中的检测项目字段就包含了零件加工粗糙度加工公差等非常规字符解决该问题的一般思路是把这些非常规字符作为图形字段存储例如SQL Server 数据库中的Image字段但是无论是StringGrid控件还是DBGrid控件都只能直接显示字符串这样就产生了如何在表格控件上显示图形字段的问题
乍一看该问题可以利用上述办法在表格中插入DBImage控件解决但是这样需要插入与记录同等个数的控件更麻烦的是由于OnDrawCell事件触发非常频繁这样插入的DBImage控件会不停地试图与数据库连接不仅增加了网络通信量而且图形字段明显有闪烁感影响程序的正常运行更好的解决办法是在连接数据库时动态地创建DBImage控件利用该控件读取数据库的Image字段并作为临时文件保存到客户机硬盘在表格的OnDrawCell事件中读取该临时文件完成绘制工作该临时文件在客户退出时被删除以下是在表格中显示图形字段的具体步骤
.保存Image字段
在执行查询时读取所有Image字段并保存到客户机硬盘
Begin
// 略去查询语句
FileName:=d: emp; //初始化临时文件路径
MyDBImage=TDBImageCreate(Self);//创建DBImage
MyDBImageParent:=self;
MyDBImageDataSource:=DataSource;
MyDBImage DataField=描述;//指定为描述字段
Index:=;
while not ClientDataEof do begin //读数据库
s:=IntToStr(Index);
FileName:=FileName+s;
FileName:=FileName+bmp;
//保存临时文件
MyDBImage Picture Bitmap SaveToFile(FileName) ; Grid Cells[Index]:=ClientDataFieldByName(零件编号)AsString
GridCells[Index]:=;
//填写表格
GridCells[Index]:=ClientDataFieldByName(实测数据)AsString;
ClientDataNext;
Index:=Index+;
end;
MyDBImageDestroy(); //释放DBImage
end;
[] [] []