以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  在单元格绘制甘特图(增加进度条)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80173)

--  作者:一笑
--  发布时间:2016/1/18 8:47:00
--  在单元格绘制甘特图(增加进度条)
按照帮助文件http://www.foxtable.com/help/index.html?n=0395.htm#userconsent#(在单元格绘制甘特图)任务表中增加了“进度”列(整数),想在单元格中画出进度颜色(gold),代码如下,有个问题,当进度为100时,表现正确,但小于100时,则进度条比例不正确,求解,谢谢

If DrawGannt Then
    Dim r As Row  = Tables("任务").Rows(e.Row.Index)
    Dim dt1 As Date = r("启动日期")
    Dim dt2 As Date = r("完成时间")
    Dim dt As Date = e.Col.Name.Replace("年","-").Replace("月_","-")
    
    Dim t2 As Table = e.Table
    Dim nm As String = dt2.Year & "年" & dt.Month &"月_" & dt.Day
    Dim idx As Integer= t2.cols(nm).Index
    Dim idx1 As Integer= idx * r("进度")\\100    
    If dt>=dt1 AndAlso dt<=dt2 Then
        e.StartDraw()
        If dt < Date.Today Then
            e.Graphics.FillRectangle(Brushes.springGreen,e.x ,e.y + 5, e.Width, e.Height - 10)
        Else
            e.Graphics.FillRectangle(Brushes.lightskyblue,e.x ,e.y + 3, e.Width, e.Height - 10)
        End If
        If dt>=dt1 AndAlso dt <= t2.cols(idx1).Name.Replace("年","-").Replace("月_","-") Then
            e.Graphics.FillRectangle(Brushes.gold,e.x ,e.y + 2, e.Width, e.Height - 10)
        End If
        e.EndDraw()
    End If
End If



--  作者:Hyphen
--  发布时间:2016/1/18 8:51:00
--  
上传完整例子测试
--  作者:大红袍
--  发布时间:2016/1/18 9:10:00
--  
汗,人家的例子,是根据日期时间绘制的,跟你的进度一点关系都没有。
--  作者:大红袍
--  发布时间:2016/1/18 9:13:00
--  

具体怎么显示不对,上传实例测试。


--  作者:一笑
--  发布时间:2016/1/18 20:47:00
--  
先自己试试再上传,问一个其他问题:
当鼠标放在甘特图上时,想用ShowToolTip显示左边“任务”表中“任务内名称”单元格的内容,谢谢

--  作者:大红袍
--  发布时间:2016/1/18 20:57:00
--  

试试

 

If DrawGannt Then
    Dim r As Row  = Tables("任务").Rows(e.Row.Index)
    Dim dt1 As Date = r("启动日期")
    Dim dt2 As Date = r("完成时间")
    Dim dt As Date = e.Col.Name.Replace("年","-").Replace("月_","-")
   
    Dim t2 As Table = e.Table
    Dim nm As String = dt2.Year & "年" & dt.Month &"月_" & dt.Day
    Dim idx As Integer= t2.cols(nm).Index
    Dim sp As TimeSpan = dt2 - dt1
    Dim idx1 As Integer = r("进度")/100 * sp.TotalDays
    Dim dt3 As Date = dt1.AddDays(idx1)

    If dt>=dt1 AndAlso dt<=dt2 Then
        e.StartDraw()
        If dt < Date.Today Then
            e.Graphics.FillRectangle(Brushes.springGreen,e.x ,e.y + 5, e.Width, e.Height - 10)
        Else
            e.Graphics.FillRectangle(Brushes.lightskyblue,e.x ,e.y + 3, e.Width, e.Height - 10)
        End If
        If dt>=dt1 AndAlso dt <= dt3 Then
            e.Graphics.FillRectangle(Brushes.gold,e.x ,e.y + 2, e.Width, e.Height - 10)
        End If
        e.EndDraw()
    End If
End If


--  作者:一笑
--  发布时间:2016/1/20 14:01:00
--  
进度条问题已解决,用我最初的方案就可以(原来是日期字符错了)。
另一个问题,求解:
当鼠标放在甘特图上时,想用ShowToolTip显示左边“任务”表中“任务内名称”单元格的内容,谢谢

--  作者:大红袍
--  发布时间:2016/1/20 14:14:00
--  

Dim r As Row  = Tables("任务").Rows(e.Row.Index)

e.Table.ShowToolTip(r("任务名称"),e.Row,e.Col)

 

http://www.foxtable.com/help/topics/2681.htm