在DbGrid中,如果该列不能修改的话,把他的背景颜色置为灰色!
我的代码如下,这段代码画出来时只有一列的背景改变了(用户不能输入的不只是这一列),而且速度奇慢,不知道什么问题,还请高手指教!
procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
i,j:Integer;
begin
if JSKHCLCX01JM.Caption='客户车辆维护' then
begin
for i:=0 to grdClientVehicleInfo.FieldCount - 1 do
begin
for j:=0 to grdClientVehicleInfo.DataSource.DataSet.RecordCount do
begin
if (column.FieldName='Client_id') or
(column.FieldName='vehicle_No') or
(column.FieldName='Client_Name') then
begin
grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
grdClientVehicleInfo.DefaultDrawColumnCell(Rect,datacol,column, State);
end;
end;
end;
end;
end;
procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
var
i,j:Integer;
begin
if JSKHCLCX01JM.Caption='客户车辆维护' then
begin
for i:=0 to grdClientVehicleInfo.FieldCount - 1 do
begin
for j:=0 to grdClientVehicleInfo.DataSource.DataSet.RecordCount do
begin
if (grdClientVehicleInfo.Fields[i].Name='Client_id') or
(grdClientVehicleInfo.Fields[i].Name='Vehicle_No')or
(grdClientVehicleInfo.Fields[i].Name='Client_Name') then
begin
grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
grdClientVehicleInfo.DefaultDrawDataCell(Rect, Field, State);
end;
end;
end;
end;
end;
我的代码如下,这段代码画出来时只有一列的背景改变了(用户不能输入的不只是这一列),而且速度奇慢,不知道什么问题,还请高手指教!
procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
i,j:Integer;
begin
if JSKHCLCX01JM.Caption='客户车辆维护' then
begin
for i:=0 to grdClientVehicleInfo.FieldCount - 1 do
begin
for j:=0 to grdClientVehicleInfo.DataSource.DataSet.RecordCount do
begin
if (column.FieldName='Client_id') or
(column.FieldName='vehicle_No') or
(column.FieldName='Client_Name') then
begin
grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
grdClientVehicleInfo.DefaultDrawColumnCell(Rect,datacol,column, State);
end;
end;
end;
end;
end;
procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
var
i,j:Integer;
begin
if JSKHCLCX01JM.Caption='客户车辆维护' then
begin
for i:=0 to grdClientVehicleInfo.FieldCount - 1 do
begin
for j:=0 to grdClientVehicleInfo.DataSource.DataSet.RecordCount do
begin
if (grdClientVehicleInfo.Fields[i].Name='Client_id') or
(grdClientVehicleInfo.Fields[i].Name='Vehicle_No')or
(grdClientVehicleInfo.Fields[i].Name='Client_Name') then
begin
grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
grdClientVehicleInfo.DefaultDrawDataCell(Rect, Field, State);
end;
end;
end;
end;
end;
解决方案 »
- 关于TCHART中有2个Series是X轴标签显示的问题...
- dbchart组件的困惑。为什么出现莫名其妙的错误,高手帮忙啊,送分。
- 关于数据随远程数据库中记录更新而实时更新的问题
- 谁能告诉我,怎么作?
- 使用SQL可不可以修改当前数据指针所指向的记录的数据?
- 怎样把一个网站的内容下载到本机上,有没有好的软件与工具!!!!
- 请教,怎样才能在程序将字倒着打印出来?急啊!请各帮帮忙啦!
- 怎么样在delphi程序中中止另一个程序。最好有代码!
- 密码到底怎么做才能保密?
- 用的是什么数据库???
- 请问在ADOTable中的lookup字段能否用filter过滤?如何实现?此字段并不存在当前表的数据库的!
- 很简单的问题:关于integer 与 extended(我是菜鸟)
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol mod 2 = 0 then
begin
DBGrid1.Canvas.Brush.Color := clSilver;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol mod 2 = 0 then
begin
DBGrid1.Canvas.Brush.Color := clSilver;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;不错,这样可以
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if JSKHCLCX01JM.Caption='客户车辆维护' then
begin
if (column.FieldName='Client_id') or
(column.FieldName='vehicle_No') or
(column.FieldName='Client_Name') then
begin
grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
end;
grdClientVehicleInfo.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;这样的话,也是只有'vehicle_No'列的背景颜色改变了,其它2列还是没有改变的。我的数据是从逻辑层传过来的
在dbgrid中把此列加上,然后设置它的背景颜色就可以了!