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 :

Ajout d'information par ligne et non par x formulaires


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Ajout d'information par ligne et non par x formulaires
    Bonjour,

    Je voudrais savoir selon vous quel est le moyen le plus simple de pouvoir modifier un base de donnée (sql serveur) via un contrôle de visual studio express 2013, soit en VBnet ?

    Car la personne voudrait (veut) un style tableur (un datagridview ??). Actuellement c'est une listview accompagné de contrôle par saisie, après clic sur une ligne de la listview.


    Je puise mes informations dans une tables Article que ne va servir qu'a jouer le rôle d’état afficher quelques informations utile mais on ne touche pas à cette table avec une jointure j'affiche les autres informations utiles à modifier.
    En gros imaginons que j'ai les 5 premières lignes d'affichage, ensuite 4 cellules qui acceptent les modifications.
    La 1er et la 3ème sont les mêmes une cellule contenant un liste de choix déroulante (contenant libre et indisponible) et ensuite un élément de la liste.
    La 2ème et 4ème vont afficher Disponible ou une date si indisponible.

    Sachant que sur une ligne il y a moyen d'obtenir le code de l'objet (son identifiant pour les requêtes)

    Donc en gros quand je modifie la 1er ou la 3ème,
    Si je mets libre je lance un UPDATE directement sur la seconde table avec comme valeur de statut (1 ou 2) "Disponible" et la seconde cellule affiche "Disponible"
    Si je mets indisponible je ne lance pas d'UPDATE de suite mais j'affiche un moyens de saisir une date qui après la saisie va modifier la base en ajoutant la date et le nouveau statut en les affichant ensuite.

    Je voudrais aussi chercher le moyens de faire des insert à la place des update car sinon ça me forcerait à entrer tous les objets (id) dans l'autre table, disponibilité, sans pour autant devoir remplir des informations sur cet objet. En gros juste des lignes contenant code article et le code indisponibilité.

    Merci pour vos suggestions !

    Cordialement

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je me demandais comment faire pour :

    - déclencher un événement Textchanged sur une cellule
    - accéder à la valeur d'une cellule
    - changer la cellule en combobox
    - empêcher l'écriture seulement sur une sélection de cellule

    Car avec ça je pourrais simplement lancer l'update après événement sur la modification de la cellule en récupérant la valeur de l'identifiant de l'article qui serait par exemple en case 1 celle de la case que l'on vient de quitter.
    J'interdis l'écriture, seulement le choix via le calendrier et les élément de la liste déroulante. Un refresh, Il me faut seulement ces informations pour mettre la table à jour.

  3. #3
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Bonjour,

    Que de questions... techniques, conseils, etc... on ne sait par où commencer.

    - déclencher un événement Textchanged sur une cellule

    -> Pour recherche un événement, il a plusieurs moyen, l'un d'entre eux est de se rendre dans le code du formulaire.
    En haut a gauche il y a un combobox contenant tous les contrôles, vous prendrez donc votre datagridview
    Et en haut à droite la liste des évènements disponible... Vous allez chercher un truc du genre : CellValueChanged

    - accéder à la valeur d'une cellule

    -> Me.datagridview1.Item(x, y).Value
    Me.datagridview1.Rows(x).Cells(y).Value

    - changer la cellule en combobox

    -> C'est en fait le type de la colonne qu'il faut changer de TextBoxColumn à ComboboxColumn dans les porpriétés du datagridview


    - empêcher l'écriture seulement sur une sélection de cellule

    -> Les colonnes ont une propriété ReadOnly.


    Par contre si je puis me permettre, ça me paraît compliqué de gérer l'affichage, la saisie, les contraintes, les types de colonnes, les mises à jour dans un Datagridview. A mon avis vous allez vous tirez les cheveux plus d'une fois.
    Normalement, pour gérer les mises à jour des données modifiés dans un datagridview il faut Databinder ce datagridview sur une datatable... Mais ça vient avec son lot de contraintes...

    Pour moi, le plus simple, reste de diviser l'interface en deux :
    Le datagridview pour faire un simple affichage des éléments (et sélection).
    Des contrôles a droites... Se sera tellement plus facile de gérer des contrôles.
    Un bouton de mise à jour pour l'élément en cours de modification, puis après la mise jour vous actualisez le DGV...

    Y'a rien de plus simple pour moi.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour la réponse,

    C'est bien qu'est que j'ai fait découper en deux l'affichage et le contrôle (autres forms et avant sur celui ci).
    En gros j'ai pris une listeview comme j'aurais pu prendre un DGV, le principe est simple un clic sur une ligne, sélectionne l'élément à modifier et les contrôle le gère (saisie dans des textes, des combobox, j'ai même une petite liste dans le sens contraire on ajoute des données dans la base , elle les affiche, ensuite avec un clic sur "DELL" on supprime la ligne sélectionnée dans la base et donc la liste.)
    Mais le problème c'est que la personne ne veut pas travailler comme ça elle veut travailler par ligne et quand elle voit une cellule blanche sur la ligne écrire ses informations dedans. C'est pour cela que je cherche un technique pour le faire pas forcément un DGV...

    Ensuite je ne sais pas encore comment faire pour afficher 4 contrôles alignés avec x lignes d'affichage du DGV ou du LV car sinon ou sur ce principe ce serait plus simple.
    Je sais qu'il faudrait créer les 4 contrôles avec du code, obtenir l'emplacement de la ligne pour ensuite placer les contrôles en face. Mais cela me semble tellement compliqué pour gérer les x*4 boutons (car je ne sais pas combien de ligne apparaissent car le nombre change en fonction du jour)

  5. #5
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Je comprends mieux. Les contraintes des projets expliquent généralement la complexité des programmes.

    Donc effectivement, il n'y a pas 100 000 solutions.

    - Tu peux faire un seul DGV, que tu construits "à la main", colonne par colonne, en changeant les types de colonnes etc..
    Tu charges ta table dans une datatable, et tu remplis le DGV "à la main, ligne par ligne, cellule par cellule.
    Va juste falloir se dépatouiller avec les événements et contrôles dans le DGV

    - Tu aurais pu, comme tu le suggérais, mettre un DGV avec les données (du coup tu peux lié le DGV avec une datatable rempli), et mettre côte à côte un TableLayoutPanel (tableau transparent) contenant les contrôles. Ca facilitera peut être la gestion des contrôles, bien que il faudra les créer dynamiquement... Ce qui n'est pas forcement si dur quand on a compris.

    -> Et autre chose... Si pour chaque ligne, tu as toujours les mêmes contrôles à mettre sur la droite, tu pourrais créer un UserControl, genre un panel contenant les textbox, combobox etc... Et quel que soit la solution (1 ou 2), mettre du coup 1 UserControle par ligne. Du coup les événements (remplissage, edition etc) seront gérer dans le user contrôle, il n'y aura qu'à lié le user contrôle au dgv. Et serait plus simple pour les créer dynamiquement (1 seul user control par ligne).

    Si tu veux plus d'info sur ces méthodes ou si tu as besoins des liens sur des tutos, hésite pas.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai commencé la première méthode généré ligne/ligne et cellule/cellule mais je suis bloqué pour la saisie d'une date après clic sur disponible pour l'instant pour gérer le fait que ce soit bien une date.
    En gros ce que j'ai fait mon DGV est affiché correctement.
    Je peux enregistrer si la personne choisie Libre.

    Pour chaque ligne je veux en plus de l'affichage
    • Un statut 1 un texte automatisé en fonction si libre sinon une date à remplir si indisponible de la liste 1
    • Une liste déroulante 1 (combobox) contenant libre et indisponible
    • Un statut 2 même que pour le 1 sauf avec la liste 2
    • Un autre liste (2) avec libre et indisponible


    C'est pour chaque ligne la même chose.

    Ce que je ne sais pas faire : Automatiser la saisie d'une date => Souvent la personne ne met que le jour et le mois il faudrait ajoute l'année si elle n'y est pas. Ce que j'ai fait jusqu'ici c'est d'obliger de passer une datetimepicker.

    Je ne sais pas quelle méthode parmi les 3 est la plus simple ou la plus optimisé pour mon code. Par contre si il y a déjà des éléments il faut aussi les afficher dans les statuts 1/2 et listes déroulantes 1/2.

    Merci.

  7. #7
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Le datetimepicker est très bien je trouve. L'utilisateur n'a pas à utiliser son clavier pour saisir un date..
    En plus il n'y a pas de formatage à faire. Tu peux récupérer la date sélectionnée facilement.

    Pour moi c'est le mieux.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je voudrais savoir comment faire pour justement l'utiliser car pour l'instant j'utilise une cellule de dgv et il faudrait donc passer par cette cellule pour utiliser le datetimepicker ou par la combobox une fois indisponible choisie car pour l'instant ça me fait une erreur de cast sur deux event (Informations supplémentaires*: Impossible d'effectuer un cast d'un objet de type 'System.EventArgs' en type 'System.Windows.Forms.DataGridViewCellEventArgs').
    J'essai juste aprés un clic sur cellule de sélectionner le datetimepicker et après un lostfocus (sur la datetp) de remplir la valeur dans la cellule je ne sais pas si c'est la meilleure façons de le faire.

    Ensuite je ne suis pas contre refaire mon formulaire avec un TableLayoutPanel/DGV/UserControle si c'est vraiment plus utile de le faire.

  9. #9
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Du coup je pense que rester sur le DGV sera plus rapide.
    Il faut juste trouver les bons types de colonnes et les bons événements.

    En fait il semble qu'avoir une colonne de type DateTimePicker est un peu compliqué.
    Donc tu peux rester sur le type classique (TextBoxColumn), mais tu peux indiquer le format des chaînes attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.Columns[0].DefaultCellStyle.Format = "dd/MM/yyyy"
    Il faut voir quel comportement il aura si la date est pas rempli entièrement, et adapter le code (compléter etc..)
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci,

    Je pense avoir réussi à faire tout ce que je voulais.


    Bonne journée

    Cordialement ByssyB

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

Discussions similaires

  1. Webi Rich Client - Filtrer par ID et non par ligne
    Par keskonkai dans le forum Webi
    Réponses: 0
    Dernier message: 20/09/2013, 12h17
  2. Réponses: 4
    Dernier message: 22/04/2013, 16h43
  3. Réponses: 1
    Dernier message: 07/05/2011, 04h34
  4. [XL-2000] Calcul par ligne et non par page.
    Par j.cedric dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 05/01/2010, 17h29
  5. tri d'un répertoire par type et non par ordre alphabétique
    Par panach91 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/02/2008, 10h02

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