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

VB.NET Discussion :

DataGridView: changer les valeurs d'une colonne


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut DataGridView: changer les valeurs d'une colonne
    Salut à tous!

    J'ai un datagridview qui affiche une table de ma base de données SQL-Server. J'ai un champ EstDisponible (de type bit) qui affiche soit 0 (false) ou 1 (true).

    Maintenant, je ne veux pas qu'il m'affiche 0 ou 1, je préfère Oui/Non donc je suis en train de le coder mais sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim rangee As DataRow
     
            For Each rangee In dgv.Columns("EstDisponible")
                If dgv.Rows(rangee) = 0 Then
                    dgv.Rows(rangee) = "Non" '???
                ElseIf dgv.Rows(rangee) = 1 Then
                    dgv.Rows(rangee) = "Oui" '???
                End If
            Next
    Merci pour votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 23
    Points : 12
    Points
    12
    Par défaut avec le value
    tu as essayé en mettant

    dgv.Rows(rangee).value = "Non"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Si mais toujours rien.

    Sur la ligne de 'For each rangee', dgv.Columns("EstDisponible") est soulignée marquant que ce n'est pas un type collection.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Pour voir j4qi raîdement créé un datagridview et datarow ne semble pas être une méthode de datagridview.columns()

    SI tu essayes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    For i As integer = 1 to dgv.RowCount
     
       If dgv.Item("EstDisponible", i).value = 0 Then
            dgv.Item("EstDisponible", i).value = "Non" 
       ElseIf dgv.Item("EstDisponible", i).value = 1 Then
             dgv.Item("EstDisponible", i).value = "Oui"
     
    next

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci sphynx.

    Malgré que c'est logique, je ne crois pas ce que je veux faire soit possible en fin de compte.

    Le champ EstDisponible est de type bit, et je suis en train de lui assigner du string ("Oui", "Non")...

    Je vais probablement devoir changer son type en varchar(3).

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2009
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Slt
    Le problème ici est le faite que le champ de ton datagrid soit lié à un champ de la base de donnée.
    tu dois annuler la laison qui à été créée.
    sur ton datagridview selectionne modifier les colonnes puis le champs qui t'intéresse. Dans la partie "donnée" 'datapropertyName' selectionne aucun.
    la je pense ke le code pour modifier les valeur en oui ou non fonctionnera.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Je suis interréssé par solution. Car je n'y arrive pas du tout et je ne peux pas modifier ma BDD.

    J'ai essayé avec le code suivant dans une boucle mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dataGridView.rows(i).Cells(2).ValueType = GetType(String)
    dataGridView.rows(i).Cells(2).Value = "toto"
    Je précise que le type de valeur de la cellule est un short.

    J'ai essayé de casser liaison en mettant la propriété dataPropertyName de la colonne concernée à nothing. Mais c'est sans résultat.

    Quelqu'un aurait-il une solution ?

  8. #8
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par ah_maht Voir le message
    Slt
    Le problème ici est le faite que le champ de ton datagrid soit lié à un champ de la base de donnée.
    tu dois annuler la laison qui à été créée.
    sur ton datagridview selectionne modifier les colonnes puis le champs qui t'intéresse. Dans la partie "donnée" 'datapropertyName' selectionne aucun.
    la je pense ke le code pour modifier les valeur en oui ou non fonctionnera.
    Personnellement, je laisserai la colonne avec le champ bit et je me contenterais de la masquer. Par contre, j'en ajouterais une autre de type VarChar que j'alimenterai avec des "oui" ou des "non".
    Voici un exemple en C#. Dites nous si vous ne parvenez pas a convertir.

    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
    //Masquage de la colonne de type "Bool"
    dgv.Columns["EstDisponible"].Visible = false;
     
    // Creation et ajout d'une colonne supplementaire nomee "EstDisponibleTexte"
    System.Windows.Forms.DataGridViewTextBoxColumn EstDisponibleTexteDataGridViewTextBoxColumn;
    EstDisponibleTexteDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
    dgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { EstDisponibleTexteDataGridViewTextBoxColumn });
    EstDisponibleTexteDataGridViewTextBoxColumn.FillWeight = 1F;
    EstDisponibleTexteDataGridViewTextBoxColumn.HeaderText = "EstDisponibleTexte";
    EstDisponibleTexteDataGridViewTextBoxColumn.Name = "EstDisponibleTexte";
    EstDisponibleTexteDataGridViewTextBoxColumn.Width = 50;
     
    // Alimentation de la nouvelle colonne "EstDisponibleTexte" a partir de "EstDisponible":
    // Pour toutes les lignes de dgv
    foreach (DataGridViewRow rangee in dgv.Rows)
        {
        // Si la valeur de la colonne "EstDisponible" n'est ni "null" ni "false"
        if ((rangee.Cells["EstDisponible"].Value != null) && ((bool)rangee.Cells["EstDisponible"].Value))
            {
            // Je copie "Oui" dans la colonne "EstDisponibleTexte"
            rangee.Cells["EstDisponibleTexte"].Value = "Oui";
            }
        else
            {
            // Je copie "Non" dans la colonne "EstDisponibleTexte"
            rangee.Cells["EstDisponibleTexte"].Value = "Non";
            // Petite cerise: je colore la case en rouge.
            rangee.Cells["EstDisponibleTexte"].Style.BackColor = System.Drawing.Color.Red;
            }
     
        }
    // Les donnees ne se rafraichissaient pas chez moi, le seul moyen
    //que j'ai trouvé est de masque la colonne et de la reafficher.
    dgv.Columns["EstDisponibleTexte"].Visible = false;
    dgv.Columns["EstDisponibleTexte"].Visible = true;

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Points : 48
    Points
    48
    Par défaut
    ok, je vais créé une nouvelle colonne et masqué celle qui me sert pas.

    merci de ton aide

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pluôt que de remplir les cellules de la colonne avec un foreach (DataGridViewRow rangee in dgv.Rows), on peut les laisser sysématiquement vides et utiliser l'event CellFormatting du DataGridView pour afficher "Oui" ou "Non" en fonction de la valeur de colonne masquée.

    Ce qui évite de recalculer la colonne si on opère des modifications.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/06/2009, 15h09
  2. Réponses: 5
    Dernier message: 07/09/2006, 18h56
  3. Toutes les valeurs d'une colonne - Tableau à 2D
    Par Bridou dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2006, 16h05
  4. requete pour compter les valeurs ds une colonne
    Par smariteau dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2006, 17h37
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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