能给出画的代码吗?我试了一下,不行啊 [code=Delphi(Pascal] if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index] = -1 then begin ACanvas.FillRect(AViewInfo.Bounds); end; [/code]
[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]
to kye_jufei 你的代码只是判断当前重画的字段值是-1吧,我的代码已经判断出来了啊,问题是怎么重画为空或readonly為false啊?
readonly為false可在cxGrid1DBTableView1Editing事件中处理
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,在重画里面应该怎么写代码呢?
你在GetDisplayText事件中處理看看是否可以處理單元格的text
试试 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;
to kye_jufei不能过滤掉-1标志的,思路能转的我会转的,现在就是想实现隐藏CheckBox的功能
自己解决了 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;
[code=Delphi(Pascal]
if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index] = -1 then
begin
ACanvas.FillRect(AViewInfo.Bounds);
end;
[/code]
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]
[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,在重画里面应该怎么写代码呢?
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;
1.如果0、1只是為了判斷復選框的選擇和不選擇的狀態的話,你可以把-1的值用sql語句過濾掉再處理它的0或1事件,即選擇和不選擇;
2.直接將它的editing的readonly鎖定,給出提示
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;