2014-11-13 7 views
0

У меня есть 1 DataGridView с 3-мя колоннамиСтрока не была признана

  1. Column1 = StartLoading
  2. Столбец2 = FinishLoading
  3. Column3 = TotalLoadingHours

Если пользователь ввел дату и время Столбцы StartLoading и FinishLoading, общее количество часов от начала до конца будет отображаться в TotalLoadingHours Column.

Моя проблема: если пользователь ввел дату и время ТОЛЬКО в столбец StartLoading, всегда появляется ошибка: «String не была признана допустимым DateTime».

Цените свою помощь. Ниже мой код.

Dim StartLoading As New System.DateTime 
Dim FinishLoading As New System.DateTime 

    For x As Integer = 0 To LoadingStatusDataGridview.Rows.Count - 2 

     Dim StartLoadingvalue As String = LoadingStatusDataGridview.Rows(x).Cells(1).Value.ToString() 
     StartLoading = DateTime.Parse(StartLoadingvalue) 

     Dim FinishLoadingvalue As String = LoadingStatusDataGridview.Rows(x).Cells(2).Value.ToString() 
     FinishLoading = DateTime.Parse(FinishLoadingvalue) 

     Dim TotalLoadingHours1 As TimeSpan = (FinishLoading - StartLoading) 

     String.Format("{0:00}:{1:00}:{2:00}", TotalLoadingHours1.TotalHours, TotalLoadingHours1.Minutes, TotalLoadingHours1.Seconds) 

     Dim TotalLoadingHours2 As TimeSpan = (DateTime.Now - StartLoading) 

     String.Format("{0:00}:{1:00}:{2:00}", TotalLoadingHours2.TotalHours, TotalLoadingHours2.Minutes, TotalLoadingHours2.Seconds) 

     If IsDBNull(LoadingStatusDataGridview.Rows(x).Cells(1).Value()) OrElse LoadingStatusDataGridview.Rows(x).Cells(1).Value() Is Nothing Then 
      LoadingStatusDataGridview.Rows(x).Cells(3).Value() = Nothing 

     ElseIf IsDBNull(LoadingStatusDataGridview.Rows(x).Cells(2).Value()) OrElse LoadingStatusDataGridview.Rows(x).Cells(2).Value() Is Nothing Then 
      LoadingStatusDataGridview.Rows(x).Cells(3).Value() = TotalLoadingHours2 
     Else 
      LoadingStatusDataGridview.Rows(x).Cells(3).Value() = TotalLoadingHours1 
     End If 

    Next 

End Sub 
+1

Вы можете использовать 'Date.TryParse' для проверки перед запуском кода. – OneFineDay

+0

Возможный дубликат [Строка не была признана допустимым дата-временем] (http://stackoverflow.com/questions/784638/the-string-was-not-recognized-as-a-valid-datetime) – TylerH

+1

Рассмотрите возможность использования DateTimePicker control – NoChance

ответ

0

его рабочих сейчас, используя ниже код ..

Dim startloading As New System.DateTime 
    Dim finishloading As New System.DateTime 

    For x As Integer = 0 To LoadingStatusDataGridview.Rows.Count - 2 

     Dim startloadingvalue As String = LoadingStatusDataGridview.Rows(x).Cells(1).Value.ToString() 

     If Not IsDBNull(LoadingStatusDataGridview.Rows(x).Cells(1).Value) AndAlso LoadingStatusDataGridview.Rows(x).Cells(1).Value.ToString.Length <> 0 Then 
      startloading = DateTime.Parse(startloadingvalue) 
     End If 

     Dim finishloadingvalue As String = LoadingStatusDataGridview.Rows(x).Cells(2).Value.ToString() 

     If Not IsDBNull(LoadingStatusDataGridview.Rows(x).Cells(2).Value) AndAlso LoadingStatusDataGridview.Rows(x).Cells(2).Value.ToString.Length <> 0 Then 
      finishloading = DateTime.Parse(finishloadingvalue) 
     End If 

     If IsDBNull(LoadingStatusDataGridview.Rows(x).Cells(1).Value()) OrElse LoadingStatusDataGridview.Rows(x).Cells(1).Value() Is Nothing OrElse LoadingStatusDataGridview.Rows(x).Cells(1).Value.ToString.Trim() = "" Then 
      LoadingStatusDataGridview.Rows(x).Cells(3).Value() = Nothing 
     End If 

     If IsDBNull(LoadingStatusDataGridview.Rows(x).Cells(2).Value()) OrElse LoadingStatusDataGridview.Rows(x).Cells(2).Value() Is Nothing OrElse LoadingStatusDataGridview.Rows(x).Cells(2).Value.ToString.Trim() = "" Then 
      Dim LoadingHours2 As TimeSpan = (DateTime.Now - startloading) 

      String.Format("{0:00}:{1:00}:{2:00}", LoadingHours2.TotalHours, LoadingHours2.Minutes, LoadingHours2.Seconds) 

      LoadingStatusDataGridview.Rows(x).Cells(3).Value() = LoadingHours2 
     Else 
      Dim LoadingHours1 As TimeSpan = (finishloading - startloading) 

      String.Format("{0:00}:{1:00}:{2:00}", LoadingHours1.TotalHours, LoadingHours1.Minutes, LoadingHours1.Seconds) 

      LoadingStatusDataGridview.Rows(x).Cells(3).Value() = LoadingHours1 
     End If 

    Next 
0

Try форматировать Вам клетки и не вычислить результат, если FinishLoading или StartLoading пустуют:

dataGridView1.Columns(0).DefaultCellStyle.Format = "MM/dd/yyyy" 
dataGridView1.Columns(1).DefaultCellStyle.Format = "MM/dd/yyyy" 
+0

Спасибо за ваше предложение, но все еще не работает должным образом. Такая же ошибка: «String не был признан допустимым DateTime», когда я оставляю столбец FinishLoading пустым. –

Смежные вопросы