2016-03-25 2 views
0

Я создаю приложение для регистрации времени работы сотрудника. Все данные времени для всех пользователей будут храниться в базе данных SQL в формате UTC. Передним интерфейсом будет приложение Windows Forms, которое отображает время и принимает входные данные в локальном часовом поясе пользователя. Приложение WinForms имеет элемент управления DataGridView, в котором время будет отображаться и вводиться пользователями.WinForms DataGridView - редактирование ввода пользователя перед записью в DataSource

DataGridView связан с List от TimeSegment объектов. TimeSegment является структурой я создал которая в основном это:

struct TimeSegment 
{ 

    private DateTime start, end; 

    public TimeSegment(DateTime start, DateTime end){ 
     Start = start; 
     End = end; 
    } 

    public DateTime Start 
    { 
     get { return start; } 
     set { 
      if (value.Kind != DateTimeKind.Utc) 
       throw new ArgumentException("Only UTC dates are allowed."); 
      start = value; 
     } 
    } 

    //There is an End property which is just like the Start 
    //property, but for the 'end' field. 
} 

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

Я знаю, как преобразовать внутреннее время UTC в местный часовой пояс для отображения с помощью события DataGridView.CellFormatting. Проблема, с которой я столкнулась, заключается в том, что вы вводите пользовательский ввод по местному времени и конвертируете в UTC перед отправкой обновления в DataSource из DataGridView.

Я видел несколько других должностей, показывающих, как изменить текст в ячейке на DataGridView «s CellParsing или CellValidating событий, но мне нужно, чтобы изменить реальный объект, который получает текст разобранные, как, что отправляется в DataSource ,

Есть ли способ переопределить поведение синтаксического анализа ячейки и указать, какой объект должен быть отправлен в DataSource?

+0

почему вы не можете сделать редактирование данных в 'OnBound' Событие DataGridView ..? – MethodMan

+2

Не является ли [DataGridView.CellParsing] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellparsing (v = vs.110) .aspx) событием именно для этого ? Даже образец в документации показывает преобразование в UTC. –

+0

@ MethodMan - я не вижу никакого события DataGridView.OnBound./@ Иван - Спасибо, я на самом деле просто пересматривал эту страницу, прежде чем проверять ее здесь. Я думаю, что это ответ. – JamesFaix

ответ

0

Вы можете попробовать что-то вроде этого:

private void mainGrid_CellValidated(object sender, DataGridViewCellEventArgs e) 
{ 
    //Convert time 
    (mainGrid.Rows[e.RowIndex].DataBoundItem as TimeSegment).Start = convertedValue; 
} 
Смежные вопросы