请教:cxGrid单元格居左、居右

tgbd 2010-08-17 07:46:16
类似财务凭证的栏目:摘要、借方、贷方这三栏。

要求达到的效果:如果借方不为0,则 摘要栏中的文本居左
如果贷方不为0,则 摘要栏中的文本居右。 (注:同一行中,借、贷只能一栏有不为0的数据)

我在onCustomDrawCell中搞了几种方法,总会报“Invalid class typecast"

var cxColumn:TcxGridColumn;
begin
cxColumn:=(Sender as TcxGridDBTableView).GetColumnBYFieldName('JF'); //就这里报错

....
end;

请各位朋友指点一下,谢谢
...全文
222 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tgbd 2010-08-18
  • 打赏
  • 举报
回复
多谢居士,真乃良师益友啊。谢谢结帖
kye_jufei 2010-08-17
  • 打赏
  • 举报
回复
再多說一句:編程在於程序理解代碼為什麼會這樣做?而不是怎樣去編程。。。
kye_jufei 2010-08-17
  • 打赏
  • 举报
回复
這是必然的,你的重繪事件應該是數據處於瀏覽狀態(即不可編輯狀態),待你提交POST後刷新一下;你再看一下效果。。。類似問題多動手研究一下,思路要清晰,一步一個腳印,循序漸進,才能找到根本問題的辦法。。。最重要的是:要根據實際情況學會融匯貫通,變幻方式及程序代碼。。。祝你成功!
tgbd 2010-08-17
  • 打赏
  • 举报
回复
谢谢楼上的朋友。

我现在效果做出来了,但是出现一个新问题:比如某行摘要栏居右后,在编辑状态下,鼠标点击这行,再移点击其他行,这时那个刚才的那个居右摘要行那栏会有两个内容,一个居左,一个居右的。
alan_xxq 2010-08-17
  • 打赏
  • 举报
回复
支持居顧問
kye_jufei 2010-08-17
  • 打赏
  • 举报
回复
自己變通鉆研一下...

procedure TRes_HrCq_YD_F.cxGrid2DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
CheckValue:Integer;
CxColumn:TcxGridDBColumn;
begin
inherited;
CxColumn:=(Sender as TcxGridDBTableView).GetColumnByFieldName('STATUS');
//加入你的條件
if CxColumn=nil then Exit;
if SameText(AViewInfo.Item.Name,CxColumn.Name) then
begin
CheckValue:=AViewInfo.GridRecord.Values[cxGrid2DBTableView1Column29.Index];
if(CheckValue=0) //and <//加入你的條件:借方不为0(同一行中,借、贷只能一栏有不为>then
begin
//滿足條件的單元格位置(居左)
end;
if(CheckValue=1) //and <//加入你的條件:贷方不为0(同一行中,借、贷只能一栏有不为>>then
begin
//滿足條件的單元格位置(居右)
end;
end;
end;
kye_jufei 2010-08-17
  • 打赏
  • 举报
回复
沒明白你的意思?
我的理解是:你根據摘要、借方、贷方这三欄,如果某一列《(如果借方不为0,则 摘要栏中的文本居左
如果贷方不为0,则 摘要栏中的文本居右。 (注:同一行中,借、贷只能一栏有不为0的数据)》:

舉例數據說明:
根據條件,
1.若借方不為0,则“摘要”欄的文本居左;
2.若貨方不為0,则“摘要”栏中的文本居右;(同一行中,借、贷只能一栏有不为0的数据)
....

在重繪事件中控件寫代碼,直接控制不就得了(滿足以上條件,單元格位置變動)...
tgbd 2010-08-17
  • 打赏
  • 举报
回复
谢谢1楼,可能没明白我的意思:摘要栏这列,有时候文本要居左,有时候要居右,这个效果由借、贷方的数据决定。
kye_jufei 2010-08-17
  • 打赏
  • 举报
回复
說明:
Cxgrid控件默認是將數據的數字形式是以居右對齊方式的,文本形式是以居左對齊方式的...

你這個功能很簡單:
可直接在onCustomDrawCell事件中直接控制Cxgrid某列的以下屬性即可:

在onCustomDrawCell事件中寫:

...
AlignLeftVisible,//單元格居左   
AlignRightVisible,//單元格居右
AlignCenterVisible,//單元格居中

...

2,497

社区成员

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

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