以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  带条件的背景样式,为什么不对?(完美解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=30859)

--  作者:zerov
--  发布时间:2013/4/5 13:54:00
--  带条件的背景样式,为什么不对?(完美解决)
想实现效果:如下图,几列数据中,当比率小于30%时,背景红色,小于50%时,背景黄色,否则背景无(即白色),首先设立了2种样式(在界面中设置的,俺还不会用代码设置样式),名为:clr,cly,然后在表的DateChanged中写入代码:
Select Case e.Col.Name
    Case
"回款占总应收比率
"
         if e.datarow(
"回款占总应收比率")>0.5 then ‘比率大于50%时无背景颜色
             e.style=isnothing
         elseif e.datarow("回款占总应收比率")>0.3 then ’比率大于30%时背景样式为黄色
             e.style="cly"  ‘比率小于30%时背景样式为红色
         else e.style="clr“
     end if
end if
  Case "回款占总应收比率"
         if e.datarow("确认收入占总应收比率")>0.5 then‘比率大于50%时无背景颜色
             e.style=isnothing
         elseif e.datarow("确认收入占总应收比率")>0.3 then’比率大于30%时背景样式为黄色
             e.style="cly"‘比率小于30%时背景样式为红色
         else e.style="clr“
     end if
end if
End Select
 


此主题相关图片如下:bilu.png
按此在新窗口浏览图片

[此贴子已经被作者于2013-4-6 20:15:49编辑过]

--  作者:FoxMan
--  发布时间:2013/4/5 14:19:00
--  

窗口Table与数据标记

如果窗口Table是Normal型,不管是副本还是非副本,都可以按常规增加自定义样式,然后设置DrawCell事件代码标记数据。

如果窗口Table是SQLTable或SQLQuery,虽然同样可以设置DrawCell事件代码,但是却无法通过菜单增加自定义样式,只能通过AddUserStyle方法用代码增加自定义样式。

示例

假定窗口有个Table控件,类型SQLTable,希望用红底白字在数量列标出值超过500的单元格。

设计步骤

1、在窗口的AfterLoad事件中加入代码:

DataTables("窗口1_Table1").AddUserStyle("a", Color.Red, Color.White)

上述代码增加了一个红底白字的样式,样式名为"a"。


2、然后设置Table控件的DrawCell事件代码:

If e.Col.Name = "数量" Then
    If e.Row("数量") >=200 Then
       e.Style = "a"
    End
If

End
If


--  作者:zerov
--  发布时间:2013/4/5 14:23:00
--  回复:(FoxMan)窗口Table与数据标记如果窗口Table是...
 我也在帮助中看到了这段,可是,我这个表不是在窗口中,是直接的一个数据表,如何弄?
--  作者:FoxMan
--  发布时间:2013/4/5 14:45:00
--  
if e.Col.Name = "回款占总应收比率" then 
         if e.datarow("回款占总应收比率") <  0.3 Orelse e.datarow("确认收入占总应收比率") < 0.3 then 
              e.style="cly"   ‘比率< 30%时背景样式为红色        
         elseif e.datarow("回款占总应收比率") < 0.5 Orelse e.datarow("确认收入占总应收比率") < 0.5 Then 
               e.style="clr“    ’比率 < 30%时背景样式为黄色
        end if
End if


--  作者:zerov
--  发布时间:2013/4/5 15:12:00
--  回复:(FoxMan)if e.Col.Name = "回款占总应收比率"...
谢谢,完美解决。

不过感觉代码有点多,能不能精简使得运行更快点呢?

If e.col.Name = "回款占总应收比率" Then
    If e.Row.IsNull("回款占总应收比率") = False  
        If e.Row("回款占总应收比率") < 0.3  Then
            e.Style = "clr"
                ElseIf e.Row("回款占总应收比率") < 0.5  Then
                    e.style ="cly"
                        ElseIf e.Row("回款占总应收比率") < 0.7  Then
                            e.style ="clb"
                            End If
                    End If
               End If

If e.col.Name = "回款占应收比率"  Then
    If e.Row.IsNull("回款占应收比率")=False  
        If e.Row("回款占应收比率")  < 0.3 Then
            e.Style = "clr"
                ElseIf e.Row("回款占应收比率") < 0.5 Then
                    e.style ="cly"
                        ElseIf e.Row("回款占应收比率") < 0.7 Then
                            e.style ="clb"
                            Else e.style =""
                            End If
                    End If
               End If
[此贴子已经被作者于2013-4-6 20:38:36编辑过]

--  作者:zerov
--  发布时间:2013/4/7 9:24:00
--  
这句如何精简?
--  作者:Bin
--  发布时间:2013/4/7 9:49:00
--  
以下是引用zerov在2013-4-7 9:24:00的发言:
这句如何精简?

代码的效率与否 不是看代码是否精简. 有时候复杂冗长的代码效率比简短的代码高效得多.你在大数据量的环境下测试一下.如果感觉速度可以.就没必要再折腾了.
--  作者:blackzhu
--  发布时间:2013/4/7 9:54:00
--  
说的好 ,现在的电脑 速度都很好,所以 只要执行了结果正确,也就尽量不要去纠结了.
--  作者:zerov
--  发布时间:2013/4/7 12:21:00
--  回复:(blackzhu)说的好 ,现在的电脑 速度都很好,所...
OK,谢谢各位大师们,明白了