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 :

Dynamisme d'un DataGridView


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut Dynamisme d'un DataGridView
    Bonjour à tous,
    je voudrais savoir s'il était possible de rendre un datagridview dynamique à la selection (click) d'une row, c'est à dire que lorsque l'utilisateur clique sur une Cell d'une row, la row entière soit sélectionnée, et que l'élément de la row active automatiquement l'affichage de données, contenues dans une autre table, de ce même élément dans un nouveau DataGridView.

    Je ne sais pas si je me suis bien exprimé, mais voilà l'exemple que j'utilise:

    - j'ai une base MySql avec 2 tables: [TABLE 1 (col1 -> clé , col2) ; TABLE 2 (col1-> clé (= Table1.col1), date, col4)]

    - Dans un premier datagridView: affichage de TABLE1.col1, TABLE1.col2, TABLE2.col4;

    Quand on clique sur une ligne du datagrid view, la Row entière se sélectionne (premier pb...),
    et juste par ce clic, dans le datagridview d'à coté:
    on met en titre "Col1", et on affiche dedans TABLE2.Date et TABLE2.col4. (2e probleme... )

    Ca peut paraitre compliqué, mais cela ne l'est pas vraiment en fait..
    Pouvez vous m'aider un peu s'il vous plait?
    Merci d'avance!

  2. #2
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    Citation Envoyé par Saten Voir le message
    Bonjour à tous,
    je voudrais savoir s'il était possible de rendre un datagridview dynamique à la selection (click) d'une row, c'est à dire que lorsque l'utilisateur clique sur une Cell d'une row, la row entière soit sélectionnée
    regarde du coté de la propriété FullRowSelect

    Citation Envoyé par Saten Voir le message
    ...et que l'élément de la row active automatiquement l'affichage de données, contenues dans une autre table, de ce même élément dans un nouveau DataGridView.
    Là tu pourras effectuer une requête (par exemple) qui se base sur le code de l'élément sélectionné pour aller nourir ta 2eme grid

  3. #3
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Merci pour les pistes! Alors je me suis plongé dans pas mal de lien et de doc et j'aurais une ou deux questions...

    Pour la sélection de ligne, j'ai essayé plusieurs choses, dont la plus probable celle là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void dataGrid1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex > 0) // Si l'index est superieur a 0 
                {
                    if (dataGrid1.Rows[e.RowIndex].IsNewRow == false) // Si ce n'est pas la ligne vide
                    {
     
     
                        dataGrid1.Rows[e.RowIndex].Selected = true;
                        dataGrid1.Refresh();                    
                    }
                }
            }
    Mais ça ne fait absolument rien... :s

    Sinon pour le 2e problème, vu que le 2e datagridview découlera de la ligne sélectionnée, et donc de "col1", comment faire une requête pour balancer dans le DGV les infos associées? Je ne vois pas du tout là...

    Merci encore pour ton aide!

  4. #4
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Pour la selection d'une seule ligne, en fait j'ai déplacé mon code, hors du Cell_click, et ça marche. Logique car ce sont des propriétés du datagridview, donc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dataGrid1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dataGrid1.MultiSelect = false;
    Juste ça . En tout cas ça marche!

    Maintenant, pour dire à l'application que quand l'utilisateur clique sur la Row X, la col1 est récupérée car c'est une clé, et la col2 qui contient le titre qui sera affiché dans le nouveau datagridview, je tente cette approche... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void dataGrid1_RowClick(object sender, DataGridViewRowEventArgs e)
            {
                string MaColonne1 = Datagrid1.Rows[e.RowIndex].Cells[0].Value.ToString();
     
            }
    Mais je vois pas commet m'en sortir ...
    Comment prendre la valeur récupérée et l'assigner à une variable utilisé dans une requête? Et comment faire pour que la requête soit éxécutée à chaque changement de ligne du premier datagridview?

    Merci...

    edit: j'ai une erreur de retour d'argument pour le code ci dessus... :s, j'ai changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void dataGrid1_CellClick(object sender, DataGridViewCellEventArgs e)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void dataGrid1_RowClick(object sender, DataGridViewRowEventArgs e)
    c'est barbare, mais ça avait l'air de marcher...à part pour ça...

  5. #5
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dataGrid1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    dataGrid1.MultiSelect = false;
    au lieu de faire ca dans le code, il vaut mieux changer directement dans les propriétés de ta grid
    Pour ce qui est de recupérer ta valeur col1, dis nous d'abord comment tu charges ta 1ere grid

  6. #6
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    OK! Seulement pour le fullrowselect, il n'y est pas dans les propriétés, donc pour l'instant je le laisse là, ça marche!

    Pour ma montée en charge voilà comment je fais:

    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
     
    Connect();
                Connection.Open();
     
                string MySQLCmd = "SELECT TABLE1.Col1, Col2, Col3 FROM Table1 NATURAL JOIN Table2";
     
                // On associe cette requête à la propriété SelectCommand du MySqlDataAdapter
                MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, Connection);
     
                //On vide le DataSet
                ds.Reset();
     
                // On remplit le dataset avec le résultat de la commande SELECT
                MyAdapter.Fill(ds);
     
                // On affiche le datagrid
                dataGrid1.DataSource = ds.Tables[0];
                dataGrid1.Refresh();
     
                // On ferme la connexion le plus tôt possible
                Connection.Close();
            }
    Voilà, quand on lance l'appli, cela se lance, et j'ai mes données d'affiché.

    Pour la sélection violà ou j'en suis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void dataGrid1_RowClick(object sender, DataGridViewRowEventArgs e)
            {
                int i = dataGrid1.CurrentRow.Index;   //Récupère le N° de la ligne courante
                // Recuprere la valeur de la colonne 0 de la ligne cliquee.
                string monToto = (string)dataGrid1.Rows[i].Cells[0].Value.ToString();
    Mais ça ne marche pas, c'est au niveau de l'évenement click sur ligne, j'ai effectué des tests... Mais je ne vois pas comment faire :s.

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

Discussions similaires

  1. [c#] datagridview - trouver postion de la selection
    Par zeroox dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/04/2009, 12h48
  2. [VB.NET][DataGridView]:couleur de fond d'une cellule
    Par BigTicket42 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/05/2008, 22h07
  3. Probleme d'affichage avec un DataGridView
    Par kekesilo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/01/2007, 14h12
  4. [C#][DataGridView]Comment selectionner ligne sur Click Droit ?
    Par VincenzoR dans le forum Windows Forms
    Réponses: 12
    Dernier message: 23/12/2005, 22h34
  5. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15

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