• <menu id="w2i4a"></menu>
  • logo VARCHART XGantt 2019教程

    文檔首頁>>VARCHART XGantt 2019教程>>VARCHART XGantt_v5.1用戶手冊(cè):如何計(jì)算活動(dòng)結(jié)束日期(.NET版)

    VARCHART XGantt_v5.1用戶手冊(cè):如何計(jì)算活動(dòng)結(jié)束日期(.NET版)


    VARCHART XGantt是一個(gè)交互式的甘特圖控件,其模塊化的設(shè)計(jì)讓您可以創(chuàng)建滿足您和您的客戶所需求的應(yīng)用程序。(我們領(lǐng)先的甘特圖控件VARCHART XGantt可用于.NET,ActiveX和ASP.NET應(yīng)用程序。)除此之外,同時(shí)還具有一個(gè)穩(wěn)定可靠的甘特圖工具,在編寫第一行代碼之前,您就可以知道是否可以滿足客戶的需求。

    點(diǎn)擊下載VARCHART XGantt免費(fèi)版

    本文主要介紹如何通過VARCHART XGantt計(jì)算活動(dòng)結(jié)束日期(.NET版),想要嘗試一下的朋友們可以按照教程內(nèi)容操作哦~

    保存結(jié)束日期的表列仍為空。可以使用VARCHART XGantt中包含的日歷從“開始”和“持續(xù)時(shí)間”字段計(jì)算活動(dòng)的結(jié)束。

    在默認(rèn)日歷中,工作日(周一至周五)預(yù)先定義為活動(dòng)時(shí)間,周末(周六和周日)定義為非活動(dòng)時(shí)間。

    您可以通過灰色背景識(shí)別圖中的非活動(dòng)時(shí)間。可以通過在“節(jié)點(diǎn)”屬性頁面上停用“使用日歷”選項(xiàng)節(jié)點(diǎn)來關(guān)閉日歷。

    請(qǐng)注意使用時(shí)和不使用日歷時(shí)的計(jì)算差異:

    活動(dòng)從周五開始并持續(xù)3天,如果日歷被激活,活動(dòng)將在星期二結(jié)束。沒有日歷,活動(dòng)將在周日結(jié)束。

    可以使用對(duì)象VcCalendar的AddDuration(...)方法計(jì)算結(jié)束日期。這需要每個(gè)活動(dòng)的開始和持續(xù)時(shí)間。可以通過索引訪問這些字段。在通過方法set_DataField(...)設(shè)置結(jié)束日期之后,需要調(diào)用VcNode的Update()方法來顯示修改。

    示例代碼VB.NET

    Dim tmpCal As VcCalendar
    Dim tmpDate As Date
    Set tmpCal = VcGantt1.CalendarCollection.Active
    tmpDate = tmpCalendar.AddDuration(node.DataField(2), node.DataField(4))
    node.DataField(3) = tmpDate
    node.Update()

    示例代碼C#

    VcCalendar tmpCal = vcGantt1.CalendarCollection.Active;
    DateTime tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(2),
     Convert.ToInt32(node.get_DataField(4)));
    node.set_DataField(3, tmpDate);
    node.Update();

    通過鼠標(biāo)交互創(chuàng)建或修改的活動(dòng)的開始和結(jié)束日期將自動(dòng)置于活動(dòng)時(shí)間。

    QQ截圖20190827150354.png

    相反,API或編輯對(duì)話框設(shè)置的日期可以放置在非工作時(shí)間。

    QQ截圖20190827150411.png

    通過計(jì)算生成的日期始終處于工作時(shí)間。

    為了確保API設(shè)置的日期處于工作時(shí)間,需要從結(jié)束日期和活動(dòng)持續(xù)時(shí)間計(jì)算開始日期。

    示例代碼VB.NET

    tmpDate = tmpCal.AddDuration(node.DataField(3),
     (-1) * node.DataField(4))
    node.DataField(2) = tmpDate

    示例代碼C#

    tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(3),(-1) *
    Convert.ToInt32(node.get_DataField(4)));
    node.set_DataField(2, tmpDate);

    為了保持?jǐn)?shù)據(jù)的一致性,丟失或負(fù)的持續(xù)時(shí)間應(yīng)視為不正確,并重置為0。如果缺少開始日期,則無法計(jì)算結(jié)束日期。代碼在名為SetNodeEndDate(...)的單獨(dú)方法中恢復(fù)。

    示例代碼VB.NET

    Private Sub SetNodeEndDate(ByVal node As VcNode)
     'Avoid empty duration or negative duration
     If node.DataField(4) = "" Or node.DataField(4) < 0 Then
     node.DataField(4) = "0"
     End If
     'Start date empty then end date should also be empty
     If node.DataField(2) = "31.12.1899 00:00:00" Then
     node.DataField(3) = ""
     Else
     'Precondition is property page nodes
     '"Assign calendar to nodes" must be true
     Dim tmpCal As VcCalendar
     tmpCal = VcGantt1.CalendarCollection.Active
     Dim tmpDate As DateTime
     tmpDate = tmpCal.AddDuration(node.DataField(2), node.DataField(4))
     node.DataField(3) = tmpDate
     'Start date only in active times 
    tmpDate = tmpCal.AddDuration(node.DataField(3),
     (-1) * node.DataField(4))
     node.DataField(2) = tmpDate
     node.Update()
     End If
    End Sub

    示例代碼C#

    private void SetNodeEndDate(VcNode node)
     {
     // Avoid empty duration or negative duration
     if ((string) node.get_DataField(4) == "" ||
     Convert.ToInt32(node.get_DataField(4)) < 0)
     node.set_DataField(4,"0");
    
     // Start Date empty then end date should also be empty
     if (node.get_DataField(2).ToString() == "31.12.1899 00:00:00")
     node.set_DataField(3,"");
     else
     {
     // Precondition in property page nodes
     // "Assign calendar to nodes" must be true
     VcCalendar tmpCal = vcGantt1.CalendarCollection.Active;
    
     DateTime tmpDate = tmpCal.AddDuration(
     (DateTime)node.get_DataField(2),
     Convert.ToInt32(node.get_DataField(4)));
     node.set_DataField(3, tmpDate);
    
     // start date only in active times
     tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(3),
     (-1) * Convert.ToInt32(node.get_DataField(4)));
     node.set_DataField(2, tmpDate);
     node.Update();
     }
     }

    需要計(jì)算日期:

    1、活動(dòng)結(jié)束后

    2、通過數(shù)據(jù)編輯對(duì)話框或就地編輯器修改日期或持續(xù)時(shí)間之后

    3、API修改活動(dòng)值后

    然而,在通過鼠標(biāo)交互進(jìn)行修改之后,不需要啟動(dòng)計(jì)算,因?yàn)樵谶@種情況下,將自動(dòng)執(zhí)行內(nèi)部計(jì)算。

    可以通過VcGantt對(duì)象的屬性NodeCollection來設(shè)置包括所有節(jié)點(diǎn)的計(jì)算循環(huán)。它的代碼將被添加到事件Form1_Load(...)的末尾。

    示例代碼VB.NET

    'Calculate end date for all nodes
    Dim node As VcNode
    For Each node In VcGantt1.NodeCollection
     SetNodeEndDate node
    Next

    示例代碼C#

    // Calculate end date for all nodes
    foreach (VcNode node in vcGantt1.NodeCollection)
     {
     SetNodeEndDate(node);
     }

    VcNodeModified事件可以拾取用戶引起的數(shù)據(jù)更改。添加的方法調(diào)用將計(jì)算結(jié)束日期。

    示例代碼VB.NET

    Private Sub VcGantt1_VcNodeModified(ByVal sender As Object, ByVal e As
    NETRONIC.XGantt.VcNodeModifiedEventArgs) Handles VcGantt1.VcNodeModified
     SetNodeEndDate(e.Node)
    End Sub

    示例代碼C#

    private void vcGantt1_VcNodeModified(object sender,
    NETRONIC.XGantt.VcNodeModifiedEventArgs e)
     {
     SetNodeEndDate(e.Node);
     }

    如果API更改了數(shù)據(jù)值,則必須顯式調(diào)用方法SetNodeEndDate(...)

    QQ截圖20190827150421.png


    想要購買VARCHART XGantt正版授權(quán),或了解更多產(chǎn)品信息請(qǐng)點(diǎn)擊“咨詢?cè)诰€客服”

    掃描關(guān)注慧聚IT微信公眾號(hào),及時(shí)獲取最新動(dòng)態(tài)及最新資訊

    1563778777.jpg


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();