2009-06-24 2 views
0

У меня есть DataGridView данных. Источником данных является типизированный набор данных с таблицей, содержащей два столбца DateTime (BeginTimeStamp и EndTimeStamp). Я читаю и записываю данные в базу данных SQL Server 2005 с помощью команды Update набора типизированных данных.C#: Как настроить значение, введенное пользователем в DataGridView?

Пользователь должен ввести дату в каждый из двух колонн, которые я обеспечение исполнения с использованием CellValidating и RowValidating события. Тем не менее, я также должен убедиться, что следующие два правила:

  1. Значение времени для BeginDate колонки всегда должно быть 00:00:00
  2. Значение времени для EndDate колонны всегда должно быть 23 : 59: 59 (или 11:59:59, если хотите)

Поскольку я не хочу, чтобы пользователь вводил 23:59:59 все время, я хотел бы как-то изменить пользовательскую входы в соответствии с 1. и 2. в моем коде.

Где и как я могу это сделать?

EDIT

К сожалению, в случае, если я был неясен. Пользователь может ввести любой дата, однако часть времени фиксируется в полночь для BeginTimeStamp и 23:59:59 для EndTimeStamp.

Пример:

Пользователь вводит 2009/01/01 01:00:00 вечера, как BeginTimeStamp. Мое приложение должно изменить это на 2009/01/01 00:00:00.

Пользователь вводит 2009/01/31 01:00:00 pm как EndTimeStamp. Мое приложение должно изменить это на 2009/01/31 23:59:59.

ответ

2

Я просто отобразить DateTime как дата и добавить время за кулисами.

Это может быть случай, когда пользователь вводит данные или в равной степени может быть, когда вы записываете данные в базу данных.

Если вы выберете первый, посмотрите на событие DataGridView.CellEndEdit.

См. Ответ Noam для кода, чтобы установить время соответствующим образом.

0

Я не уверен, что я следую, пользователь должен ввести значение для двух дат, но они всегда одинаковы? Если я правильно понимаю, почему бы не установить значения по умолчанию в базе данных, а затем, когда вы читаете в наборе данных значения будут уже там

+0

Я думаю, что ОП означает, что время часть DateTime должна быть такой же, но дата может быть что угодно. – ChrisF

+0

Извините, если я вызвал какую-либо путаницу - я отредактировал свой пост, чтобы сделать все более ясным. –

1

Вы можете добавить следующие строки в ваш метод CellValidating, после того, как ваши другие валидаций

DateTime newValue = oldValue.Date; 

и

DateTime newValue = oldValue.Date.AddDays(1).AddSeconds(-1); 
0

Вы также можете сделать проверку внутри вашей собственности сеттера:

public DateTime BeginTimeStamp 
{ 
    get { return _dateTime; } 
    set 
    { 
     // force the time to whatever you want 
     _dateTime = value.Date; 
    } 
}