以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]甘特图没有自动刷新  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174535)

--  作者:为学日益
--  发布时间:2022/1/20 8:33:00
--  [求助]甘特图没有自动刷新
老师好!
学习单元格生成甘特图,图上可以加上标题的例子:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=74437&skin=0
当修改结束日期时,右侧的图没有跟随变化。狐表自带的示例是可以跟随变化的,照着改也没有改对。
请老师指教。谢谢!

图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编码绘制甘特图-红.table





--  作者:有点蓝
--  发布时间:2022/1/20 9:00:00
--  
使用的用法和帮助不是一回事。

上面使用了合并单元格的用法,更改日期后要需要取消合并单元格,然后重新设置合并

--  作者:为学日益
--  发布时间:2022/1/20 14:39:00
--  
蓝老师:
我按老师提示,把自带示例的代码写在前面,标题文字代码写在后面;然后把窗口afterload中生成文字的代码注释掉。其他没有问题,只是文字只显示在第一个单元格中~     在drawcell中合并单元格怎么写?

drawcell代码:
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("月_","-")
    If dt>dt1 AndAlso dt<dt2 Then
        e.StartDraw()
        If dt < Date.Today Then
            e.Graphics.FillRectangle(Brushes.Green,e.x ,e.y + 5, e.Width, e.Height - 10)
        Else
            e.Graphics.FillRectangle(Brushes.Red,e.x ,e.y + 3, e.Width, e.Height - 7)
        End If
        e.EndDraw()
    End If
    
    If dt = dt1 Then        
        e.StartDraw()
        e.Graphics.FillRectangle(Brushes.Green,e.x ,e.y + 5, e.Width, e.Height - 10)
        Dim fnt As New Font("宋体",9)
        Dim msg As String = r("任务名称")
        e.Graphics.DrawString(msg,fnt,Brushes.yellow,e.x,e.y+9)
        \'Dim rng As C1.Win.C1FlexGrid.CellRange = tb.Grid.GetCellRange(i, sp2.TotalDays+1, i, sp2.TotalDays+1+sp.TotalDays)
        \'tb.Grid.MergedRanges.add(rng)        
        e.EndDraw()
    End If
End If


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2022/1/20 14:57:00
--  
drawcell中没有合并单元格的用法。暂时也没有其它办法
--  作者:为学日益
--  发布时间:2022/1/21 12:29:00
--  
蓝老师好!
如果不去合并单元格,把  r("任务名称") 内容绘制进一个单元格一个字符怎么做?

--  作者:有点蓝
--  发布时间:2022/1/21 13:34:00
--  
比如r("任务名称")有10个字符,计算一下当前单元格所在的日期离开始日期有几天(http://www.foxtable.com/webhelp/topics/0287.htm),就绘制第几个字符,如果超出10天就不绘制
--  作者:为学日益
--  发布时间:2022/1/21 14:21:00
--  
蓝老师,还是需要您出手修改一下,自己完成不了~

。。。
Dim i0 As Integer = Tables("任务").Position   \'左表的当前行

Dim minD As Date = Tables("任务").Compute("min(开始日期)")  \'表中的最早日期
Dim dt1 As Date = e.DataRow("开始日期")
Dim dt2 As Date = e.DataRow("结束日期")
Dim sp As TimeSpan = dt2 - dt1     \'天数(占用单元格数)
Dim sp2 As TimeSpan = dt1 - minD   \'绘制的第一个单元格位置

Dim s0 As Double = sp2.TotalDays+1  \'将变量类型Double的内容转换为Integer,并存放在变量d中
Dim d As Integer
Integer.TryParse(s0, d) 

Dim s As String = e.DataRow("任务名称")
For n As Integer = 0 To s.Length - 1        \'遍历每个字
    \'Tables("窗口1_Table2")(i0 ,d+n) =s.Chars(n)   
    e.Graphics.DrawString(s.Chars(n),fnt,Brushes.yellow,e.x,e.y+9)
Next

--  作者:有点蓝
--  发布时间:2022/1/21 15:16:00
--  
效果一般般
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编码绘制甘特图-红.zip



--  作者:为学日益
--  发布时间:2022/1/21 19:02:00
--  
谢谢!
感觉还不错,就是显得字间距大了一点,但是把字调大了也不好看~


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看


--  作者:为学日益
--  发布时间:2022/2/10 20:19:00
--  
蓝老师好!
这个自定义函数打开窗口时报错,关闭窗口再次打开就不报错,是什么原因?代码完全是按例子写的:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.1.30.2
错误所在事件:自定义函数,SetGanntLeftCol
详细错误信息:
Exception has been thrown by the target of an invocation.
Object reference not set to an instance of an object.

自定义函数  SetGanntLeftCol

 

If Forms("窗口1").Opened()

    Dim t1 As Table = Tables("任务")

    Dim t2 As Table = Tables("窗口1_Table2")

    If t1.TopVisibleRow >=0 Then

        Dim r As Row = t1.Rows(t1.TopVisibleRow)

        If r.IsNull("开始日期") = False Then

            Dim dt As Date = r("开始日期")

            Dim nm As String = dt.Year & "年" & dt.Month &"月_" & dt.Day

            Dim idx As Integer= t2.cols(nm).Index

            t2.LeftVisibleCol = idx

        End If

    End If

End If



此主题相关图片如下:截屏图片.jpg
按此在新窗口浏览图片

[此贴子已经被作者于2022/2/10 20:19:55编辑过]