2009-07-01 6 views
2

Aucune base de données impliquée ici, je crée mon propre datatable dans le code, et le lie à une zone de texte et à une grille de données.En C# (winforms) comment synchroniser un textbox et un datagridview afin que les changements apparaissent dans l'autre

Lorsque je modifie l'enregistrement en cours dans la grille, la zone de texte est mise à jour à la valeur actuelle.

Mais quelle est la meilleure façon de synchroniser les changements entre les valeurs dans la zone de texte et la grille de données. Si j'en change un alors ça ne change pas l'autre à moins que je ne retourne à un autre disque.

Je peux le faire en ajoutant un datagrid.Refresh() à l'événement Validated textbox, et vraisemblablement quelque chose à l'événement CellValidated sur la grille de données, mais il semble que je puisse aller à ce sujet dans le mauvais sens.

Edit:

Sur la base de la réponse ci-dessous, ma question devrait être: est-il un moyen d'avertir les contrôles liés des changements dans un DataTable ils sont liés, ou doit le code utiliser un BindingList ou le faire manuellement à la place.

+1

Il semble s'appeler ds.AcceptChanges() où ds est mon ensemble de données dans les divers événements validés au moins met à jour les autres valeurs. Je ne sais pas si c'est le meilleur moyen. –

Répondre

2

Je vous suggère d'utiliser un BindingList<T> plutôt qu'un DataTable, où T est votre « objet métier » qui représente chaque enregistrement affiché dans la grille. Ensuite, votre objet métier doit implémenter INotifyPropertyChanged et déclencher NotifyPropertyChanged chaque fois que la valeur de la zone de texte change, soit en liant la propriété souhaitée à TextBox.Text soit en mettant à jour la propriété appropriée de l'objet métier sélectionné chaque fois que TextBox.TextChanged se déclenche.

+0

Merci, c'est une approche intéressante que j'essaierai probablement (un jour!). Mais j'aimerais connaître la meilleure façon d'utiliser un datatable - il semble vraiment qu'il devrait y avoir un moyen facile de le faire. –