根据该行中的值更改网格行颜色
Changing Grid row color based on values in that row
我有一个包含以下列的网格:nrcrt、deadline、dateEnd、content。
deadline 和 dateEnd 列格式为 "yyyy-MM-dd HH:mm:ss"
如果截止日期大于 dateEnd 且小于今天,我想将网格行颜色设置为红色。
thisform.grid1.SetAll("DynamicForeColor", "IIF(CTOD(SUBSTR(deadline , 1, 10)) >CTOD(SUBSTR(dateEnd , 1, 10)) and CTOD(SUBSTR(deadline , 1, 10)) <DATE() , 0, 255)")
但是没用。
您缺少要应用它的网格元素,例如列。
thisform.grid1.SetAll("DynamicForeColor", "Iif(Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) > Ttod(Ctot(Stuff(dateend, 11, 1, "T"))) and Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) <DATE(), 0, 255)", "Column")
如果 'deadline' 和 'dateend' 是 table 中的字符类型并且如您所说的 "yyyy-MM-dd HH:mm:ss" 形式,那么 Stuff() 命令将使 "yyyy-MM-ddTHH:mm:ss".
然后可以使用 Ttod() 将该表格转换为日期。
将计算列添加到网格游标所基于的 SELECT 可能会更容易(希望您不会将其直接绑定到 table),即
select ;
deadline, dateend, blah, ;
Iif(Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) > Ttod(Ctot(Stuff(dateend,;
11, 1, "T"))) and Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) <DATE(), 0,;
255) as forecolor ;
from mytable into cursor gridcursor
那么你的网格 ForeColor 就是:
thisform.grid1.SetAll("DynamicForeColor", "forecolor", "Column")
您只需在日期时间字符串值前加上“^”前缀,然后使用 ttod(ctot()) 转换它们。
thisform.grid1.SetAll("DynamicForeColor", ;
"(IIF(ttod(ctot('^'+deadline)) > ttod(ctot('^' + dateEnd)) and ttod(ctot('^'+deadline)) < DATE(), 0, 255))")
您不需要指定第三个参数,因为 DynamicForeColor 只能应用于 Column 和衍生物。
注意:你的表达方式对我来说并没有真正的意义,你应该修改你需要的东西:
Create Cursor SampleData (Id i Autoinc, deadline c(20), dateEnd c(20))
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/29 11:30:00','')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/01 12:00:00','2016/01/30 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/01 12:00:00','2016/02/01 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/01 12:00:00','2016/02/02 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/20 12:00:00','2016/02/19 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/20 12:00:00','2016/02/20 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/20 12:00:00','2016/02/21 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/03/01 12:00:00','2016/02/29 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/03/01 12:00:00','2016/03/01 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/03/01 12:00:00','2016/03/02 12:00:00')
Locate
Public oForm
oForm = Createobject('SampleForm')
oForm.Show()
Define Class SampleForm As Form
Height=600
Width=800
Add Object myGrid As Grid With ;
RecordSource='SampleData', Height=600, Width=800, Anchor = 15
Procedure Init
This.myGrid.SetAll('DynamicForeColor', '(thisform.GetMeColor())')
Endproc
Procedure GetMeColor
Local deadline, dateEnd, lnColor
deadline = Ttod(Ctot('^'+SampleData.deadline))
dateEnd = Ttod(Ctot('^'+SampleData.dateEnd))
Do Case
Case m.deadline > m.dateEnd And m.deadline < Date()
lnColor=0
Case m.dateEnd > Date() And m.dateEnd < Date()+7
lnColor=Rgb(102,205,170)
Otherwise
lnColor=255
EndCase
Return m.lnColor
Endproc
Enddefine
我有一个包含以下列的网格:nrcrt、deadline、dateEnd、content。 deadline 和 dateEnd 列格式为 "yyyy-MM-dd HH:mm:ss" 如果截止日期大于 dateEnd 且小于今天,我想将网格行颜色设置为红色。
thisform.grid1.SetAll("DynamicForeColor", "IIF(CTOD(SUBSTR(deadline , 1, 10)) >CTOD(SUBSTR(dateEnd , 1, 10)) and CTOD(SUBSTR(deadline , 1, 10)) <DATE() , 0, 255)")
但是没用。
您缺少要应用它的网格元素,例如列。
thisform.grid1.SetAll("DynamicForeColor", "Iif(Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) > Ttod(Ctot(Stuff(dateend, 11, 1, "T"))) and Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) <DATE(), 0, 255)", "Column")
如果 'deadline' 和 'dateend' 是 table 中的字符类型并且如您所说的 "yyyy-MM-dd HH:mm:ss" 形式,那么 Stuff() 命令将使 "yyyy-MM-ddTHH:mm:ss".
然后可以使用 Ttod() 将该表格转换为日期。
将计算列添加到网格游标所基于的 SELECT 可能会更容易(希望您不会将其直接绑定到 table),即
select ;
deadline, dateend, blah, ;
Iif(Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) > Ttod(Ctot(Stuff(dateend,;
11, 1, "T"))) and Ttod(Ctot(Stuff(deadline, 11, 1, "T"))) <DATE(), 0,;
255) as forecolor ;
from mytable into cursor gridcursor
那么你的网格 ForeColor 就是:
thisform.grid1.SetAll("DynamicForeColor", "forecolor", "Column")
您只需在日期时间字符串值前加上“^”前缀,然后使用 ttod(ctot()) 转换它们。
thisform.grid1.SetAll("DynamicForeColor", ;
"(IIF(ttod(ctot('^'+deadline)) > ttod(ctot('^' + dateEnd)) and ttod(ctot('^'+deadline)) < DATE(), 0, 255))")
您不需要指定第三个参数,因为 DynamicForeColor 只能应用于 Column 和衍生物。
注意:你的表达方式对我来说并没有真正的意义,你应该修改你需要的东西:
Create Cursor SampleData (Id i Autoinc, deadline c(20), dateEnd c(20))
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/29 11:30:00','')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/01 12:00:00','2016/01/30 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/01 12:00:00','2016/02/01 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/01 12:00:00','2016/02/02 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/20 12:00:00','2016/02/19 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/20 12:00:00','2016/02/20 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/02/20 12:00:00','2016/02/21 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/03/01 12:00:00','2016/02/29 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/03/01 12:00:00','2016/03/01 12:00:00')
Insert Into SampleData (deadline, dateEnd) Values ('2016/03/01 12:00:00','2016/03/02 12:00:00')
Locate
Public oForm
oForm = Createobject('SampleForm')
oForm.Show()
Define Class SampleForm As Form
Height=600
Width=800
Add Object myGrid As Grid With ;
RecordSource='SampleData', Height=600, Width=800, Anchor = 15
Procedure Init
This.myGrid.SetAll('DynamicForeColor', '(thisform.GetMeColor())')
Endproc
Procedure GetMeColor
Local deadline, dateEnd, lnColor
deadline = Ttod(Ctot('^'+SampleData.deadline))
dateEnd = Ttod(Ctot('^'+SampleData.dateEnd))
Do Case
Case m.deadline > m.dateEnd And m.deadline < Date()
lnColor=0
Case m.dateEnd > Date() And m.dateEnd < Date()+7
lnColor=Rgb(102,205,170)
Otherwise
lnColor=255
EndCase
Return m.lnColor
Endproc
Enddefine