2009-11-02 8 views
0

J'ai un DataGridView lié à une table à partir d'une base de données .sdf via un BindSource. L'affichage de la colonne de date date comme "jj/aaaa HH: mm: ss". e .: "27/2/1971 00:00:00".Date du format de SQLCE à afficher dans DataGridView

Je veux le faire afficher juste "27/02/1971" à sa place. J'ai essayé d'appliquer DataGridViewCellStyle {format = jj/MM/aaaa} mais rien ne se passe, événement avec d'autres formats préconstruits. De l'autre côté, il y a un formulaire avec un MasketTextBox avec un masque "jj/MM/aaaa" à son entrée qui est lié à la même colonne et utilise un gestionnaire d'événement Parse et Format avant l'affichage et l'envoie à la db.

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

Comme vous pouvez le voir par le code, il a été expexted cette date en provenance de SQL serait une valeur datetime est sa colonne, mais mon eventHandler reçoit une chaîne à la place. De même, la date de résultat de l'analyse doit être une date-heure, mais c'est aussi une chaîne.

Je suis intrigué par cette colonne datetime.

Répondre

1

a trouvé le problème. Le type de colonne doit être défini dans la vue DataSet au type que vous voulez dans votre application. Donc, si vous le changez en DateTime avec une méthode Parse and Format, vous êtes sûr même si l'utilisateur change les paramètres régionaux du PC. Après cela, le format dans DataGridView commence à fonctionner.