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

C# Discussion :

Probleme Remplissage ComboBOX avec DATE du mois suivant


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut Probleme Remplissage ComboBOX avec DATE du mois suivant
    Bonjour, j'ai un problème avec une combo box qui se remplie avec des dates.

    Elle marche bien , on peut sélectionner la date et le traitement se passe bien,

    mais arrivé à la fin du mois on ne peut pas accéder au dates du mois suivants.

    Ex - Aujourd'hui (13/07/2009)je clic sur la combobox

    La combobox me délivrera comme date maximum 31/07/2009.

    Alors qu'elle devrai normalement delivrer 13/08/2009


    J'espère avoir été claire.

    Pourriez vous m'aider SVP !!

    Je ne connais pas du tout le CSharp mais j'ai quelque notion de VBA ,Java et PHP.


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #region Methodes
     
                /// <summary>
                /// Rempli la ComboBox cbDate avec les dates de la table CALENDRI inférieure à Date du jour +31
                /// </summary>
                /// <param name="chaineConnexion">La chaine de connexion à la base de données</param>
                public void remplirDate(String chaineConnexion)
                {
                    DateTime time = DateTime.Now;
                    int date = date2int(time);
                    date = date +31;
                    String rqt;
                    rqt = "SELECT calendri.CALDAT as dateAffichees , calendri.CALDAT as dateDonnees FROM calendri WHERE (((calendri.CALDAT)<>0 And (calendri.CALDAT)< " + date + ")) ORDER BY calendri.CALDAT DESC";
                    remplirComboDate(cbDate, rqt, new OleDbConnection(chaineConnexion));       
                }
     
                public string dateFrToEng(string date)
                {
                    string annee;
                    string mois;
                    string jour;
                    annee = date.Substring(6, 4);
                    mois = date.Substring(3, 2);
                    jour = date.Substring(0, 2);
                    return annee + "/" + mois + "/" + jour;
                }
     
     
     
    /// <summary>
                /// Rempli une ComboBox avec le premier champ (format aaaammjj) de la requete qui est affiché sour un format
                /// de date courte et le deuxième champ servira de données
                /// </summary>
                /// <param name="cb">La ComboBox à remplir</param>
                /// <param name="sql">La requête à utiliser</param>
                /// <param name="connexion">La connexion à la base de données</param>
                public void remplirComboDate(ComboBox cb, String sql, OleDbConnection connexion)
                {
                    OleDbCommand cmd = new OleDbCommand(sql, connexion);
                    connexion.Open();
                    OleDbDataReader oddr = cmd.ExecuteReader();
                    ArrayList liste = new ArrayList();
                    int i;
                    while (oddr.Read())
                    {
                        i = int.Parse(oddr.GetValue(0).ToString());
                        liste.Add(new AddValue(int2date(i).ToShortDateString(), oddr.GetValue(1)));
                    }
                    cb.DataSource = liste;
                    cb.DisplayMember = "Display";
                    cb.ValueMember = "Value";
                    cmd.Connection.Close();
                }
     
    #region Evénements
                private void MainForm_Load(object sender, EventArgs e)
                {
                    remplirDate(chaineConnexion95);
                }

  2. #2
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Salut

    au lieu de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int date = date2int(time);
    date = date +31;
    il suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DateTime newDate = time.AddDays(31)
    Tu aurais la date correspondant !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    J'ai essayer mais sa ne marche pas !
    La combo box met la date du 31/07/2009 au maximum


    Sinon J'ai oublié de preciser que la table CALENDRI est situé sur un serveur Oracle , elle contient toutes les dates.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Elle fait quoi la fonction date2int(time) dans "int date = date2int(time);" ?
    Comment sont stockées les dates dans Oracle ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Les dates sont stockées de manière "aaaammjj"

    Et int2date je sais pas trop a quoi sa sert !
    surement a formater la date avant de l'intégrer.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Root's Man!

    Tu es sur que ton champ dans ta bdd est bien de l'integer et pas plutôt un String? Sinon il faut modifier ta requète.

    Pour le remplissage de ton combobox, je n'aurais pas fais comme ça.

    Mais plutôt comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    OleDbCommand cmd = new OleDbCommand(sql, connexion);
                    connexion.Open();
                    OleDbDataReader oddr = cmd.ExecuteReader();
     
                    cb.DataSource = oddr;
                    cb.DisplayMember = "dateAffichees";
                    cb.ValueMember = "dateDonnees";
                    cb.DataBind();
                    cmd.Connection.Close();

    C'est comme ça que je faisais avant quand je faisait du c#. mais je crois que c'était des listBox que je remplissais pas des combo...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Voila les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
               /// <summary>
                /// Change une date dans un format aaaammjj
                /// </summary>
                /// <param name="date">Date de type DateTime </param>
                /// <returns>Retourne un int au format aaaammjj</returns>
                public int date2int(DateTime date)
                {
                    return date.Year * 10000 + date.Month * 100 + date.Day;
                }
    Et
    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
     
                /// <summary>
                /// Change un int au format aaaammjj en DateTime
                /// </summary>
                /// <param name="date">Int au format aaaammjj</param>
                /// <returns>Date de type DateTime</returns>
                public DateTime int2date(int date)
                {
                    int year;
                    int month;
                    int day;
                    String chaine;
                    chaine = date.ToString();
                    year = int.Parse(chaine.Substring(0,4));
                    month = int.Parse(chaine.Substring(4,2));
                    day = int.Parse(chaine.Substring(6, 2));
                    DateTime dt = new DateTime(year,month,day);
                    return dt;
                }
    Sinon Perchmouth j'ai testé sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
             public void remplirComboDate(ComboBox cb, String sql, OleDbConnection connexion)
                {
                    OleDbCommand cmd = new OleDbCommand(sql, connexion);
                    connexion.Open();
                    OleDbDataReader oddr = cmd.ExecuteReader();
     
                    cb.DataSource = oddr;
                    cb.DisplayMember = "dateAffichees";
                    cb.ValueMember = "dateDonnees";
                    cb.DataBind();
                    cmd.Connection.Close();
                    cmd.Connection.Close();
                }
    Mais il accepte pas le cb.DataBind() ;
    Mais sa me ramène tjs la date maximum du 31/07/2009

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    17/07/2009 = 20090717

    20090717 + 31 = 20090748 (et pas 20090817) donc logique qu'il bloque à 20090731...

    La fonction est codée avec les pieds (et encore) ... normal que ça ne fonctionne pas ... traiter les dates avec des int, c'est direct dans le mur. Oracle possède un type de donnée DATE qui permet les comparaisons sérieuses, les tris etc.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Peut être que l'admin bdd n'as pas mis un type DATE ! Ce n'est pas forcément le développeur qui choisi !

    Ce n'est pas la paine de répondre que c'est une fonction codée avec les pieds, mais plutôt qu'il faut faire les traitements (ajouter 31j) sur l'objet DateTime et seulement ensuite le transtyper en integer!

  10. #10
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    [Résolu]
    J'ai essayé le transtypage de la date en ayant ajouté auparavant des jours en plus.
    Et sa marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void remplirDate(String chaineConnexion)
                {
                    DateTime time = DateTime.Now;
                    DateTime newDate = time.AddDays(31);
                    int date = date2int(newDate);
     
                    String rqt;
                    rqt = "SELECT calendri.CALDAT as dateAffichees , calendri.CALDAT as dateDonnees  FROM calendri WHERE (((calendri.CALDAT)<>0 And (calendri.CALDAT)< " + date + ")) ORDER BY calendri.CALDAT DESC";
                    remplirComboDate(cbDate, rqt, new OleDbConnection(chaineConnexion));       
                }
    Je vais pouvoir compiler !

    Merci à Seth77,Kaidan et aussi a PercheMouth^^

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

Discussions similaires

  1. remplissage combobox avec deux cellule non juxtaposées
    Par tuntulin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/08/2009, 23h04
  2. Filtre sur la première date du mois suivant!
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/06/2007, 20h44
  3. [debutant]Probleme de requete avec date
    Par shub dans le forum Access
    Réponses: 9
    Dernier message: 12/05/2006, 10h01
  4. [MFC] probleme remplissage comboBox avec ADOLib
    Par moulefrite dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 14h08
  5. [Dates] calendrier mois suivant, précédent
    Par t-die dans le forum Langage
    Réponses: 7
    Dernier message: 22/12/2005, 14h22

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