[.Net] Mise à jour de base de données à partir d’un dataset.
Voilà le problème qui m’a été levé par un client :
Je souhaite travailler avec des dataset car j’ai basé ma solution là-dessus.
Je voudrais écrire le moins de code possible.
Je voudrais avoir 2 onglets un qui contient une grille qui liste le contenu de 3 des colonnes de ma table et dans le deuxième onglet je voudrais des champs texte, check box ou datetime qui correspondent aux autres champs de ma table. Je choisis une ligne dans ma grille et j’ai les champs renseignés en fonction dans le deuxième onglet. Au dessous de mes2 onglets je veux un bouton pour mettre à jours les valeurs que j’aurais modifiées.
Comme ça je dirais que c’est simple mais quand je fais un « dataadapter.update (dataset.matable) », je vois bien que le dataset a pris en compte mes modifications mais rien ne se met à jour dans la table.
Je fais le test sur la solution du client et effectivement les modifications du dataset était rafraichie mais lors du test « dataset.haschanges() » effectivement Visual studio fait comme si de rien n’était et donc ne fait pas de update. L’update ce fait néanmoins si on fait les modifications directement dans la grille.
Voici la solution que j’ai proposée :
On refait l’interface avec 2 onglets et un dataset.
Ensuite on va tout gérer avec la fenêtre source de données qui se trouve dans le menu Visual studio sur le sous menu données on choisit afficher les sources de données.
Dans le dataset « MonDataset » on a la table « ShoppingCartItem», on fait glisser donc cette table sur l’interface ce qui nous donne une grille contenant toutes les colonnes de la table donc il ne nous restera plus qu’à rendre invisible les colonnes non désirées (ici nous la laisserons pour voir les résultats).
Malencontreusement, on aussi un « bindingnavigator » qui vient gâcher le paysage et nous masquer les onglets donc on va le mettre en arrière plan.
Mais on se servira de la fonctionnalité d’enregistrement fournie par ce composant.
private void shoppingCartItemBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.shoppingCartItemBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.monDataSet);
}
Pour ce faire,il suffit de spécifier que le gestionnaire d’évènement pour l’évènement click du bouton sera la méthode définie ci-dessus.
Un dernier point, positionner les champs dans l’onglet numéro 2. C’est toujours pareil on fait des glisser déplacer depuis la fenêtre source de données vers l’interface.
Bien maintenant on teste tout ça :
On voit que la deuxième lignes à un id de 4 dans la première colonne et une quantité à 5 donc on va mettre cette quantité à 6 pou faire le test.Donc on sélectionne la deuxième ligne et on change d’onglet.
Et on clique sur le bouton « button1 » pour enregistrer dans la base de données.
Pour vérifier on ferme la solution et on la redémarre, pour voir les valeurs dans la grille.
C’est bon et avec ZERO ligne de code, chez nous le client est roi !!!