我真的需要帮助
我在表访问中将记录保存为字段Product_Date
,类型为Text
。
有时我只保存日期Product_Date
的记录,例如年份(2007)或(1995)或(2019)。
使用我的代码,我试图使单击DataGridView1的日期显示在TextBox3中,如下所示:dd-MM-yyyy
。它工作得很好,但是当我只用一年注册到行时就出现了问题
我将收到此错误消息:
Convertion from string "2007" to type "date" is not valid
如何避免此错误消息? 我的代码:
Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click
Try
With DataGridView1.CurrentRow
TextBox1.Text = .Cells("Product_Id").Value.ToString()
TextBox2.Text = .Cells("Product_Nom").Value.ToString()
TextBox3.Text = .Cells("Product_Date").Value.ToString()
TextBox3.Text = Format(CDate(Convert.ToString(TextBox3.Text)), "dd-MM-yyyy")
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
答案 0 :(得分:1)
您可能想尝试的是从数据库中读取此字符串并将其转换为DateTime
对象,这样您就可以将其格式化为日期。要仅用一年的时间执行此操作,就可以使用DateTime.ParseExact
方法。这是一个小例子。我对其进行了编辑,以包括字符串不只是一年的情况。可能有一种更好的方法(在Try中尝试Try并不是最好的选择),但我将由您自己决定。
Sub Main()
Dim Dates() As String = {"2007", "2-29-2008", "5/29/2006"}
Dim oDate As DateTime
For i As Integer = 0 To 2
'Try to parse as formatted date
Try
oDate = DateTime.Parse(Dates(i))
Catch castEx As FormatException
'Could not format normally, try treating as solely a year
Try
oDate = DateTime.ParseExact(Dates(i), "yyyy", Nothing)
Catch ex As Exception
Console.WriteLine(ex.Message)
Continue For
End Try
End Try
'Print converted date
Console.WriteLine(oDate.ToString())
Next
Console.ReadLine()
End Sub
此处yyyy
指定它仅读取一年值。
输出:
01/01/2007 12:00:00 AM
但是请记住,日期时间的ToString方法已重载,因此,如果使用oDate.ToString("dd-MM-yyyy")
,它将打印:
01-01-2007
我以this page作为参考。
注意:这可以通过Date
对象而不是DateTime
来实现,因为它们共享相同的方法。
这不是存储/使用日期的最佳方法,在可能的情况下,应该使用实际的日期数据类型而不是数据库中的文本。如果还不算太晚,我建议您重新考虑一下您的专栏,但是,如果这时您无法控制,则可以采用此类解决方法。