2008-09-25 8 views
1

Je voudrais connaître la meilleure façon d'utiliser un contrôle DataGrid lié à une combinaison (jointure) de tables de données d'une manière qui permette à la fois l'affichage, la création de nouvelles lignes dans les tables sous-jacentes et effacement. La grille de données semble offrir ces dernières capacités, mais je n'ai pas trouvé une façon dont je suis content de faire plus que simplement afficher sur une grille et offrir des fonctions de création et de suppression d'éditions séparées spécifiques.L'utilisation de Datagrid provient du serveur SQL

Supposons pour l'amour d'illustration que la base de données contient: -

Tableau client
* CustomerID
* CustomerName

Commander Table
* CustomerID
* OrderLineItem
* OrderLineQuanity

Et que je veux perdre le code client à des fins d'affichage, mais aimerait pouvoir créer de nouveaux clients et supprimer ceux qui existent déjà, peut-être avec un dialogue de confirmation.

Répondre

1

Si la relation est de 1 à plusieurs, vous pouvez utiliser la procédure d'utilisation des détails principaux. [Texte du lien] [1]

[1]: http://msdn.microsoft.com/en-us/library/aa479344.aspx/ « Détail Master »

+0

Je peux voir comment cela permet l'affichage, mais pas l'édition ou la suppression. Supposons, par exemple, que la ligne de commande est correcte en dehors de cela devrait appartenir à un client différent et nouveau! –

1

Si je comprends bien votre question, vous avez une requête qui effectue une jointure de plusieurs tables que vous affichez sur une seule grille. Vous souhaitez que l'utilisateur puisse manipuler cette grille et que les tables sous-jacentes reflètent les modifications.

Une approche consiste à résoudre ce problème consiste à implémenter des procédures stockées pour effectuer les opérations CRUD. Les procédures stockées contiendront la logique pour insérer, mettre à jour et supprimer des enregistrements de toutes les tables requises. Chaque procédure devra avoir un paramètre pour chaque champ lié sur la grille. Définissez les procédures à insérer, mettre à jour et supprimer des commandes sur votre source de données. Par conséquent, imaginez si vous ajoutez un nouvel enregistrement à la grille. La grille appelle la commande insert, transmet les paramètres à la procédure stockée. Ensuite, dans la procédure stockée, vous allez créer la logique pour déterminer si la nouvelle ligne dans la grille nécessite un nouveau client ou s'il s'agit d'un client existant, puis ajustez l'opération en conséquence.

2

CSharpAtl est correct, utilisez un contrôle maître-détail. Un exemple d'utilisation d'un dans une application WinForm est à http://msdn.microsoft.com/en-us/library/y8c0cxey.aspx.

WinForm DataGrids prend en charge l'ajout, la modification et la suppression des enregistrements maître et de détail. En ce qui concerne votre question sur ce qui se passe si vous modifiez un enregistrement de détail afin qu'il corresponde à un nouveau maître; ce n'est pas possible. De par sa conception, une ligne Détail ne contient que des enregistrements correspondant au maître, vous ne pouvez pas (par exemple) modifier une commande pour appartenir à un nouveau client car la ligne Détail ne contient aucune information client. Si vous souhaitez déplacer une ligne Détail vers un autre maître, vous devez créer une nouvelle ligne Détail pour le nouveau maître, copier les données de l'ancienne ligne Détail et supprimer l'ancienne ligne Détail. Si vous êtes ambitieux, vous pouvez prendre en charge les lignes Couper et Coller ou Glisser-Déposer des détails, mais en interne vous devez créer/copier/supprimer.

Questions connexes