Création de fenêtre avec sous-formulaire (?)

Signaler
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015
-
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015
-
J'avais déjà posté une discussion concernant ce projet mais celui-ci comprenait plusieurs questions, ce qui est interdit (j'avais complètement raté ce point du règlement, je l'avoue) donc, à la demande du staff (excusez-moi encore), je poserai une question par discussion en recopiant le texte de présentation du projet à chaque fois, pour connaître tous les détails du problème. Merci de votre compréhension.


Bonjour à tous,

J'avais déjà posté sur ce forum il y'a quelques temps afin d'obtenir votre aide à propos du choix du langage pour la réalisation d'un projet.

Cependant j'ai pas mal de difficultés en développement et j'ai vraiment pris du retard à cause d'autres petits travaux qui se sont ajoutés au fur et à mesure, la deadline arrive donc à GRANDS pas !

L'application que je dois réaliser est une sorte de répertoire regroupant tous les fournisseurs d'une entreprise ainsi que leurs produits, leurs coordonnées (un fournisseur pouvant avoir plusieurs coordonnées différentes, selon le contact), etc.


En bref, les produits sont repartis dans plusieurs sous-familles. Un fournisseur peut faire partie de plusieurs sous-familles selon ses produits (Admettons qu'un fournisseur fournisse un produit 1 appartenant à la sous-famille A et un produit 2 appartenant à la sous-famille B, on considère que le fournisseur appartient à ces deux sous-familles si vous voyez ce que je veux dire).

Ainsi, le menu principal de l'application devrait afficher une arborescence (à la manière des dossiers dans Windows, un TreeView c'est ça ?) permettant de déployer les sous-familles puis de cliquer sur le fournisseur souhaité. De plus, plusieurs boutons sont affichés dans ce menu, permettant d'accéder à des fenêtres de recherche par fournisseur/produit/sous-famille.

Dans le cas de la recherche par fournisseur et sous-famille, une ListBox est triée pour affiché le/les fournisseurs par rapport à un choix effectué dans un ComboBox.

Dans le cas de la recherche par produit, une fois le choix fait dans le ComboBox, une fenêtre contenant une ListBox s'affiche en indiquant tous les fournisseurs proposant le produit choisi.

Une fois le fournisseur choisi (via la recherche ou l'arborescence), une fenêtre sera affichée et regroupera ses différents contacts (responsable, commercial, secrétaire, etc.) ainsi que leurs coordonnées (+ en cliquant sur l'adresse mail, on devrait directement pouvoir envoyer un mail). Je pense, ici, les afficher sous forme d'onglets, un onglet correspondant à un contact.

Dans cette même fenêtre devrait figurer une liste des produits (sans doute dans un tableau). Ce tableau disposera d'une colonne « Libellé » mais également « Fiche technique » qui devrait permettre de télécharger un fichier PDF ou d'en uploader un si ce n'est pas déjà fait (est-ce que cela est possible ?) en sachant que chaque produit disposera d'une ou plusieurs (si la si le fournisseur fournit plusieurs marques pour un même produit) fiche(s) technique(s) pour un fournisseur donné (et donc, la/les fiche(s) technique(s) sera/seront différente(s) selon le fournisseur, même si le produit dispose du même libellé).

Enfin, il sera possible d'ajouter/modifier/supprimer les produits, familles, sous-familles, fournisseurs mais seulement pour DEUX utilisateurs. Ainsi, je vais devoir créer un formulaire d'authentification pour que tout le monde ne puisse pas modifier les données.

Le but de l'application est d'être le plus simple possible, le plus accessible. Donc je me limite à ce qui a été demandé.


Suite à mon précédent post, j'ai préféré utiliser Visual Basic (via Visual Studio 2013) qui me semble adapté à des applications de type « répertoire » ainsi que SQL Server.

Pour le moment, j'ai réalisé la BDD avec SQL Server Management Studio dont voici le schéma :




J'ai ensuite lié la BDD au projet (« source de données ») en utilisant l'assistant puis créé les fenêtres de recherche (en liant le ComboBox et la ListBox aux champs correspondant, directement depuis l'assistant, que je trouve plus pratique que le code).


Je ne pense pas que ce projet soit compliqué, cependant j'ai des difficultés pour développer et donc, j'aurais quelques petites questions.

Comment puis-je faire pour la création de la fenêtre Fournisseur, notamment au niveau de l'ajout de l'encadré des Contacts (sous forme d'onglets de préférence, en espérant que les onglets s'ajoutent automatiquement lorsque quelqu'un ajoute un contact) et le tableau des Produits ? J'avais réalisé un prototype avec Access, et il suffisait d'ajouter un sous-formulaire lié aux tables Contacts et Produits, mais je présume que ce n'est pas si facile ici.


Voilà, c'est tout (pour l'instant). Je sais que cette question peut paraître ridicule, mais je suis vraiment un novice...

Je vous remercie pour le temps que vous m'accordez.

Cordialement.


PS: si le screen n'est pas assez grand, je peut le poster via un hébergeur. Si vous souhaitez plus de détails, je serais également ravi de vous les donner !

15 réponses

Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Bonjour, j'ai rendu ton image clivable, ça permet de l'afficher en taille réelle dans une autre age, voir ici, comment faire.
Par contre il faut que l'image soit plus grande pour que cela ait de l'intérêt....
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
J'ai ensuite lié la BDD au projet (« source de données ») en utilisant l'assistant puis créé les fenêtres de recherche (en liant le ComboBox et la ListBox aux champs correspondant, directement depuis l'assistant, que je trouve plus pratique que le code).

Je pense que c'est une erreur car du coup tu n'as pas d'objet de manipulation de données, tes conteneurs sont directement la liste ou le combobox.

Je te conseille de regarder ici le principe du binding, le tuto est écrit avec des List<T> comme source de données mais ça marche aussi avec des dataset.

Une fois que tu as une source manipulable, tu peux faire des recherches avec Linq, j'ai posté un aperçu ici, toujours avec des List<t>.

Quand tu ajoutes un enregistrement à ta source, il faudra mettre à jour ta base de données (mais là je ne maitrise pas).
Regarde dans les sources, il y a des exemples.

Pour ta fenêtre Fournisseur, il va te falloir passer des infos d'une form à l'autre.
Il y a un bon exemple en C# ici que tu pourras traduire en VB.Net avec un traducteur en ligne (il reste des fois quelques petites bugs mais ça donne une bonne piste), comme http://www.developerfusion.com/tools/convert/csharp-to-vb/ par exemple.
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

Bonjour,

Merci beaucoup Whismeril mais je comprend pas, l'image d'origine est assez grande..

Et merci beaucoup pour ta réponse, je vais faire ça et je reviendrais vous dire ce qu'il en est.

Encore merci.

PS: Voici un lien de l'image uploadé via un hébergeur externe
http://i.imgur.com/nWSLoom.png
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Tu as écrit
PS: si le screen n'est pas assez grand, je peut le poster via un hébergeur. Si vous souhaitez plus de détails, je serais également ravi de vous les donner !

Je te montrais juste que cela n'est pas nécessaire, tu peux charger une image de grande taille, par défaut elle sera réduite dans le post, mais en la rendant cliquable, elle pourra être affichée en pleine définition.

Posté depuis CCM Live forum pour iPhone/iPad
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

Bonjour !

Encore merci pour tes réponses, apparemment c'est bien ce que j'avais fait pour alimenter la List, il me semblait bien avoir vu un objet BindingSource s'ajouter au projet.

Je travaille actuellement sur la fenêtre Fournisseur. J'ai trouvé quelques tutos parlant d'un DataGridView, je vais utiliser ça et le lien que tu m'as donné.
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

J'ai un peu de mal à lier le ComboBox et la ListView.

Je pense plutôt ouvrir une petite fenêtre qui permettra à l'utilisateur de sélectionner un fournisseur dans un ComboBox. Dès que l'utilisateur clique sur le nom du fournisseur dans le ComboBox, la fenêtre Fournisseur s'affiche directement sur le fournisseur choisit.

Je suis sûr que c'est faisable en quelques lignes, mais je ne trouve rien et commence à désespérer...

Cordialement.
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Alors pour l'exemple j'affiche le nom du fournisseur dans un Textbox posé sur Form2.
Je commence par écrire un constructeur avec paramètre
Public Class Form2
    Sub New(NomFournisseur As String)'passage du nom du fournisseur en paramètre du constructeur
        InitializeComponent()
        TextBox1.Text = NomFournisseur
    End Sub

End Class


Maintenant je remplis le combobox1 de la form1 (sans binding)
        ComboBox1.Items.Add("toto")
        ComboBox1.Items.Add("titi")
        ComboBox1.Items.Add("tata")


Et dans l'événement SelectedIndexChanged du combobox j'ouvre une nouvelle instance de Form2 avec le paramètre.
    Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim frm As New Form2(ComboBox1.Text)
        frm.ShowDialog() 'ShowDialog bloque la nouvelle fenêtre au dessus de celle qui appelle, mais si tu ne veux pas ce comportement, alors c'est Show

    End Sub
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

Ah parfait ! C'est exactement ce que je veux. Je vais essayer tout ça.

Pour le ComboBox du form1, il est déjà bindé, ça marchera quand même si je ne remplie pas le combobox comme tu le fais ?
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Un petit peu plus loin, j'écris une classe Fournisseur
Public Class Fournisseur
    Sub New(Nom As String, ID As Int32)
        Me.Nom = Nom
        Me.ID = ID

    End Sub

    Public Property Nom() As String

    Public Property ID() As Int32
End Class


Je modifie le constructeur de Form2 comme suit:
Public Class Form2
    Public Sub New(LeFournisseur As Fournisseur)
        InitializeComponent()
        TextBox1.Text = LeFournisseur.Nom
        TextBox2.Text = LeFournisseur.ID.ToString()'j'ai ajouté un textbox
    End Sub

End Class



Je crée une liste et binde le combobox sans l'objet databindingsource
        Dim mesFournisseurs As New List(Of Fournisseur)
        mesFournisseurs.Add(New Fournisseur("Toto", 1))
        mesFournisseurs.Add(New Fournisseur("Titi", 2))
        mesFournisseurs.Add(New Fournisseur("Tata", 3))

        ComboBox1.DataSource = mesFournisseurs
        ComboBox1.DisplayMember = "Nom" 'affichera la propriété Nom


et je modifie l'événement du combo comme ceci:
   Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim frm As New Form2(ComboBox1.SelectedItem)
        frm.ShowDialog() 'ShowDialog bloque la nouvelle fenêtre au dessus de celle qui appelle, mais si tu ne veux pas ce comportement, alors c'est Show

    End Sub

Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

Merci

Mais si je n'utilise pas de databindingsource, le combobox n'est pas lié à la BDD si ?
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
SI tu as utilisé l'assistant normalement oui.
Mais c'est une partie que je ne maitrise pas je n'ai pas de BDD dans mes applis.
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

D'accord.

Je suis vraiment paumé là. Ça doit pourtant pas être compliqué...
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Pour te faire un exemple il fallait bien que je remplisse le combobox.
Je t'ai montré deux pistes, la deuxième a l'avantage de transférer un objet fournisseur, donc toutes les infos dont tu pourrais avoir besoin, mais après c'est à toi de voir.

Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

Oui je sais, tu m'as bien aidé, mais j'ai vraiment du mal à mettre en place tout ça.

Je vais essayer de me débrouiller avec ça.

Merci encore !

PS: D'ailleurs, où dois-je placer cette partie ?

Public Class Fournisseur
Sub New(Nom As String, ID As Int32)
Me.Nom = Nom
Me.ID = ID

End Sub

Public Property Nom() As String

Public Property ID() As Int32
End Class
Messages postés
15441
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Dans un fichier neuf
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

J'ai un peu laissé de côté la recherche d'enregistrement pour le moment afin de revenir à la création de la fenêtre Fournisseur et des "sous-formulaire".

J'ai réussi à faire en sorte de permettre à l'utilisateur de sélectionner un fournisseur dans le ComboBox et afficher, dans la même fenêtre, les Contacts correspondants, dans un DataGridView (comme je souhaitais le faire depuis le départ).
Par la même occasion, cela fera office de "formulaire de recherche" pour le fournisseur.

Il suffisait d'utiliser le DataBinding pour assigner les fournisseurs au ComboBox (Display = Nom, Value = ID) et d'assigner au DataGridView la Foreign Key correspondant à la relation entre les fournisseurs et les contacts. Et tout à l'air de bien fonctionner.

Par contre, quand j'utilisais Access, la création de sous-formulaire permettait d'afficher les contacts sous forme de champs, avec les flèches permettant de naviguer entre les différents Contacts, c'est ce que j'aimerais faire ici, étant donné que le DataGridView n'affiche que des colonnes. Est-ce possible ?

J'espère avoir été assez clair dans mes explications.

Cordialement.
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

Bonjour,

Petit UP
Messages postés
32
Date d'inscription
lundi 23 juin 2014
Statut
Membre
Dernière intervention
11 juin 2015

UP