2010-02-03 7 views
1

J'ai une fenêtre WPF avec plusieurs TextBoxes dessus.Comment mettre à jour automatiquement TableAdapter lié à TextBox

J'ai un jeu de données XSD attaché à une base de données de serveur SQL, et la fenêtre est lié à une ligne de la TableAdapter:

public partial class PersonForm : Window 
    { 
    public PersonForm(int id) 
    { 
     InitializeComponent(); 

     MyDatasetTableAdapters.personTableAdapter tableAdapter = 
     new MyDatasetTableAdapters.personTableAdapter(); 

     personRow row = tableAdapter.GetPersonById(id); 

     this.DataContext = row; 
    } 

    ... 

    } 

Les zones de texte sont liés comme ceci:

<TextBox Name="lastName" Text="{Binding Path=lastname}" /> 

Ces Les liaisons de liaison fonctionnent et les zones de texte sont correctement renseignées avec les données de la base de données SQL, mais lorsque la zone de texte est modifiée, les modifications ne sont pas renvoyées à la base de données.

J'ai un bouton lorsque vous cliquez dessus appels

myTableAdapter.Update(myRow); 

Cette mise à jour ne succès la base de données SQL.

Ma question est: Quels changements dois-je faire pour que les zones de texte mettent automatiquement à jour la base de données automatiquement (sans avoir à appeler explicitement TableAdapter.Update).

De même, est-ce la bonne façon de lier un formulaire à une base de données dans WPF?

Répondre

0

J'ai découvert un moyen d'accomplir cela.

En définissant la NotifyOnSourceUpdated propriété sur True sur la textbox comme ceci:

<TextBox Name="lastName" Text="{Binding Path=lastname, NotifyOnSourceUpdated=True}" /> 

Je suis alors en mesure de mettre à jour l'adaptateur de table dans le cas SourceUpdated de la fenêtre comme ceci:

private void Window_SourceUpdated(object sender, DataTransferEventArgs e) 
{ 
    myTableAdapter.Update(myRow); 
} 

Cela semble bien fonctionner. Y a-t-il une meilleure façon d'accomplir cela?

Y at-il un moyen d'activer le NotifyOnSourceUpdated sur toutes les zones de texte facilement sans avoir à le spécifier sur chaque TextBox?

Questions connexes