2009-07-28 8 views
3

Je développe une application de formulaire Windows à partir d'une application de base de données de notes Lotus très basique. A titre d'exemple de Il existe une table "Jobs" une table "Parts" et une table de relations many-many "Job_Parts" avec JobID et PartID. Lors de l'ajout d'un nouvel enregistrement de travail, j'ai besoin d'une méthode de saisie que l'utilisateur doit sélectionner dans la liste de pièces. Je pense qu'il s'agit d'une liste de cases à cocher permettant à l'utilisateur de cocher rapidement les pièces du travail. J'ai fait quelque chose de similaire dans asp.net et lier la liste de cases à cocher au tableau "Parts", puis capturer des sélections et les ajouter à un nouvel enregistrement de plusieurs à plusieurs devrait fonctionner. J'ai besoin d'aide lorsque vous montez l'enregistrement du travail pour éditer, comment lier ensuite les enregistrements de pièces sélectionnés dans les nombreux enregistrements de relation dans la liste de cases à cocher.Saisie de données pour une relation plusieurs à plusieurs dans les formulaires Windows

La deuxième requête peut ne pas correspondre à un contrôle de liste de cases à cocher Lotus Notes par rapport aux formulaires Windows. Dans le contrôle des notes de lotus, un utilisateur peut facilement utiliser une touche dans la liste de cases à cocher en tapant les premières lettres d'une partie, sélectionner une valeur puis appuyer sur une virgule pour commencer à taper la partie suivante.

Est-ce que quelqu'un a vu quelque chose comme ça, ou toute autre façon de rapidement (avec un clavier) sélectionner de nombreuses données. Comme je suis sur le point de soumettre ceci ... Je commence à ajouter des étiquettes à la question et me rends compte que c'est la méthode parfaite et rapide de faire ce dont j'ai besoin. Est-ce que quelqu'un a fait la même chose en winforms, si oui, pouvez-vous m'envoyer quelques conseils?

+0

Avez-vous besoin d'aide pour lier des données au Many-To-Many ou pour ajouter des tags avec des virgules? Je suis confus quant à quelle question essayer et répondre. –

Répondre

0

La manière standard de l'implémenter est appelée un formulaire maître-détail; Si vous recherchez cela, vous trouverez de nombreuses implémentations.

Dans votre cas, il y aurait une grille principale de travaux et une deuxième grille de détails de pièces, en cliquant sur un travail montrera toutes les pièces. Vous pouvez utiliser les contrôles de grille WinForms standard pour ajouter, modifier et supprimer des lignes.

Si vous souhaitez autoriser la navigation au clavier, vous pouvez autoriser la commutation entre les grilles avec Tab et entre les lignes et colonnes d'une grille avec les touches fléchées.

Si vous souhaitez utiliser une interface semblable à une case à cocher, vous pouvez lister toutes les pièces possibles pour chaque travail et cocher les pièces souhaitées à l'aide de la barre d'espacement.

+1

Merci d'avoir répondu ... J'ai essayé d'utiliser la grille winforms pour la liste des pièces et cela fonctionne. Mais cela laisse beaucoup à désirer du point de vue de l'utilisabilité. Je cherche en fait à implémenter quelque chose de plus comme l'entrée de balise dans Stack Overflow qui permet à l'utilisateur de taper partiellement une partie et cela arrive. Je vais utiliser quelque chose de similaire à cela. http://stackoverflow.com/questions/133049/control-for-tags-with-auto-completion-in-winforms – studiothat

1

Pas sûr que je peux décrire verbalement, mais voilà:

Au sommet de la forme est une liste d'emplois, peut-être un combobox ou ListBox, selon la fréquence que vous pensez que l'utilisateur sera naviguer entre emplois.

Ci-dessous, à gauche, une liste de toutes les pièces disponibles. Sur la droite, une liste de pièces est actuellement associée au travail. Entre ces deux zones de liste, un bouton "ADD >>" et un bouton "< < REMOVE". Si une seule partie de chaque partie est autorisée, par tâche, vous pouvez déplacer les pièces entre les deux zones de liste: lorsque l'utilisateur ajoute une pièce, elle est supprimée de la liste des pièces disponibles et apparaît dans la liste des pièces, et inverser si l'utilisateur supprime une partie. Cette approche permet à l'utilisateur de maintenir la touche Ctrl enfoncée et de sélectionner plusieurs parties à ajouter ou à retirer en une seule fois.

espoir qui aide

0

Je travaille pour une entreprise de contrôle des semences et nous avons le même format de données. C'est comme ça qu'on fait.

Ajout d'un nouvel emploi:

J'utiliser une zone de liste lié aux données (en utilisant un objet BindingSource) pour votre liste de pièces et une boîte de filtre en haut thusly

--------------------- 
| Filter (Text Box) | 
--------------------- 
| List Box   | 
|     | 
|     | 
--------------------- 

Vous pouvez puis utilisez la propriété Filter sur l'objet BindingSource pour filtrer la liste affichée dans la zone de liste. J'aurais alors un bouton «Ajouter» près de lui pour permettre à l'utilisateur de sélectionner la pièce et de l'ajouter à une autre zone de liste contenant les pièces sélectionnées. Il vous sera probablement plus facile d'utiliser les propriétés DisplayMember et ValueMember de la ListBox pour ajouter les parties car l'index ne vous aidera pas beaucoup et comparer les chaînes ne vaut généralement pas le coup.

Je pense que cette solution devrait répondre à vos deux demandes.

Questions connexes