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 :

selection multiple datagridview form2 -> textbox form1


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Par défaut selection multiple datagridview form2 -> textbox form1
    Bonjour,

    J'aurais besoin d'aide pour orienter ma recherche d'informations car visiblement je n'utilise pas les bons termes.

    Le logiciel utilise une base sdf SQL CE à plusieurs tables, je suis sous visual studio 2012 en C#.

    Ce que je cherche à faire :



    Sur un formulaire gérant les enregistrement d'une table, je n'ai pas rencontré de souci particulier mais là ça se complique méchemment pour mon petit niveau. J'en arrive au stade où je ne sais plus où chercher.

    Dois je me focaliser sur la manipulation des dataset ?

    Dois je plutôt me concentrer sur les requêtes SQL et les classes ?

    Ou bien encore vaudrait mieux-t-il utiliser une table temporaire à vider à chaque ajout dans les textbox ou leur modification ultérieure ?

    Les résultats des recherches que j'ai pu faire m'ont complétement perdu, je ne sais plus quoi rechercher ou taper dans les moteurs pour focaliser les résultats sur ce que j'ai vraiment besoin de réaliser pour ce type d'opération.

    L'élégance du code n'est pas ma priorité, surtout si il utilise une somme incroyable de fonctions que je ne maitrise pas encore. J'aimerais étudier ce type d'opérations en limitant un maximum mon champ de documentation pour ne pas me perdre en route.

    Merci d'avance si vous pouvez me ré-aiguiller.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Perso j'ai pas compris ce que tu cherchais à faire... Je sais qu'une image vaut mille mots, mais là je crois que ce serait plus clair si tu expliquais un peu...

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Par défaut
    bonsoir tomlev,

    Je vais esssayer d'expliquer cela avec mes mots.

    Le formulaire principal comporte une série de textbox, disposées en lignes, dans lesquelles je dois charger les enregistrements d'une base. Ces donnèes servent ultérieurement à calculer d'autres valeurs d'une manière automatisée.

    Chaque ligne de l'interface comporte 4 text box et corespondent à un seul enregistrement, dont trois sont verrouillées car elles contiennent les valeurs de la base de donnèes. La quatrième (seconde en partant de la gauche sur le schéma) sert à rentrer une donnèe qui pondère chaque enregistrement dans un résultat final.

    Pour gérer ces enregistrements, j'ai deux formulaires :

    - le formulaire "stock" qui permet de manipuler les donnèes d'une table (modifier,supprimer, ajouter etc ...). Pas de souci pour celui ci, beaucoup de doc et d'infos m'ont permis de surmonter les difficultés.

    - le formulaire "selection" qui permet de selectionner et charger plusieurs enregistrements dans le formulaire principal. Et là ça se corse méchemment, je suis complétement perdu.

    Ce formulaire secondaire comprend seulement deux éléments :
    - un datagridview avec checkboxes : sélection/desélection multiple donc.
    - un bouton de validation : qui va s'occuper d'envoyer les valeurs des enregistrements sélectionnés au bon endroit dans le formulaire principal (dans les textbox verrouillées mentionnées plus haut).

    La fonction checkboxes en sélection multiple n'est pas encore fonctionnelle mais j'avance, j'ai opté finalement pour un champ "Selection" dans la base qui reçoit un true ou un false et qui est vidé en quittant le logiciel.

    Ce qui me pose souci c'est de transmettre les enregistrements dans le formulaire principal à partir du formulaire secondaire et d'en organiser les valeurs dans les textbox.

    Je ne sais plus par quel bout le prendre ni sur quoi focaliser ma recherche, je voudrais si possible limiter mon "apprentissage sur le tas" sur cette fonction à quelque chose de simple à mettre en place que je peux par la suite rendre plus complexe.

    Je sais que l'exemple est mal choisi mais je regrette la facilité d'utilisation des variables en LUA et son coté modulaire. On pouvait crèer un moteur avec timer qui centralisait les donnèes à traiter puis les traiter dans des sous routines assez facilement. Si je rapportes cela aux classes C#, il me faudrait en crèer beaucoup et au vu de ce que j'ai croisé comme samples et comme posts sur les forums... ça n'a pas l'air d'être conseillé. Ou alors j'ai manqué quelque chose.

    Voilà l'explication, bien que je n'ai pu éditer en temps et en heure, c'est une question d'un parfait débutant.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Codename Voir le message
    Chaque ligne de l'interface comporte 4 text box et corespondent à un seul enregistrement, dont trois sont verrouillées car elles contiennent les valeurs de la base de donnèes. La quatrième (seconde en partant de la gauche sur le schéma) sert à rentrer une donnèe qui pondère chaque enregistrement dans un résultat final.
    Tu as une raison particulière d'utiliser des lignes de TextBox, plutôt qu'un DataGridView qui est fait pour ça ?

    Citation Envoyé par Codename Voir le message
    - un bouton de validation : qui va s'occuper d'envoyer les valeurs des enregistrements sélectionnés au bon endroit dans le formulaire principal (dans les textbox verrouillées mentionnées plus haut).
    Tu abordes le problème à l'envers : ce n'est pas le formulaire secondaire qui doit "envoyer" les données au formulaire principal, mais le formulaire principal qui doit récupérer les données du formulaire secondaire. Ainsi tu n'auras aucune dépendance du formulaire secondaire vers le formulaire principal, ce qui te permettra si besoin de le réutiliser ailleurs.

    Une solution simple est de créer dans le formulaire secondaire une propriété qui renvoie (par exemple) les identifiants des éléments sélectionnés, et qui s'appelle par exemple SelectedIds. En supposant que tu utilises un DataGridView dans ton formulaire de sélection, ça donne quelque chose comme ça :

    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
    public IList<int> SelectedIds
    {
        get
        {
            var ids = new List<int>();
            foreach (DataGridViewRow row in dataGridViewSelection.Rows)
            {
                bool selected = (bool)row.Cells["colonneSelection"].Value;
                if (selected)
                {
                    int id = (int)row.Cells["colonneIdentifiant"].Value;
                    ids.Add(id);
                }
            }
            return ids;
        }
    }
    Ensuite dans le formulaire principal tu as juste à faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var frmSelection = new FormulaireSelection();
    if (frmSelection.ShowDialog() == DialogResult.OK)
    {
        foreach (int id in frmSelection.SelectedIds)
        {
            ...
        }
    }
    Citation Envoyé par Codename Voir le message
    La fonction checkboxes en sélection multiple n'est pas encore fonctionnelle mais j'avance, j'ai opté finalement pour un champ "Selection" dans la base qui reçoit un true ou un false et qui est vidé en quittant le logiciel.
    Ce champ Selection n'a aucune raison de se retrouver dans la base de données ; c'est une donnée purement liée à l'interface graphique, il ne faut surtout pas "polluer" la base de données avec ce genre de choses...

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Par défaut
    Je comprend mieux mes erreurs de logique maintenant. Merci pour le recadrage.

    Je vais potasser ton code (mais je le comprend) car je ne connaissais pas l'utilisation des listes, en testant deux trois trucs à coté je viens de prendre conscience qu'on peut faire faire aux formulaires bien plus de choses que je ne le pensais sans pour autant faire des milliers d'appels à droite et à gauche. Il faut que je me déconditionne sinon je ne vais pas avancer. Pour le coup google a été mon pire ennemi pour débuter le C#.

    Pour l'interface, les text box me sont venues naturellement comme des conteneurs propices à des donnèes en lecture seule.

    Coté gauche la référence, coté droit les résultats du calcul automatisé et au milieu le contrôle utilisateur qui pondère à la volèe et peur vérifier les résultats en temps réel (calcul intégral refait à chaque "TextChanged").

    Le logiciel est purement une sandbox mais on peut facilement rapporter l'usage à une logiciel de diététique par exemple.

    L'utilisateur rentre les grammes de la référence chargèe et le calcul automatisé sort le nombre de calories et une valeur conseillée en fonction de ce qu'il y a dans la base. Dans d'autres groupbox d'autres textbox seront modifiées à la volèe comme par exemple le prix total de la recette, le nombre total de calories, le ratio gramme/calories, le ratio €/gramme etc ... le but pour moi c'est de rendre complexe quelque chose de simple et fonctionnel pour atteindre toutes les limites des fonctions basiques. Avant de passer à autre chose.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Par défaut
    J'ai beau avoir indigéré des pages sur System.Collections, je n'arrive pas à accéder au contenu de la liste. Plus j'avance, plus j'ai l'impression que le MCSE à coté du c# c'était une promenade de santé La POO c'est quand même une sacrèe usine à gaz.

    Je n'en suis pas encore à vouloir exploiter les ID récupérés, mais juste afficher le contenu quelque part.

    Pour vérifier si ce n'était pas une erreur qui venait de l'interface, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void btnSelectionFrm_Click(object sender, EventArgs e)
            {
                var frmSelection = new frmSelection();
                if (frmSelection.ShowDialog() == DialogResult.OK)
     
                {
                            txtbxBase1.Text = frmSelBas.dataGridView2.SelectedRows[0].Cells[3].Value.ToString();
                    }   
            }
    Et j'ai bien la valeur programmée dans le bon textbox.

    J'ai aussi essayé de binder un dgv du formulaire principal sur la liste (via l'IDE uniquement) mais par contre cela ne donne rien.

    Help, je suis proche de l'AVC là.

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

Discussions similaires

  1. [Débutant] Affichage de la selection datagridview dans les textbox
    Par thierry007 dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/02/2015, 09h10
  2. Select multiple
    Par lfournial dans le forum Struts 1
    Réponses: 20
    Dernier message: 24/02/2011, 12h14
  3. Selection multiple dans un DataGridView
    Par Mathieu231 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/05/2010, 14h20
  4. <select multiple ...>
    Par ayobo dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 08h49
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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