2010-06-21 6 views
0

J'utilise la liaison de données (via LINQ to SQL) sous forme de C# et je dois savoir comment mettre à jour le BindingContext lorsqu'un nouvel élément est ajouté à ma table.Méthode de mise à jour de la mise à jour de la connexion .Net

Plus précisément, j'ai un formulaire qui affiche les propriétés d'un projet dans divers domaines. L'utilisateur peut traverser vers différents projets via la zone de liste déroulante du nom du projet. Au bas du formulaire, j'ai un bouton Créer et un bouton Supprimer. Le problème se présente lorsque l'utilisateur crée ou supprime un projet car le contexte de liaison n'est pas mis à jour avec la nouvelle liste de projets. Par conséquent, l'utilisateur ne peut pas traverser vers le nouveau projet ou pire encore, l'utilisateur peut traverser à et tenter de modifier un projet qui a été supprimé.

Je souhaite que je pourrais appeler une méthode après une créer ou un supprimer de telle sorte que la liaison serait mise à jour. Quelque chose comme this.BindingContext[db.Projects].UpdateDammit().

Merci pour votre aide, JB

+0

Il n'y a pas de formulaires C#. WinForms/WPF ou ASP.NET? –

+0

J'utilise Windows Forms. – JnBrymn

Répondre

0

Ma solution ultime était de créer deux méthodes pour lier et puis plus tard redéfinissez les données:

private void bind() 
{ 
    object dataSource = db.Projects.OrderBy(p => p.ProjectNo); 
    projectNoTextBox.DataBindings.Add("Text", dataSource, "ProjectNo"); 
    projectNameTextBox.DataBindings.Add("Text", dataSource, "ProjectName"); 
    //etc. 
} 
private void rebind() 
{ 
    projectNoTextBox.DataBindings.Clear(); 
    projectNameTextBox.DataBindings.Clear(); 
    //etc. 
    bind(); 
} 

Dans la méthode sous forme de charge je lier les données, puis après un utilisateur créé ou supprimé un projet je relier les données. Mon expérience avec la liaison de données .Net est que c'est une grande boîte noire confuse. Je pense que si je le comprenais complètement, cela me ferait gagner énormément de temps - après tout, chaque fois que j'apprends quelque chose de nouveau sur la liaison de données, la longueur de mon code GUI est réduite de moitié! Cependant, je me retrouve souvent inconscient de savoir pourquoi je suis en train d'avoir un comportement aberrant. Même avec ça ... je parie qu'il y a un moyen plus simple de le faire.

0

Assurez-vous que vous liez à peut notifier l'interface utilisateur que les changements ont été effectués. Si votre contexte de liaison est une collection, vous pouvez utiliser ObservableCollection

Si vous liez des éléments particuliers de la collection, vous devez vous assurer que les éléments implémentent INotifyPropertyChanged et que vous déclenchez une notification lorsqu'une valeur est modifiée.

+0

Je suppose que vous apportez également des modifications à la base de données via Linq2Sql. La référence Table dans BindingContext provient-elle du même contexte de base de données que celui utilisé pour les mises à jour? – Vitalik

Questions connexes