IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

C# windows forms tri date format texte datagridview


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 507
    Par défaut C# windows forms tri date format texte datagridview
    Bonjour,

    Je suis au bout du rouleau !
    Je suis passé à Sqlite avec mon windows forms c#, super ça va bien.
    Enfin, sachant qu’il n’y a pas de format date j’ai opté pour du texte au format dd/MM/yyyy.
    Le souci maintenant c’est que mon Datagridview ne tri pas correctement les dates.
    Il existe beaucoup de sujet sur le web mais je n’y arrive pas…

    J’ai besoin d’un coup de pouce SVP pour trouver une réponse….

    Est-il possible de trier une colonne par code :

    dd, puis MM, puis YYYY en faisant abstraction au slash (/)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void Datagridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
     
                    if (e.ColumnIndex == Datagridview1.Columns[1].Index)
                    {
                         // ici le code
                    }
     
            }
    Cordialement,
    Merci,

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Pourquoi dans ton objet tu défini la propriété en tant que datetime, et quand tu la récupère de sqlite tu la convertie en date avec DateTime.parse
    https://docs.microsoft.com/en-us/dot...tframework-4.8
    https://docs.microsoft.com/en-us/dot...tframework-4.8

  3. #3
    Membre éclairé Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 507
    Par défaut
    Bonjour youtpout978,

    Du coup j'ai modifié les colonnes de ma BDD avec des dates au format yyyy-MM-dd et je rectifie le format dans l'affichage du Datagridview1 comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Datagridview1.Columns[1].DefaultCellStyle.Format = "dd/MM/yyyy";
    Puis dans CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) j'ai codé comme ceci :
    (Oups ! ne fonctionne que si toute les cellules de ma colonne sont pleines !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    if (e.ColumnIndex == Datagridview1.Columns[1].Index)
                {
     
                    if (e != null)
                    {
                        if (e.Value != null)
                        {
                            try
                            {
     
                                e.Value = DateTime.Parse(e.Value.ToString()).ToUniversalTime();
     
                                e.FormattingApplied = true;
                            }
                            catch (FormatException)
                            {
     
                                e.FormattingApplied = false;
                            }
                        }
                    }
     
                }
    J'ai modifié comme ceci et j'ai le même soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    if (e.ColumnIndex == Datagridview1.Columns[1].Index)
                {
     
     
                        if (e.Value != null)
                        {
                            e.FormattingApplied = true;
                            e.Value = DateTime.Parse(e.Value.ToString()).ToUniversalTime();
     
     
                           }
                    else if (e.Value == null)
                    {
     
                                e.FormattingApplied = false;
                            }
     
                   }
    Je tente également en plus simple, sans succès si des cellules sont vides :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (Datagridview1.Columns[e.ColumnIndex].Index == 1 && e.Value != null)
     
                        e.Value = DateTime.Parse(e.Value.ToString()).ToUniversalTime();

    Message d'erreur pour ==> e.Value = DateTime.Parse(e.Value.ToString()).ToUniversalTime();

    System.FormatException*: 'La chaîne n'a pas été reconnue en tant que DateTime valide.'



    Dans mon cas, il est possible que les dates viennent s'incrémenter selon les traitements, comment gérer si des cellules on une valeur NULL ?

    Merci pour ton aide...

  4. #4
    Membre éclairé Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 507
    Par défaut
    Je répond à ma question....si une personne arrive dessus un jour....

    Suis-je bête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    if (Datagridview1.Columns[e.ColumnIndex].Index == 1 && e.Value.ToString() != "")
     
                        e.Value = DateTime.Parse(e.Value.ToString()).ToUniversalTime();
    Et là ça fonctionne ....

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Tu affectes directement les valeurs de ta base au datagrid ?
    Parce ce que ce n'est pas ça que je te suggérai mais de modifier la classe sur laquelle tu te bind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Class Toto{
    public Datetime DateToto{get;set;}
    }
    ...
     
    objToto.DateToto= Datetime.parse(rdr.GetString(1));
    Pour la syntaxe c'est à titre informatif, pas sur que ca soit exactement ca

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir une date format texte en format date
    Par arni63 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 19/03/2012, 15h34
  2. [AC-2007] Requete_transformer une date format texte en format date
    Par jj4822 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/11/2011, 19h23
  3. Conversion date format texte en timestamp sql server 2008 R2
    Par nathantahiti dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/09/2011, 09h02
  4. [AC-2007] Tri - Date Formaté - ordre croissant - Etat/Requête
    Par rch05 dans le forum IHM
    Réponses: 24
    Dernier message: 21/03/2011, 14h47
  5. Réponses: 4
    Dernier message: 29/12/2005, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo