2015-09-22 102 views
0

我在數據綁定datagridview中有一列,其數據類型爲datetime,該數據只顯示時間。如果用戶輸入時間,則單元格的日期和時間將在.CellValueChanged事件中設置,並且日期來自另一列。 如果用戶以正確的格式輸入時間,它會按預期工作。Datagridview Dataerror在日期時間列中未捕獲用戶輸入

所以如果用戶輸入「8:00」,這會被正確解析爲一個時間。日期和時間已更新,單元格顯示「8:00」

如果用戶輸入8,則會觸發事件dataerror

我想獲取用戶輸入並將其轉換爲時間。但是在下面的示例中,變量numberinputNULL,而不是用戶輸入的內容。

我可以捕獲用戶輸入的內容嗎?

Private Sub DataGridView1_DataError(sender As Object, e As DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError 
    'handle incorrect date formats 

    e.ThrowException = False 

    Dim numberinput As Single 
    numberinput = Val(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) 
    Select Case True 
     Case Val(numberinput) = 0 
      DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = DBNull.Value 
     Case numberinput = Int(numberinput) 
      DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = RelevantDate.AddHours(numberinput) 
    End Select 

    e.Cancel = False 
End Sub 
+0

谷歌如何覆蓋DGV列。您需要爲您的網格創建自定義列,以便在提交給數據源之前可以接受任何數據並對其進行解析。這就是所有你需要做的就是重寫數據輸入文本框的解析到任何你喜歡使用'timespan'的例子,例如 –

回答

0

我想我是找錯了樹看着.DataError

這工作:

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating 
    If DataGridView1.CurrentRow.Cells(e.ColumnIndex).IsInEditMode Then 

     Dim c As Control = DataGridView1.EditingControl 

     If DataGridView1.Columns(e.ColumnIndex).ValueType = Type.GetType("System.DateTime") Then 
      c.Text = CleanInputDate(c.Text) 
     End If 
    End If 

End Sub 

解禁幾乎直接從這樣一個問題: How to restrict user input to a couple values in a DataGridView

相關問題