delphi 里的DBGrid控件查出的数据根据条件变色 15

 我来答
385lphuir
2011-06-11 · TA获得超过1247个赞
知道大有可为答主
回答量:3592
采纳率:90%
帮助的人:815万
展开全部
DBGride的界面是与数据库关联的,对它的任何输入操作都要与实际数据库的数据关联,你不可能随意编辑它(特别是当数据库相关的若干表的增删改被定义了约束关系时更是如此),不是改点属性就解决问题的,不关联Datasource也不能使用它,这是没办法改变的。不过,你可以用另外的方式实现你的想法,只不过麻烦些,比如用TStringGrid或TListview(详细资料方式下),只是你自己需要做很多工作,数据的调入、字段、记录与表格的关联,数据同步,增删改操作等。

只是,程序员一般不这么做,而是用其他简单些的方式实现,比如,添加、修改记录,弹出单独窗口把数据用非数据库控件表现出来,让用户随意编辑,然后提交时再自己做检查(用户输入逻辑错误的话可以要求重输入)和转换,这样做能完全掌控用户的输入行为,保证数据录入的正确性。这两样如果直接在DBGrid上编辑,你将会有很多麻烦,单是纠正用户错误(避免引发异常和数据内部逻辑错误)就不好找机会,因为你想完全掌控的话要涉及很多事件处理,其间的逻辑时序关系很难找清,甚至未必能做好。而对删除和查询操作,DBGrid一般没什么问题。因此,有经验的程序员可能会把DBGrid的ReadOnly设置为true。
tyjk2002
2011-06-11
知道答主
回答量:34
采纳率:0%
帮助的人:0
展开全部
在onDrawColumnCell事件中
IF <条件语句> THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
追问
为什么我的程序里DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
DATACOL,COLUMN不能用?
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
不能用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
耗电机器
2011-06-16 · 超过13用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:43.7万
展开全部
if trim(TDBGrid(Sender).DataSource.DataSet.FieldByName('smark').AsString)='Y' then
TDBGrid(Sender).Canvas.Brush.Color := clRed ;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
给你举个例子
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
macloveying
2011-06-21
知道答主
回答量:2
采纳率:0%
帮助的人:3402
展开全部
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin

if oraquery1.FieldByName('kpsn').AsString='NF1S660033AC0011' then
begin
DbGrid1.Canvas.Brush.color:=clblack;
dbgrid1.Canvas.Font.Color:=clred;
end;

DbGrid1.Canvas.pen.mode:=pmmask;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);

end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式