none
有關MDI的問題 RRS feed

  • 問題

  • 目前遇到的問題是目樣的表單程式,直接執行表單的話,顯示上不會有問題,但若把此顯示的表單,設定為其他的子表單,然後透過主表單來呼叫的話,則會有顯示上的問題,必須在重新整理一次才會出現我要的東西…以下是我的程式碼…

    我主要是想要把每一次的資料時間來和現在時間比對,看此資料是否執行完畢,是的話就把欄位值ConditionState寫入適當的值…
    但問題就是上面所述描的,若此表單設定為別的表單的子表單的話,則在第一次顯示的話,則不會出現我在ConState()方法所寫的動作…
    不知道否也有人遇過此問題??
    感謝回答…急需!!


    Public Class Condition
    Private Sub Produce_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Try
        ''Me.ConditionTableAdapter.ClearBeforeFill = True
        ''Me.ConditionTableAdapter.Fill(Me.FixedDataSet.Condition)
        Me.ConditionTableAdapter.ClearBeforeFill = True
        Me.ConditionTableAdapter.Fill(Me.FixedDataSet.Condition)
        ConState()
        Me.DGVProduce.Sort(Me.DGVProduce.Columns("ExpectStartTime"), System.ComponentModel.ListSortDirection.Ascending)
        MsgBox(Me.DGVProduce.Rows(0).Cells("ConditionState").Value.ToString = "")

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    End Sub

    '填寫生產狀態欄位值
    Private Sub ConState()
        For iCursor As Integer = 0 To Me.DGVProduce.RowCount - 1

            Dim CRows As DataRow() = Me.FixedDataSet.Condition.Select("ConditionID='" & Me.DGVProduce.Rows.Item(iCursor).Cells("ConditionID").Value & "'")
            Dim StartTime As Date = CType(CRows(CRows.Length - 1).Item("ExpectStartTime").ToString, Date)
            Dim EndTime As Date = CType(CRows(CRows.Length - 1).Item("ExpectEndTime").ToString, Date)

            If Now() > EndTime Then
                Me.DGVProduce.Rows.Item(iCursor).Cells("ConditionState").Value = "完成作業"
            Else
                If Now() > StartTime Then
                    Me.DGVProduce.Rows.Item(iCursor).Cells("ConditionState").Value = "執行作業"
                Else
                    Me.DGVProduce.Rows.Item(iCursor).Cells("ConditionState").Value = "等待作業"
                End If

            End If
        Next
    End Sub
    End Class
    2009年2月10日 上午 04:06

解答

所有回覆

  • 建議你用除錯模式追蹤。

    你這邊用了 try ,有可能發生錯誤導致跳出,造成後面的程式碼沒執行。

    2009年2月10日 上午 06:37
  • 我後來發現是因為那個排序的程式碼導致第一次會無法顯示出來,若把排序的程式碼放在ConState()前的話,那麼顯示就會正常了…
    不過有人知道為什麼會這樣子嗎…排序的方法是這樣子沒錯…是我觀念那裡有問題嗎?
    2009年2月13日 上午 05:20
  • 你可以試試在 ConState 第一行加入:
    Dim p As IntPtr = Me.DGVProduce.Handle

    註:這裡假設 DGVProduce 是你 Form 上的控制項

    原因跟查找方式,你可以看看下面那篇: 
    http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!2128.entry
    2009年2月13日 上午 07:46