как вычесть и сравнить значение из нескольких наборов данных?

#vb.net #datagridview

#vb.net #datagridview

Вопрос:

сравните значения 2 datagridviews, и значения будут datetime.

ШАГ 1

Я использовал оператор if для сопоставления значения в column(ID) и column (daterange), если оно правильное, я перенесу их в новый столбец. [Я получаю правильный результат]

но когда

ШАГ 2

Я пытаюсь добавить дополнительные условия для сравнения столбцов (время) [все мои ожидаемые результаты неверны («Нет ввода»)]

Кто-нибудь может мне помочь или поделиться мнением по этому поводу?

 Dim storageEarlyin As String
Dim storagelatein As String
'Dim storatimetemp As DateTime = "12:00:00 PM"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim count As Integer = DataGridView1.Rows.Count

    For i = 0 To (count - 1)
        Dim clockeddate As String = Convert.ToDateTime(DataGridView1.Rows(i).Cells(1).Value).ToShortDateString
        Dim userid As String = DataGridView1.Rows(i).Cells(0).Value.ToString()
        Dim count2 As Integer = DataGridView2.Rows.Count
        Dim clockedtime As String = Convert.ToDateTime(DataGridView1.Rows(i).Cells(1).Value).ToShortTimeString

        For i2 = 0 To (count2 - 1)

            Dim daterange As String = Convert.ToDateTime(DataGridView2.Rows(i2).Cells(1).Value).ToShortDateString
            Dim userid2 As String = DataGridView2.Rows(i2).Cells(0).Value.ToString()
            Dim workstart As String = Convert.ToDateTime(DataGridView2.Rows(i2).Cells(5).Value).ToShortTimeString
            Dim ClockAvailableStart As String = Convert.ToDateTime(DataGridView2.Rows(i2).Cells(3).Value).ToShortTimeString
            Dim workend As String = Convert.ToDateTime(DataGridView2.Rows(i2).Cells(6).Value).ToShortTimeString

            If userid = userid2 And clockeddate = daterange Then
                If clockedtime <= workstart And clockedtime >= ClockAvailableStart Then
                    storageEarlyin = DataGridView1.Rows(i).Cells(1).Value.ToShortTimeString
                    Me.DataGridView2.Rows(i2).Cells(7).Value = storageEarlyin
                Else
                    storageEarlyin = "No-in"
                    Me.DataGridView2.Rows(i2).Cells(7).Value = storageEarlyin
                End If

                If clockedtime > workstart And clockedtime < workend Then
                    storagelatein = DataGridView1.Rows(i).Cells(1).Value.ToShortTimeString
                    Me.DataGridView2.Rows(i2).Cells(8).Value = storagelatein
                Else
                    storagelatein = "No-in"
                    Me.DataGridView2.Rows(i2).Cells(8).Value = storagelatein
                End If
            End If
        Next
    Next
End Sub
  

введите описание изображения здесь

Комментарии:

1. показать пример ввода и вывода?

Ответ №1:

Вы создаете переменную clockedtime ,workstart ClockAvailableStar t string типа, поэтому условие if ( clockedtime <= workstart And clockedtime >= ClockAvailableStart ) не работает должным образом, поэтому измените тип данных на datetime, например

  Dim clockedtime As DateTime= 
 Convert.ToDateTime(DataGridView1.Rows(i).Cells(1).Value).ToShortTimeString

 Dim workstart As DateTime= 
 Convert.ToDateTime(DataGridView2.Rows(i2).Cells(5).Value).ToShortTimeString

 Dim ClockAvailableStart As DateTime= 
 Convert.ToDateTime(DataGridView2.Rows(i2).Cells(3).Value).ToShortTimeString
  

После этого он работает правильно

Комментарии:

1. я должен немного отредактировать свой вопрос, спасибо, сэр, я попробую это сейчас!

2. В качестве исправления, которое вы опубликовали, я попытался посмотреть, в основном, правильно! но я должен включать все временные рамки, только точно знать правильные результаты или нет!! в любом случае, сначала спасибо!! SATSON

3. all the time frame only означает, что я не могу четко понять. после изменения типа данных он не работает, а?

4. просто работает, найди человека! временные рамки означают, что у меня все еще есть время (ы) отдыха, окончания работы, раннего завершения, задержки и окончания времени.