2009-11-02 2 views
0

У меня есть DataGridView, привязанный к таблице из базы данных .sdf через BindSource. В столбце даты отображаются даты, такие как «d/M/yyyy HH: mm: ss». e .: «27/2/1971 00:00:00».Формат даты из SQLCE для отображения в DataGridView

Я хочу, чтобы он отображал только «27/02/1971» на своем месте. Я попытался применить DataGridViewCellStyle {format = dd/MM/yyyy}, но ничего не происходит, событие с другими заранее созданными форматами.

С другой стороны, есть форма с MasketTextBox с маской «dd/MM/yyyy» к ее вводу, которая привязана к одному столбцу и использует обработчик событий «Анализ» и «Формат» перед отображением и отправляет его к дБ.

Binding dataNascimentoBinding = new Binding("Text", this.source, "Nascimento", true); 
dataNascimentoBinding.Format += new ConvertEventHandler(Util.formatDateConvertEventHandler); 
dataNascimentoBinding.Parse += new ConvertEventHandler(Util.parseDateConvertEventHandler); 
this.dataNascimentoTxt.DataBindings.Add(dataNascimentoBinding); 


    public static string convertDateString2DateString(string dateString, string inputFormat, string outputFormat) 
    { 
     DateTime date = DateTime.ParseExact(dateString, inputFormat, DateTimeFormatInfo.InvariantInfo); 
     return String.Format("{0:" + outputFormat + "}", date); 
    } 

    public static void formatDateConvertEventHandler(object sender, ConvertEventArgs e) 
    { 
     if (e.DesiredType != typeof(string)) return; 
     if (e.Value.GetType() != typeof(string)) return; 

     String dateString = (string)e.Value; 
     e.Value = convertDateString2DateString(dateString, "d/M/yyyy HH:mm:ss", "dd/MM/yyyy"); 
    } 

    public static void parseDateConvertEventHandler(object sender, ConvertEventArgs e) 
    { 
     if (e.DesiredType != typeof(string)) return; 
     if (e.Value.GetType() != typeof(string)) return; 

     string value = (string)e.Value; 

     try 
     { 
      e.Value = DateTime.ParseExact(value, "dd/MM/yyyy", DateTimeFormatInfo.InvariantInfo); 
     } 
     catch 
     { 
      return; 
     } 
    } 

Как вы можете видеть в коде было expexted, что Дата приходя от SQL будет значение DateTime как его колонна, но мой EventHandler получает строку вместо. Аналогично, дата результата для синтаксического анализа должна быть датой, но также и строкой.

Я озадачен тем, что столкнулся с этой колонкой datetime.

ответ

1

Обнаружена проблема. Тип столбца должен быть установлен в представлении DataSet таким типом, который вы хотите в своем приложении. Поэтому, если вы просто измените его на DateTime с помощью метода Parse и Format, вы будете в безопасности, даже если пользователь изменит локаль ПК.

После этого начинает работать формат в DataGridView.

Смежные вопросы