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#] Je n'arrive pas à remonter les données [Débutant(e)]


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut [C#] Je n'arrive pas à remonter les données
    Bonjour

    j ai une form dans laquelle j ai
    une grid, des onglets avec 27 tabs (abc...z, plus *)
    1 oledbconenction
    1 oledbdataadaptateur
    1 dataset

    j ai une requete select * from adherents

    quand j ouvre la fenetre cette requete marche et m affiche les données dans la grid et l onglet selectionné est cleui avec *

    je voudrais qu en changeant d onglet les donnes changent pour n afficher que les gens dont la premiere letre commencent par celle de l onglet et affiche tous les gens si c est sur *

    je n arrives pas a changer la requete dynamiquement

    merci de m aider

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Je pense que l'idéal ce n'est pas de changer ta requête à chaque fois et de la relancer (si c'est ce que tu comptais faire).

    Le mieux serait de stocker le résultat de ta requête:
    select * from adherents

    et en fonction de l'onglet selectionné, tu affiche les données qui correspondent.
    Par exemple, tu peux créer 26 arraylist et tu remplit chacun avec les données qui correspondent par la bonne lettre.

    Par exemple tu fais un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'Pour chaque nom d'adhérent
     
    Select case nom.StartsWith().tolower()
      Case "a"
        ArraylistA.Add(nom)
      Case "b"
        ArraylistB.Add(nom)
    'etc ....
    Désolé c'est du vb.net mais c'est pas très compliqué à traduire...

    Bon effectivement ca peut être un peu lourd à faire mais une fois que c'est fait t'es tranquille...
    Comme ca, pour chaque onglet, tu bind ta grid avec le bon arraylist et c'est dans la poche!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Je ne conteste aucunement l'option de Noodles.

    Mais si tu tiens à ta requête modifiée dynamiquement, met dans un variable string (STr_Ini) ton initiale

    une variable string qui ressemblerait à :
    ReqSQL = "Select * from adherent where nom like "+Str_ini+"*"
    puis lance l'execution de ta ReqSQL

    A vérifier toutes les syntaxes, mais je pense que c'est à peu près la marche à suivre

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Pour remplir tes tabControl tu peux utiliser la fonction SELECT de DataTable
    En effet tu procede comme suit :

    1° ) Tu récupere toute les données de ta base dans ton dataSet .

    2°) tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataRow[] data = dataSet1.Table["Test"].select("clause=" + var);
    3°) tu charge les données de data dans le tabControl correspondant.
    [/code]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par jennings
    Je ne conteste aucunement l'option de Noodles.
    Mais j'espère bien!!!!

    Effectivement, cette solution peut sembler plus légère à développer, cependant, si l'utilisateur change 50 fois d'onglet et qu'il doit se taper l'attente à chaque fois c'est moyen...

    Après, c'est à toi de voir comment sera utilisée ton appli! Si il n'y a pas beaucoup de changement d'onglets, la 2ème méthode est préférable, cependant...
    Citation Envoyé par Le basque
    quand j ouvre la fenetre cette requete marche et m affiche les données dans la grid et l onglet selectionné est cleui avec *
    Donc, si par défaut tu charges tout... autant tout garder en mémoire!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Noodles, ne mords pas STP !

    Je peux me tromper, mais le coup du carnet d'adresse est bien souvent un grand classique des exercices de programmation dans les écoles ou centres de formation... Et je pense que le but est peut-être justement de gérer des requêtes dynamiques. C'est pour cela que j'ai répondu dans ce sens...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Merci de vos réponses,

    on m a donné une solutions hier, que j ai essayé et qui marche, mais la je ne comprends pas pourquoi, des qu on a remonté les données il faut faire un close de la connection, que se passe t il si on veut modifier une donnée puisque la connection est close ??



    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
    			// Au changement d onglet, on doit remonter les données qi commencent par la lettre 
    			// de l onglet
     
    			oleDbConnection.Close();
     
    			dataSetListe1.Clear();
     
    			if (tabControlOnglet.SelectedTab.Text == "*")
    				oleDbDataAdapter.SelectCommand.CommandText = "SELECT * FROM Adherents ";
    			else
    				oleDbDataAdapter.SelectCommand.CommandText = "SELECT * FROM Adherents WHERE Left(Nom,1) = '" + tabControlOnglet.SelectedTab.Text + "'";
     
    			oleDbConnection.Open();
    			oleDbDataAdapter.Fill(dataSetListe1);
     
    			oleDbConnection.Close();

  8. #8
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    En .Net on ferme la connection le plus tot possible (et on ouvre le plus tard) pour eviter de consommer des ressources systeme. Toutefois le framework gere un spooler de connection qui garde la trace de ces connection encore un moment (ce qui explique que après la fermeture de connexion la connexion peut apparaitre comme encore ouverte sur le serveur.)


    Tu doit ouvrir et fermer la connexion a chaque transaction. (sauf dans une boucle for par exemple ).

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Ok pour la transaction, alors quand je cliques sur le bouton appliquer, je fais ca

    mais pourquoi, quand je réouvre mon appli mes données modifiées ne sont plus la ???

    Qui pourrait m indiquer un bon livre pour C# et qui gere aussi les bdd ou données

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		private void btnApply_Click(object sender, System.EventArgs e)
    		{
    			oleDbConnection.Open();
    			dataSetListe1.AcceptChanges();
    			oleDbConnection.Close();
    		}

  10. #10
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    non ce que tu enregistre les données dans le dataset .

    Avant ton dataset.AZcceptChange()

    tu doit faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void btnApply_Click(object sender, System.EventArgs e)
          {
             oleDbConnection.Open();
             dataAdapter.Update(datasetListe1.Table[nomdetable]);
     
             dataSetListe1.AcceptChanges();
             oleDbConnection.Close();
          }
    Avant de faire appel à Update du dataAdapter tu doit générer les commandes INSERT, UPDATE,DELETE .

    Va faire un tour sur les tuto de développez.com et sur la section livre pour ton info

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Les commandes sql insert, update, delete et select sont bien générées

  12. #12
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Le Basque
    Les commandes sql insert, update, delete et select sont bien générées
    ok mais il faut faire appel à Update du dataAdapter pour qu'il mette les données de la base à jour

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Ok, je fai ca, mais ca ne valide pas mes données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    oleDbConnection.Open();
    oataSetListe1.AcceptChanges();
    oleDbDataAdapter.Update(dataSetListe1);
    oleDbConnection.Close();

  14. #14
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    le Update doit etre avant le AcceptChange !!!!

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Comme on dit ici : pani maché

    ca marche pas

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/06/2014, 21h21
  2. Réponses: 10
    Dernier message: 30/12/2011, 11h08
  3. Je n'arrive pas à récuperer les données d'un div
    Par lonyc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/12/2008, 08h53

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