求一段代码,给分!

markoni 2003-01-29 02:07:31
在DBGRID表格中显示这样的数据:
name t1 t2 t3
木 3 15 18
铁 2 8 9
我只想改变数据为单数的背景色,我看了前些日子的贴子,但还是不明白,请各位帮忙!
...全文
68 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx1452 2003-01-29
  • 打赏
  • 举报
回复
OK
呵呵
不谢
markoni兄
你也是
新年快乐
markoni 2003-01-29
  • 打赏
  • 举报
回复
完美结束,谢谢!!!祝 wx1452兄新年快乐!万事如意!!!
wx1452 2003-01-29
  • 打赏
  • 举报
回复
原来是这样
function IsInStrArray(const S: string): Boolean;
var
I: Integer;
const
cStrArray: array[0..4] of String =('01','02','07','08','12');
begin
Result := False;
for I := Low(cStrArray) to High(cStrArray) do
if S = cStrArray[I] then
begin
Result := True;
Exit;
end;
end;

放在
procedure Tfr_jjfenxi.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);的前面

或function IsInStrArray(const S: string): Boolean;放在Interface部分
markoni 2003-01-29
  • 打赏
  • 举报
回复
我写函数写的地方对吗?为什么出现:Undeclared identifier:'IsInStrArray'的错误?
wx1452 2003-01-29
  • 打赏
  • 举报
回复
procedure Tfr_jjfenxi.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.Field.DataType= ftstring then
if IsInStrArray(DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsString) then
begin
DBGrid1.Canvas.Brush.Color := clRed;
DBGrid1.Canvas.Font.Color:=clWhite;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
markoni 2003-01-29
  • 打赏
  • 举报
回复
我是这样写的,但还不行,不知错在哪里,请指教!!!
procedure Tfr_jjfenxi.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.Field.DataType= ftstring then
if IsInStrArray(DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsString) then
DBGrid1.Canvas.Brush.Color := clRed;
DBGrid1.Canvas.Font.Color:=clWhite;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
function IsInStrArray(const S: string): Boolean;
var
I: Integer;
const
cStrArray: array[0..4] of String =('01','02','07','08','12');
begin
Result := False;
for I := Low(cStrArray) to High(cStrArray) do
if S = cStrArray[I] then
begin
Result := True;
Exit;
end;
end;
wx1452 2003-01-29
  • 打赏
  • 举报
回复
字符串不能用作集合里的,只能是有序类型
而且这个有序类型的值还不能超过255
可以这样

const
cStrArray: array[0..4] of String =
('02', '12', '23', '24', '29');

然后写一函数
function IsInStrArray(const S: string): Boolean;
var
I: Integer;
begin
Result := False;
for I := Low(cStrArray) to High(cStrArray) do
if S = cStrArray[I] then
begin
Result := True;
Exit;
end;
end;
然后
if Column.Field.DataType = ftString then
if IsInStrArray(DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsString) then
...

markoni 2003-01-29
  • 打赏
  • 举报
回复
我用的是字符型,我是这样写的:.....(Column.FieldName).Asstring in ['02','12','23','24','29']then ,if Column.Field.DataType = ftInteger then中的ftinteger 已改成ftstring, 但却不行,
wx1452 2003-01-29
  • 打赏
  • 举报
回复
那就这样
if Column.Field.DataType = ftInteger then
if DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsInteger
in [02,12,23,24,29] then
....
markoni 2003-01-29
  • 打赏
  • 举报
回复
ok!基本搞点!想问一下,如只想让数据等于一个集合是(02,12。23,24,29)时才改变颜色,怎样定义这个集合,type....我就是搞不点,请多多指教!!!
wx1452 2003-01-29
  • 打赏
  • 举报
回复
不好意思,忘了说了
在Implementation下加一
uses DB;
markoni 2003-01-29
  • 打赏
  • 举报
回复
忘记说了,表格中的数字是字符型的,wx1452兄!以上的ifcolumn...语句不能运行.
wx1452 2003-01-29
  • 打赏
  • 举报
回复
将DBGrid的DefaultDrawing设为False;

procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.Field.DataType = ftInteger then
if DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsInteger mod 2 <> 0 then
DBGrid1.Canvas.Brush.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧