delphi 里的DBGrid控件查出的数据根据条件变色 15
展开全部
DBGride的界面是与数据库关联的,对它的任何输入操作都要与实际数据库的数据关联,你不可能随意编辑它(特别是当数据库相关的若干表的增删改被定义了约束关系时更是如此),不是改点属性就解决问题的,不关联Datasource也不能使用它,这是没办法改变的。不过,你可以用另外的方式实现你的想法,只不过麻烦些,比如用TStringGrid或TListview(详细资料方式下),只是你自己需要做很多工作,数据的调入、字段、记录与表格的关联,数据同步,增删改操作等。
只是,程序员一般不这么做,而是用其他简单些的方式实现,比如,添加、修改记录,弹出单独窗口把数据用非数据库控件表现出来,让用户随意编辑,然后提交时再自己做检查(用户输入逻辑错误的话可以要求重输入)和转换,这样做能完全掌控用户的输入行为,保证数据录入的正确性。这两样如果直接在DBGrid上编辑,你将会有很多麻烦,单是纠正用户错误(避免引发异常和数据内部逻辑错误)就不好找机会,因为你想完全掌控的话要涉及很多事件处理,其间的逻辑时序关系很难找清,甚至未必能做好。而对删除和查询操作,DBGrid一般没什么问题。因此,有经验的程序员可能会把DBGrid的ReadOnly设置为true。
只是,程序员一般不这么做,而是用其他简单些的方式实现,比如,添加、修改记录,弹出单独窗口把数据用非数据库控件表现出来,让用户随意编辑,然后提交时再自己做检查(用户输入逻辑错误的话可以要求重输入)和转换,这样做能完全掌控用户的输入行为,保证数据录入的正确性。这两样如果直接在DBGrid上编辑,你将会有很多麻烦,单是纠正用户错误(避免引发异常和数据内部逻辑错误)就不好找机会,因为你想完全掌控的话要涉及很多事件处理,其间的逻辑时序关系很难找清,甚至未必能做好。而对删除和查询操作,DBGrid一般没什么问题。因此,有经验的程序员可能会把DBGrid的ReadOnly设置为true。
展开全部
在onDrawColumnCell事件中
IF <条件语句> THEN
BEGIN
DBGRID1.Canvas.Font.Color:=CLBLUE; //字体颜色
dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
END;
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; //背景颜色
不能用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if trim(TDBGrid(Sender).DataSource.DataSet.FieldByName('smark').AsString)='Y' then
TDBGrid(Sender).Canvas.Brush.Color := clRed ;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
给你举个例子
TDBGrid(Sender).Canvas.Brush.Color := clRed ;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
给你举个例子
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询