如果根据记录的值隐藏cxGrid中的CheckBox

Cassava 2011-02-20 02:54:48
我有一个字段的值为0或1或-1,在cxGrid显示为Properties为CheckBox类型的列,0为未打勾,1为打勾 已实现,
-1不显示CheckBox,显示为空白并不能修改,不知道怎么实现,有谁知道怎么实现的吗?
...全文
225 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cassava 2011-02-22
  • 打赏
  • 举报
回复
自己解决了
procedure TF_RolePopedom.cxGridDBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index] = -1 then
begin
if AViewInfo.Item.Index = TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index then
begin
ACanvas.FillRect(AViewInfo.Bounds);
ADone := True;
end;
end;
end;
kye_jufei 2011-02-21
  • 打赏
  • 举报
回复
[code=Delphi(Pascal]begin
cxcolumn:=(sender as TcxGridDBTableView).getcolumnbyfieldname('cht');
if cxcolumn=nil then exit;
if sametext(aviewinfo.item.name,cxcolumn.name) then
begin
checkvalue:=StrToInt(aviewinfo.gridrecord.values[cxGrid1DBTableView1Column1.index]);
if(checkvalue=-1) then
begin
//你處理的代碼(顯示為空和readonly為false)...
end;
end;
end;[/code]
Cassava 2011-02-21
  • 打赏
  • 举报
回复
to kye_jufei不能过滤掉-1标志的,思路能转的我会转的,现在就是想实现隐藏CheckBox的功能
Cassava 2011-02-21
  • 打赏
  • 举报
回复
to hongqi162 你的方法我试了,不行啊
kye_jufei 2011-02-21
  • 打赏
  • 举报
回复
再提供二個思路:
1.如果0、1只是為了判斷復選框的選擇和不選擇的狀態的話,你可以把-1的值用sql語句過濾掉再處理它的0或1事件,即選擇和不選擇;
2.直接將它的editing的readonly鎖定,給出提示。。。
hongqi162 2011-02-21
  • 打赏
  • 举报
回复
试试

procedure TForm1.TableCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
var
left :integer;
Rect:TRect;
begin
if AViewInfo.Item.DataBinding.FilterFieldName = .. then
Exit;
if AViewInfo.Item.DataBinding.FilterFieldName = .. then
begin
AViewInfo.Item.Properties:=nil;
end;

end;
kye_jufei 2011-02-21
  • 打赏
  • 举报
回复
你在GetDisplayText事件中處理看看是否可以處理單元格的text。。。
Cassava 2011-02-21
  • 打赏
  • 举报
回复
cxGrid1DBTableView1Editing事件中处理只读我试了一下确实可以
[code=Delphi(Pascal))]
procedure TF_RolePopedom.cxGridDBTableView1Editing(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
var AAllow: Boolean);
var
cxcolumn:TcxGridDBColumn;
begin
cxcolumn:=(sender as TcxGridDBTableView).GetColumnByFieldName('MEdit');
if cxcolumn=nil then exit;
if sametext(AItem.name,cxcolumn.name) then
begin
if(AItem.DataBinding.Item.EditValue ='-1') then
begin
AAllow := False;
end;
end;
end;
[/code]
但我还要不显示CheckBox,在重画里面应该怎么写代码呢?
kye_jufei 2011-02-21
  • 打赏
  • 举报
回复
readonly為false可在cxGrid1DBTableView1Editing事件中处理。。。
Cassava 2011-02-21
  • 打赏
  • 举报
回复
to kye_jufei 你的代码只是判断当前重画的字段值是-1吧,我的代码已经判断出来了啊,问题是怎么重画为空或readonly為false啊?
Cassava 2011-02-20
  • 打赏
  • 举报
回复
能给出画的代码吗?我试了一下,不行啊
[code=Delphi(Pascal]
if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index] = -1 then
begin
ACanvas.FillRect(AViewInfo.Bounds);
end;
[/code]
dinoalex 2011-02-20
  • 打赏
  • 举报
回复
还是自已画容易,只是代码多一点
bdmh 2011-02-20
  • 打赏
  • 举报
回复
如果只是0和1,cxgrid本身就可以实现,如果想你说的说的那样,可以在drawcell事件中自己画出效果

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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