Если пользователь выбирает дату в DateTimePicker, он выбирает только дату, что мне и нужно. Однако, если пользователь не выбирает какую-либо дату и оставляет DateTimePicker в качестве текущей даты, он показывает дату и время. Данные хранятся в базе данных Access. Я хочу сохранить дату только в хранилище Access, когда пользователь оставляет DateTimePicker на сегодняшнюю дату (без изменения даты).
Me.DateTimePicker1.CustomFormat = "dd-MM-yyyy"
Me.DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Value", Me.OrderdetailsBindingSource, "OrderDate", True))
Me.DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.OrderdetailsBindingSource, "OrderDate", True))
Me.DateTimePicker1.Font = New System.Drawing.Font("Tahoma", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.DateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom
Me.DateTimePicker1.Location = New System.Drawing.Point(158, 39)
Me.DateTimePicker1.Name = "DateTimePicker1"
Me.DateTimePicker1.Size = New System.Drawing.Size(294, 28)
Me.DateTimePicker1.TabIndex = 2
Me.DateTimePicker1.Value = New Date(2019, 6, 18, 0, 0, 0, 0)
Извините, я не хардкорный разработчик :) Я использую VB.net с типом приложения: приложение Windows Forms
Лучше. :-) Установите для свойства Format значение Date.
Всякий раз, когда вы сохраняете в Access, используйте DateTimePicker.Value.Date вместо DateTimePicker.Value. Свойство DateTime.Date удалит любую информацию о времени.
@KenWhite Спасибо :) Я вижу четыре варианта формата Long Short Time и пользовательский. Я уже выбрал пользовательский формат, а для параметра customFormat установлено значение дд-мм-гггг, однако это не помогает.
@djv в datetimepicker я не выбрал никаких действий. он имеет только привязки данных к таблице доступа. Если пользователь выбирает любую дату, он выбирает только дату. Однако, когда пользователь оставляет значение datetimepicker как есть (сегодняшняя дата по умолчанию), он сохраняет и дату, и время. Какой код я должен написать для бездействия на datetimepicker. или установить значение по умолчанию как дату
@GaneshParte было бы полезно, если бы вы показали некоторый код, особенно там, где значение DateTimePicker привязано к Access. Кроме того, вам, вероятно, следует обрабатывать обрезку времени на другом конце - форматировать ее так, как вы хотите, когда она отображается.
@djv это все, что у меня есть - Me.DateTimePicker1.CustomFormat = "dd-MM-yyyy" Me.DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Value", Me.OrderdetailsBindingSource, "OrderDate", True)) Me.DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.OrderdetailsBindingSource, "OrderDate", True)) Me.DateTimePicker1.Font = New System.Drawing.Font("Tahoma ", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.DateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom
OrderDetails — это таблица, созданная в ms access.
Остальной код Me.DateTimePicker1.Location = New System.Drawing.Point(158, 39) Me.DateTimePicker1.Name = "DateTimePicker1" Остальной код Me.DateTimePicker1.Size = New System.Drawing.Size(294, 28) ) Me.DateTimePicker1.TabIndex = 2 Me.DateTimePicker1.Value = Новая дата (2019, 6, 18, 0, 0, 0, 0)
@djvЯ пытался изменить me.datetimepicker1.value.date, однако выдает ошибку «Выражение является значением и, следовательно, не может быть предназначено для назначения»
@GaneshParte Я только что добавил ваш код к вопросу. Но в будущем, как автор вопроса, вы можете редактировать добавить свой вопрос, чтобы добавить любой код даже после того, как вопрос будет создан.





В Access нет короткого формата даты, такого как SQL Server. См. эта ссылка для списков типов данных.
Доступ:
SQL-сервер:
Таким образом, Access имеет только один тип даты/времени, который должен иметь возможность хранить время, который имеет то же количество байтов, что и дата и время SQL Server. Дата без метки времени, которую вы видите, на самом деле 12:00. Это то, что вы делаете, когда устанавливаете дату/время на DateTimePicker Me.DateTimePicker1.Value = New Date(2019, 6, 18, 0, 0, 0, 0). Это, кстати, ваше лучшее решение, чтобы установить DateTimePicker на сегодняшнюю дату (только часть даты, используя свойство DateTime.Date, о котором я упоминал).
Чтобы решить вашу проблему, сделайте это в Form_Load:
Me.DateTimePicker1.Value = Now.Date ' this makes it today at 12 AM
Если вы хотите лучше понять, что происходит, проверьте значение вашего DateTimePicker в любое время с помощью этого, чтобы увидеть, что в нем всегда есть время, даже если сейчас 12:00:
MessageBox.Show($"{DateTimePicker1.Value:yyyy-MM-dd HH:mm:ss}")
И запустите этот запрос в своей базе данных, чтобы увидеть, что в поле Access всегда есть время Date/Time, и что Access автоматически скрывает время, когда сейчас 12:00:
select
orderdate
, format(orderdate, 'General Date') as GeneralDate
, format(orderdate, 'Short Time') as ShortTime
, format(orderdate, 'Medium Time') as MediumTime
, format(orderdate, 'Long Time') as LongTime
, format(orderdate, 'Short Date') as ShortDate
, format(orderdate, 'Medium Date') as MediumDate
, format(orderdate, 'Long Date') as LongDate
from orderdetails
Спасибо djv. Я добавил следующее Me.DateTimePicker1.Value = Date.Today в событие загрузки формы, которое фактически сохраняет только дату в базе данных доступа. Однако в моей форме я добавил новую кнопку, которая фактически сбрасывает все текстовые поля и позволяет пользователям добавлять новую запись. Теперь, если они не выбирают какую-либо дату и оставляют дату как сегодняшнюю дату, она снова сохраняет дату со временем. Private Sub BtnAddNew_Click_1(sender As Object, e As EventArgs) Обрабатывает btnAddNew.Click OrderdetailsBindingSource.AddNew() End Sub
Опять же, он не хранит только дату в базе данных, а хранит дату с 12:00 в качестве времени. Access форматирует его только для даты, когда время 12:00. Так что вы должны также установить Me.DateTimePicker1.Value = Date.Today в нажатие кнопки, кажется.
Спасибо djv. Это сработало. Я добавил Me.DateTimePicker1.Value = Date.Today это значение до того, как оно было до функции OrderdetailsBindingSource.AddNew(). Я добавил это после функции OrderdetailsBindingSource.AddNew(), и теперь я вижу только дату. Большое спасибо за Вашу помощь :)
Извините, если я не смогу ответить вам точно в vb.net я дам вам ответ в vb (как я имею в виду, это правильно) и в правильном С#
я понял, что вы хотите, чтобы код сохранял значения в базе данных, если дата DateTimePicker установлена сегодня.
С#
if (dateTimePicker1.Value.Date == DateTime.Today)
{
//insert your code here
}
vb.net
if dateTimePicker1.Value.Date == DateTime.Today
//Code here
end if
это, если спрашивает, является ли дата пикета DateTime той же датой, что и сегодня
если вы просто хотите сохранить все значение даты в базе данных, если выбранная дата сегодня, например: «25.06.2019 17:25», у вас возникнут проблемы.
Если вы сохраните его как строку, вы можете отформатировать его:
dateTimePicker1.Value.ToString("HH:mm dd.MM.yyyy")
или
dateTimePicker1.Value.ToString("HH:mm")
поэтому поместите второй в скобку «else».
если вам нужна только дата или время, вы можете отформатировать ее, как указано выше.
(извините, я не уверен, правильно ли я понял ваш вопрос, поэтому, если это вам не поможет, просто прокомментируйте. Я отвечу)
Спасибо ЛоаСтауб. Я просто хочу сохранить только дату, а не время в моей базе данных доступа. Если я не выбираю какую-либо дату по умолчанию, она просто сохраняет дату + время, однако, если я выбираю любую дату, она сохраняет только дату. Итак, я просто пытаюсь понять, как установить значение по умолчанию для datetimepicker только на дату, а не на время.
Путаница была в этом предложении I want to store the date only in the Access store when the user leaves the DateTimePicker to today's date. Это можно интерпретировать как I want to store the date only, ... when the user leaves the DateTimePicker to today's date или I want to store the date, only ... when the user leaves the DateTimePicker to today's date, первое из которых отражает фактическое намерение ОП.
Спасибо ЛоаСтауб. Это то, что я сделал в своем коде. Событие загрузки формы Me.DateTimePicker1.Value = Date.Today и при добавлении новой записи в базу данных из формы vb. Private Sub BtnAddNew_Click_1(sender As Object, e As EventArgs) Обрабатывает btnAddNew.Click OrderdetailsBindingSource.AddNew() Me.DateTimePicker1.Value = Date.Today End Sub
Visual Studio не имеет DateTimePicker; это инструмент разработки. Предположительно, вы разрабатываете на C# или VB.Net, используя одну из графических сред (Winforms, XAML и т. д.). Какой из них вы используете? Эта информация необходима для ответа на ваш вопрос.