| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 1301 人关注过本帖
标题:请问哪位高手会根据 grid 的单元格内容改变单元格背景色?
只看楼主 收藏
潇洒人间一剑仙
Rank: 2
等 级:论坛游民
威 望:1
帖 子:134
专家分:48
注 册:2008-9-19
  得分:0 
以下是引用xs591222在2014-5-22 20:27:50的发言:

 
我想改进为,10的单元格红、100的为兰、1000的为绿。结果实现不哎……
我是用iif嵌套实现的,不过看着有点头大,不知道有没有更有条理的写法
.Columns(lnI).DynamicbackColor="Iif(&myField=[WD],RGB(0,125,0),;
                                        Iif(&myField=[J ],RGB(0,0,255),;
                                        Iif(&myField=[D ],RGB(255,255,0),;
                                        IiF(&myField=[Y ],RGB(255,0,0),;
                                        Iif(&myField=[W ],RGB(0,255,0),;
                                        RGB(255,255,255))))))"
2014-05-22 20:31
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:164
帖 子:7071
专家分:16573
注 册:2012-2-5
  得分:0 
.Columns(lnI).DynamicbackColor="Icase(&myField=[WD],RGB(0,125,0),;
                                      &myField=[J ],RGB(0,0,255),;
                                      &myField=[D ],RGB(255,255,0),;
                                      &myField=[Y ],RGB(255,0,0),;
                                      &myField=[W ],RGB(0,255,0),RGB(255,255,255))"

Vfp6中没有Icase()函数

QQ:243688667
2014-05-22 20:38
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:164
帖 子:7071
专家分:16573
注 册:2012-2-5
  得分:0 
以下是引用xs591222在2014-5-22 20:27:50的发言:

 
我想改进为,10的单元格红、100的为兰、1000的为绿。结果实现不哎……
         .Columns(lnI).DynamicForeColor="Icase(&myField=10,Rgb(255,0,0),&myField=100,Rgb(0,255,0),Rgb(0,0,255))"

QQ:243688667
2014-05-22 20:50
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:18
帖 子:574
专家分:1110
注 册:2009-3-1
  得分:0 
我用8.0的也没有Icase()的
2014-05-22 21:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
看懂了自然知道怎麽回事:

程序代码:

#INCLUDE "D:\項目\myTools\VFP\Const.h"

CLEAR ALL
SET PROCEDURE TO "D:\項目\myTools\VFP\MyTools"
Main()
CLEAR ALL
RETURN

PROCEDURE Main()
    LOCAL loForm
    loForm = CREATEOBJECT("_MainForm")
    WITH loForm
        .Caption = "測試"
        .AutoCenter = .T.
        .Show
    ENDWITH
    READ EVENTS
ENDPROC

DEFINE CLASS _MainForm AS myForm
    MinHeight = 600
    MinWidth = 800
   
    ADD OBJECT Grid1 AS Grid
   
    PROCEDURE Load
        USE "Table1" ALIAS "Table1" IN 0
    ENDPROC
   
    PROCEDURE Unload
        USE IN "Table1"
    ENDPROC
   
    PROCEDURE Arrange
        WITH ThisForm.Grid1
            .Top = 5
            .Left = 5
            .Height = ThisForm.Height - .Top - 5
            .Width = ThisForm.Width - .Left - 5
        ENDWITH
    ENDPROC
   
    PROCEDURE Grid1.Init
        LOCAL lnIndex
      
        WITH This
            .RecordSourceType = 1
            .RecordSource = "Table1"
            .SetAll("FontBold", .T., "Header")
            FOR lnIndex = 2 TO 4
                .Columns(lnIndex).DynamicBackColor = "CellBackColor(" + TRANSFORM(lnIndex) +")"    && 你所要解決的問題關鍵在這裏,無論多複雜的設置都封裝在一個自定義函數中!
            NEXT
        ENDWITH
    ENDPROC
   
ENDDEFINE

FUNCTION CellBackColor(tnFieldIndex)
    LOCAL lnBackColor
   
    DO CASE
        CASE "W" $ EVALUATE("Table1." + FIELD(tnFieldIndex, "Table1"))
            lnBackColor = RED
        CASE "J" $ EVALUATE("Table1." + FIELD(tnFieldIndex, "Table1"))
            lnBackColor = BLUE
        OTHERWISE
            lnBackColor = WHITE
    ENDCASE
   
    RETURN lnBackColor
   
ENDFUNC


[ 本帖最后由 TonyDeng 于 2014-5-22 23:58 编辑 ]

授人以渔,不授人以鱼。
2014-05-22 23:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
如果不能用特別版本的指令就無法解決問題,那就弱了。

授人以渔,不授人以鱼。
2014-05-22 23:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
不用循環,弄明白了我上面代碼的原理,一條SetAll()也能搞定,懂那個自定義函數怎麽寫就行。不善於分解函數寫代碼,必然一團一團亂麻,糾不清理還亂。如果我把那個自定義函數封到別的PRG文件中,單看那個Init代碼,就是多少人所求的一條語句,那有多複雜?我這邏輯不比那些包含超複雜子項成分的單條語句簡單、清晰得多?現在這樣,無論你將來怎麽增、刪、改顔色和條件,都不會動主語句分毫,它就是一個超級簡單的指令。

[ 本帖最后由 TonyDeng 于 2014-5-23 00:04 编辑 ]

授人以渔,不授人以鱼。
2014-05-22 23:47
wengjl
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:57
帖 子:1316
专家分:2483
注 册:2007-4-27
  得分:0 
高手

只求每天有一丁点儿的进步就可以了
2014-05-23 18:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
把能獨立運行的程序放上來可看到效果。


注:
1.非壓縮文件,下載後修改文件擴展名,把.zip刪掉即可,是未壓縮的.exe文件。
2.已内置數據表。

[ 本帖最后由 TonyDeng 于 2014-5-23 23:01 编辑 ]
附件: 您没有浏览附件的权限,请 登录注册

授人以渔,不授人以鱼。
2014-05-23 22:51
y148y
Rank: 2
等 级:论坛游民
威 望:1
帖 子:20
专家分:11
注 册:2013-6-23
  得分:0 
在表格控件的afterRowcolChange事件中,写入如下代码:


this.column2.dynamicforecolor="iif(表1.一工位='W',rgb(255,0,0),rgb(0,0,0))"   &&前景色
this.column2.dynamicbackcolor="iif(表1.一工位='W',rgb(255,0,0),rgb(0,0,255))"   &&背景色
2014-05-28 10:17







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043680 second(s), 7 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved