#vb.net
#vb.net
Вопрос:
Мне действительно нужна помощь, я сохраняю запись в поле Product_Date
как тип Text
в моем доступе к таблице. Иногда я сохраняю запись даты Product_Date
только в год, например, так (2007) Или (1995) Или (2019)… С помощью моего кода я попытался сделать так, чтобы дата, когда я нажимаю dataGridView1, отображалась в текстовом поле 3 следующим образом: 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
Комментарии:
1. Мое предложение: переосмыслите свою структуру данных и используйте формат даты / времени для дат. Если вы хотите представить только год, вы можете сделать это, используя годовую часть даты. Если вам
Year
по какой-то причине нужна просто ссылка, добавьте поле, в котором хранится только год (подойдет числовое значение). Но вам это не нужно. SQL в любом случае позволяет фильтровать год из поля даты и времени. В любом случае, если вам нужно хранить даты, используйте соответствующий тип данных, а затем представьте дату в предпочтительном формате пользовательского интерфейса.2. Большое вам спасибо, Джими.как можно получить и сохранить только год в поле access: DateTime
3.
Dim myDate As Date = New Date(2019, 1, 1) =>
сохраните дату. Когда вы прочитаете его обратно, это зависит от того, из чего вы его прочитали. Предполагая, что вы считываете поле непосредственно из таблицы данных, а поле даты / времени находится вColumn(0)
:Dim myYear As Integer = DirectCast(myTable.Rows(0)(0), Date).Year
Ответ №1:
Что вы можете попробовать, так это взять эту строку, прочитанную из базы данных, и преобразовать ее в DateTime
объект, таким образом, вы можете отформатировать ее так, как хотите, как дату. Чтобы сделать это, используя только год, вы можете использовать этот DateTime.ParseExact
метод. Вот небольшой пример. Я отредактировал его, чтобы включить случаи, когда строка — это не просто год. Вероятно, есть более приятный способ сделать это (попробовать внутри 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 для datetime перегружен, поэтому, если вы используете oDate.ToString("dd-MM-yyyy")
его, он будет печатать:
01-01-2007
Я использовал эту страницу в качестве ссылки.
Примечание: Это можно сделать точно так же с Date
объектом вместо a DateTime
, поскольку они используют одни и те же методы.
Это не оптимальный способ хранения / использования дат, когда это возможно, вы должны использовать фактические типы данных даты вместо текста в вашей базе данных. Если еще не слишком поздно, я бы предложил переосмыслить ваши столбцы, но если на данный момент это выходит из-под вашего контроля, можно использовать обходные методы, подобные этим.
Комментарии:
1. Спасибо тебе, Патрик. как сделать эту часть кода (dim idate как string =»2007″ .. в моем коде.
2. Когда вы получаете значение из product_date , оно уже является строкой, поэтому вы хотели бы использовать это значение вместо строки в моем примере. Вы также захотите сделать это только в том случае, если первое преобразование завершится неудачей.
3. Спасибо вам за помощь. когда я вернусь домой, я обязательно попробую это сделать.
4. Большое вам спасибо , Патрик … все решено … очень мило с вашей стороны … Сердечно .. САБРИНА