Дата по умолчанию в datetimepicker в визуальной студии

Если пользователь выбирает дату в 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)

Visual Studio не имеет DateTimePicker; это инструмент разработки. Предположительно, вы разрабатываете на C# или VB.Net, используя одну из графических сред (Winforms, XAML и т. д.). Какой из них вы используете? Эта информация необходима для ответа на ваш вопрос.

Ken White 24.06.2019 19:14

Извините, я не хардкорный разработчик :) Я использую VB.net с типом приложения: приложение Windows Forms

Ganesh Parte 24.06.2019 19:20

Лучше. :-) Установите для свойства Format значение Date.

Ken White 24.06.2019 19:29

Всякий раз, когда вы сохраняете в Access, используйте DateTimePicker.Value.Date вместо DateTimePicker.Value. Свойство DateTime.Date удалит любую информацию о времени.

djv 24.06.2019 20:03

@KenWhite Спасибо :) Я вижу четыре варианта формата Long Short Time и пользовательский. Я уже выбрал пользовательский формат, а для параметра customFormat установлено значение дд-мм-гггг, однако это не помогает.

Ganesh Parte 24.06.2019 20:42

@djv в datetimepicker я не выбрал никаких действий. он имеет только привязки данных к таблице доступа. Если пользователь выбирает любую дату, он выбирает только дату. Однако, когда пользователь оставляет значение datetimepicker как есть (сегодняшняя дата по умолчанию), он сохраняет и дату, и время. Какой код я должен написать для бездействия на datetimepicker. или установить значение по умолчанию как дату

Ganesh Parte 24.06.2019 20:45

@GaneshParte было бы полезно, если бы вы показали некоторый код, особенно там, где значение DateTimePicker привязано к Access. Кроме того, вам, вероятно, следует обрабатывать обрезку времени на другом конце - форматировать ее так, как вы хотите, когда она отображается.

djv 24.06.2019 21:19

@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

Ganesh Parte 25.06.2019 10:07

OrderDetails — это таблица, созданная в ms access.

Ganesh Parte 25.06.2019 10:10

Остальной код 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)

Ganesh Parte 25.06.2019 10:14

@djvЯ пытался изменить me.datetimepicker1.value.date, однако выдает ошибку «Выражение является значением и, следовательно, не может быть предназначено для назначения»

Ganesh Parte 25.06.2019 10:21

@GaneshParte Я только что добавил ваш код к вопросу. Но в будущем, как автор вопроса, вы можете редактировать добавить свой вопрос, чтобы добавить любой код даже после того, как вопрос будет создан.

djv 25.06.2019 16:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
2 757
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В Access нет короткого формата даты, такого как SQL Server. См. эта ссылка для списков типов данных.

Доступ:

  • Дата/Время, Использовать для даты и времени, 8 байт

SQL-сервер:

  • datetime, с 1 января 1753 года по 31 декабря 9999 года с точностью до 3,33 миллисекунды, 8 байт
  • дата, хранить только дату. С 1 января 0001 г. по 31 декабря 9999 г., 3 байта

Таким образом, 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

Ganesh Parte 25.06.2019 17:40

Опять же, он не хранит только дату в базе данных, а хранит дату с 12:00 в качестве времени. Access форматирует его только для даты, когда время 12:00. Так что вы должны также установить Me.DateTimePicker1.Value = Date.Today в нажатие кнопки, кажется.

djv 25.06.2019 17:54

Спасибо djv. Это сработало. Я добавил Me.DateTimePicker1.Value = Date.Today это значение до того, как оно было до функции OrderdetailsBindingSource.AddNew(). Я добавил это после функции OrderdetailsBindingSource.AddNew(), и теперь я вижу только дату. Большое спасибо за Вашу помощь :)

Ganesh Parte 25.06.2019 18:06

Извините, если я не смогу ответить вам точно в 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 только на дату, а не на время.

Ganesh Parte 25.06.2019 17:47

Путаница была в этом предложении 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, первое из которых отражает фактическое намерение ОП.

djv 25.06.2019 17:51

Спасибо ЛоаСтауб. Это то, что я сделал в своем коде. Событие загрузки формы 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

Ganesh Parte 25.06.2019 18:07

Другие вопросы по теме

Похожие вопросы

Существуют ли функции виртуальных/переопределяемых свойств в контексте хранилища EF на уровне домена?
Я пытаюсь получить конкретные столбцы с данными, которые имеют нулевое значение, используя linq в vb.net, чтобы получить только эти 2 пустые строки
PickIconDlg не разрешает путь длиннее, чем начальная настройка пути
Есть ли способ привязать текстовое поле средства выбора даты к файлу и ключу resx и при этом сохранить функциональность средства выбора даты?
Есть ли способ изменить текст, отображаемый в DatePicker? Вместо "Выберите дату" показать что-то другое?
Получить имя файла из случайного изображения
VB.net, Ссылка на изменения, внесенные в общедоступные переменные в частной подпрограмме в другой частной подпрограмме
Привязка DataGridViewComboBoxColumn к источнику данных SQL
Как получить номер версии Visual Studio, создавшей приложение
Каково вычислительное влияние все более конкретных десятичных чисел