Форматировать дату из SQLCE для отображения в DataGridView - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть DataGridView, связанный с таблицей из базы данных .sdf через BindSource. В столбце даты отображаются даты типа «д / м / гггг чч: мм: сс». e .: "27/2/1971 00:00:00".

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

С другой стороны, есть форма с MasketTextBox с маской "dd / MM / yyyy" на входе, которая привязана к тому же столбцу и использует обработчик событий Parse и Format перед отображением и отправляет его в ДБ.

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;
        }
    }

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

Я озадачен, имея дело с этим столбцом даты и времени.

1 Ответ

1 голос
/ 05 ноября 2009

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

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

...