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 :

Cherche une liste de boutons radio


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut Cherche une liste de boutons radio
    Bonjour,

    Je réalise actuellement un application gérant des réservations de vol. Le stockage des données ce fait via une base sur postgres(avec Npgsql pour le middleware).

    J'aimerais reproduire une liste contenant des boutons radio comme celle-ci(qui est en HTML) :



    Que me proposez-vous ?

    Merci de votre aide.

  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
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu peux faire un GridView où la première colonne est un TemplateField, et mettre dans le Template un RadioButton. Lors du Postback, tu regardes quel radiobutton est coché pour savoir quelle ligne est sélectionnée

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Ha ba tien tomlev bonjourrrr, tu dois pas te souvenir de moi mais moi oui, justement tu m'avais aidé sur mon dernier sujet qui portait sur la sérialisation XML d'un DGV(un gestionnaire de budget avec débit, crédit, solde...). Je te remercierais jamais assez pour tous ce que tu m'a appris.

    J'avais justement pensé à un DGV mais j'ai pas réussis à trouver comment afficher des boutons radio dedans. De plus, cette fois j'utilise une base de donnée on doit sans doute pouvoir la relier à un DGV mais je ne sais pas si c'est utile si l'on cherche à afficher le résultat d'une requête... ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Tu peux faire un GridView où la première colonne est un TemplateField
    Ceci n'est pas faisable sur le designer si je ne me trompe pas ?

  5. #5
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Ah oui, ça me rappelle quelque chose cette histoire de budget

    Citation Envoyé par realtux Voir le message
    J'avais justement pensé à un DGV mais j'ai pas réussis à trouver comment afficher des boutons radio dedans. De plus, cette fois j'utilise une base de donnée on doit sans doute pouvoir la relier à un DGV mais je ne sais pas si c'est utile si l'on cherche à afficher le résultat d'une requête... ?
    J'avais mal compris la question en fait, je croyais que tu voulais faire ça en ASP.NET, d'où ma proposition d'utiliser un GridView (qui n'existe pas en WinForms)...

    Le DGV est parfaitement adapté pour afficher le résultat d'une requête (via une DataTable), par contre il ne supporte pas de base l'affichage d'une colonne de RadioButton... Il va falloir coder un peu pour créer un nouveau type de colonne. A priori certaines personnes l'ont déjà fait, en cherchant "DataGridView RadioButton column" sur Google tu devrais trouver des exemples

    Pour ce qui est d'afficher le résultat d'une requête dans le DGV, le principe est le suivant :

    - Créer une DataTable (éventuellement via le designer de DataSet)
    - Créer un DataAdapter avec la requête à exécuter
    - Remplir la DataTable avec le DataAdapter (méthode Fill)
    - Affecter la DataTable comme source de données du DGV

    Si tu utilises le designer de DataSet pour créer la table, ça facilitera un peu le travail, parce que le designer de Form pourra te créer les colonnes automatiquement, et tu n'auras plus qu'à les personnaliser

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Très bien je ferais des recherches mais au pire des cas je pense que je peux toujours afficher le résultat dans une liste simple avec curseur de sélection.

    Pour le DGV j'ai pensé à deux autres solution :

    - Avec une colonne checkbox si on décoche les autres lorsqu'une seul est coché(c'est moche mais bon)

    -Avec colonne bouton qu'on remplace par une image qui change sur l'évènement du clique (archaïque mais je sais pas si c'est faisable)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Si tu utilises le designer de DataSet pour créer la table, ça facilitera un peu le travail, parce que le designer de Form pourra te créer les colonnes automatiquement, et tu n'auras plus qu'à les personnaliser
    J'ai essayé et j'ai réussi à afficher le résultat d'une requête dans le DGV mais il prend les entêtes de la base au lieu de la table du dataSet (exemple : "prix_vol" au lieu de "Prix")

  8. #8
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par realtux Voir le message
    J'ai essayé et j'ai réussi à afficher le résultat d'une requête dans le DGV mais il prend les entêtes de la base au lieu de la table du dataSet (exemple : "prix_vol" au lieu de "Prix")
    Parce que quand le DataAdapter remplit la table, il crée les colonnes qui n'existent pas. Par exemple, il récupère une colonne "prix_vol" en résultat de la requête, mais il ne sait pas que ça correspond à la colonne Prix...

    Tu peux modifier ta requête pour modifier le nom de colonne renvoyé :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT prix_vol AS "Prix" ...

    Sinon, si tu veux pas te compliquer la vie, utilise dans la DataTable les mêmes noms que dans la base, et modifie le nom à afficher au niveau de la colonne du DGV

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Loool pour le "As" j'avais trouvé mais je pensais que y'avais un autre moyens et que je me compliquait la vie comme d'hab..

    Mais je me demandais aussi, si on modifie les cellules dans le DGV, ça ne modifiera pas le contenu de la base sans requête ? et comment fait on pour récupérer le contenu de la ligne active dans le DGV (sous forme de chaine que je peux splitter ou autres), j'ai essayé avec "CurrentRow" mais sans succès.

  10. #10
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par realtux Voir le message
    Mais je me demandais aussi, si on modifie les cellules dans le DGV, ça ne modifiera pas le contenu de la base sans requête ?
    Ca modifie le contenu de la DataTable. Ensuite, tu utilises un DataAdapter pour mettre à jour dans la base les données qui ont changé dans la DataTable.

    Regarde ce tuto pour plus d'infos :
    http://dotnet.developpez.com/articles/ado2/vbnet/

    Citation Envoyé par realtux Voir le message
    et comment fait on pour récupérer le contenu de la ligne active dans le DGV (sous forme de chaine que je peux splitter ou autres), j'ai essayé avec "CurrentRow" mais sans succès.
    Tu peux récupérer la ligne du DataTable qui correspond à la ligne courante du DGV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim drv As DataRowView = DirectCast(dgv.CurrentRow.DataBoundItem, DataRowView)
    Dim row As DataRow = drv.Row

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Très bien je vais faire un tour sur le lien merci.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Pour ce qui est de la mise à jour, j'ai compris le principe et ça fonctionne presque^^. Apparemment il y a un problème au niveau du dataAdapteur.

    Une erreur apparait lors de l'exécution du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.query.Update(DataSet, "vol")
    Erreur :

    Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiée

    Déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private con As NpgsqlConnection = New NpgsqlConnection("Server=localhost;Database=mabase;User Id=moi;Password=pass;")
        Dim cmd As New NpgsqlCommand
        Dim query As New NpgsqlDataAdapter
        Dim tResult As DataTable
        Dim index As Integer
    En ayant fait dès recherches j'ai vu que le problème apparaissait lorsqu'on ne précise pas de clé primaire dans la table, ce qui n'est pas mon cas.

    Ou sinon parait-il que le DataAdapter n'implémente que les ordres Select, j'ai essayer de le faire par le code comme les gens on du le faire mais j'ai pas réussis ne sachant pas trop m'en servir.

  13. #13
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Dans un DataAdapter, il faut :
    - SelectCommand pour remplir la table à partir de la BDD
    - InsertCommand, UpdateCommand, DeleteCommand pour mettre à jour la BDD

    La SelectCommand, tu es obligé de la préciser toi-même. Les autres, tu peux les préciser toi même mais c'est un peu galère (il faut mettre dedans des paramètres en indiquant dans la propriété SourceColumn à quelle colonne ça correspond). Le plus simple est d'utiliser un DbCommandBuilder, qui va automatiquement générer les INSERT/UPDATE/DELETE en fonction du SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim builder As New NpgsqlCommandBuilder(adapter)
    (j'ai renommé en "adapter" ta variable "query", parce que le nom n'était vraiment pas adapté...)
    Ca devrait suffire pour générer les commandes de mise à jour, par contre je crois qu'il faut effectivement que ta table ait une clé primaire

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    j'ai renommé en "adapter" ta variable "query", parce que le nom n'était vraiment pas adapté...
    Cette fois ci c'est pas moi C'est mon professeur qui l'a écrit comme ça lors d'un cour. Mais elle est spécialisé en java..

    Pour ta solution c'est nickel, l'efficacité du code est impressionnante. J'arrive pas à croire qu'il me manquait juste une déclaration.

    Je vais faire des recherches sur MSDN concernant le DbCommandBuilder afin de bien comprendre le fonctionnement car j'aimerais bien expliquer ça.

  15. #15
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par realtux Voir le message
    Cette fois ci c'est pas moi C'est mon professeur qui l'a écrit comme ça lors d'un cour. Mais elle est spécialisé en java..
    Ben elle a pas dû bien comprendre ce qu'est un DataAdapter alors
    "query", ça veut dire "requête", et un DataAdapter, c'est bien plus que ça...

    Citation Envoyé par realtux Voir le message
    Pour ta solution c'est nickel, l'efficacité du code est impressionnante. J'arrive pas à croire qu'il me manquait juste une déclaration.
    Ah, mais ce n'est pas "juste une déclaration"
    C'est aussi l'initialisation du DbCommandBuilder, en lui passant le DataAdapter en paramètre. Quand on fait ça, le DbCommandBuilder s'abonne à l'évènement RowUpdating du DataAdapter, ce qui lui permet de générer la commande adéquate juste avant que le DataAdapter essaie de l'exécuter

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Merci pour tes explications très intéressantes.

    J'ai actuellement choisis comme solution l'ajout de la colonne CheckBox à la place des boutons radios. Je cherche donc à décocher les autres checkbox lorsque l'on en coche un. Je ne trouve pas l'évènement affecté à celui ci puisqu'il semble intégré au DGV(Comme si il fessait partie du CellContentClik)

  17. #17
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Le problème avec les colonnes CheckBox, c'est que la nouvelle valeur de la cellule n'est prise en compte qu'une fois la ligne validée. Pour que ce soit pris en compte immédiatement, le plus simple est géré l'évènement CurrentCellDirtyStateChanged, comme expliqué ici :

    http://www.developpez.net/forums/d88...n/#post5052978

    Quand l'évènement se produit, tu valides les changements en appelant la méthode CommitEdit du DGV, et tu remets à 0 la colonne CheckBox pour les autres lignes

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Effectivement, c'est un évènement auquel je n'aurais jamais pensé. mais lors de la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if DGV1.CurrentCell.ColumnIndex == colonne_interessant.Index
        ...
    Dans mon cas je dois faire mention de la colonne checkbox hors, impossible d'accéder à DGV1.Macolone pour vérifier qu'elle est coché car pour moi ça devrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If DGV1.Macolonne.checked = true
    ...
    Ou alors j'ai pas très bien saisie le but de cet évènement.

  19. #19
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par realtux Voir le message
    Dans mon cas je dois faire mention de la colonne checkbox hors, impossible d'accéder à DGV1.Macolone pour vérifier qu'elle est coché
    DGV1.Macolone ça n'existe pas... si tu veux accéder à la colonne qui s'appelle "Macolone", tu peux y accéder via DGV1.Columns("Macolone")

    Citation Envoyé par realtux Voir le message
    Ou alors j'ai pas très bien saisie le but de cet évènement.
    Il sert à valider immédiatement la modification de la cellule CheckBox

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 30
    Points
    30
    Par défaut
    Oui, j'avais essayé mais il semble que dès lors qu'on fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DGV1.Columns("Macolone")
    il y' a aucun moyen de vérifier que la colonne est coché(DGV1.Columns("Macolone").selected ne fonctionne pas) c'est comme si le DGV ne fesait pas la différence entre une colonne normal et une colonne checkbox.

Discussions similaires

  1. choix dans une liste avec un radio bouton
    Par spinnaker dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/03/2008, 23h03
  2. Réponses: 1
    Dernier message: 08/06/2007, 10h12
  3. Réponses: 3
    Dernier message: 09/03/2006, 21h38
  4. Réponses: 11
    Dernier message: 22/09/2005, 11h21
  5. [CR]liste de boutons radio
    Par inesfonfon dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 16/09/2004, 10h04

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