2010-12-01 5 views
2

J'ai un problème et je n'arrive pas à le résoudre. Je pensais que quelqu'un ici pourrait aider.Ajout de lignes par programmation à un DataGridView lié à des données?

J'ai un formulaire qui a un DataGridView des clients. Maintenant, je veux ajouter plusieurs clients à ce DataGridView sans réellement les ajouter à la base de données. C'est parce que le client doit être capable de créer une liste de clients et lorsque c'est fait, ajoutez-les tous en même temps.

J'ai essayé:

string[] array = {"Microsoft", "Redmond", "Something"} 
dataGridView.Rows.Add (array); 

Maintenant, cela ne peut être fait parce que je reçois une exception en disant quelque chose dans les lignes de vous ne pouvez pas ajouter des lignes à un programatically DataGridView qui est lié aux données.

Maintenant, j'ai également lu que cela peut être résolu en utilisant un adaptateur de table pour insérer les lignes au lieu de les ajouter directement via. un DGV. Mais ce n'est pas possible car j'utilise des en-têtes personnalisés dans la DGV parce que les données existantes sont récupérées via JOIN. Si je les ajoute via un TableAdapter, je reçois une exception qui ne correspond pas au schéma de la table des bases de données.

Maintenant, je suis vraiment perdu ... Quelqu'un connaît une solution (à mi-chemin) élégante à ce problème?

Merci

+1

De quel type est la DataSource liée à la DGV? – BFree

+0

Il est du type DataSet. – vanneto

Répondre

1

Liez votre DGV à un BindingList<YourObject>, où YourObject peut être une classe simple avec des propriétés reflétant votre schéma de base de données. Initialement peupler le BindingList de la base de données, et la DGV ajoutera automatiquement YourObject instances à la liste. Lorsque vous êtes prêt à valider les modifications, faites-le manuellement à partir de BindingList.

1

Afin de montrer les lignes, faites juste un UNION (-comme) l'action avant la liaison de données. C'est-à-dire obtenir votre liste d'enregistrements, ajouter les spéciaux, puis databind.

La mise à jour nécessitera également des actions spéciales. Mais avec un manque total de détails sur vos infrastructures de données, il est impossible de dire quoi.

+0

Je vais essayer de l'expliquer du mieux que je peux. J'ai un lien qui a la structure suivante: {LinkID, CustomerID, Type}. Maintenant, le DataGridView que j'ai doit afficher le nom du client, pas ID (c'est pourquoi j'ai JOINs). Maintenant, j'ai un DGV avec les en-têtes | ID | NameOfCompany | mais la structure de table sous-jacente est différente. Les clients sont choisis dans un autre formulaire. Donc, fondamentalement, ce que je veux: la DGV est liée aux données. Ajouter des valeurs par programme, lorsque l'utilisateur a fini d'ajouter des liens (et les éditer), les ajouter tous à la base de données ... – vanneto

+0

Mieux vaut ajouter de telles informations à la question. Vous pouvez ajouter des enregistrements spéciaux à un DataTable après le Adapter.Fill et les supprimer avant la mise à jour. Mais tout à fait un 'BindingList ' pourrait être aussi facile. –

Questions connexes