C# rafraîchissante zone de texte à partir de BindingSource

J'ai de la difficulté rafraîchissante des contrôles windows forms qui sont à l'aide d'un BindingSource objet. Nous avons un CAB/MVP/SCSF client que j'ai (en fait “nous” car c'est un effort d'équipe) sont en développement qui interagissent avec les services WCF en cours d'exécution sur un serveur distant. (C'est notre première tentative à cet égard, nous sommes donc dans un mode d'apprentissage). L'un des appels (du Présentateur) pour le service retourne un DataSet qui contient 3 tables de données, appelé “Contrat”, “Prêt” et “Conditions”. Chaque table contient une ligne. Lorsque le service retourne le jeu de données, nous l'enregistrons dans le SmartPart/Afficher dans une variable de membre de classe, par l'appel d'une fonction dans la vue BindData() et en passant le jeu de données à la vue à partir de la classe presenter;

private System.Data.DataSet _ds = null;
public void BindData(System.Data.DataSet ds)
{
    string sErr = "";
    try
    {
        _ds = ds;  //save to private member variable

        //more code goes down here
    }
}

Nous essayons de lier chacune des trois tables de données à un assortiment de Windows Forms zones de texte, MaskedEditBoxes, et Infragistics UltraComboEditor Déroulant comboboxes Nous avons créé trois BindingSource objets, un pour chaque Table de données à l'aide de la VS2008 IDE.

private System.Windows.Forms.BindingSource bindsrcContract;
private System.Windows.Forms.BindingSource bindsrcLoan;
private System.Windows.Forms.BindingSource bindsrcTerms;

Nous lient les valeurs comme ceci

if (bindsrcContract.DataSource == null)
{
    bindsrcContract.DataSource = _ds;
    bindsrcContract.DataMember = contract”;

    txtContract.DataBindings.Add(new Binding("Text", bindsrcContract, "contract_id", true));                       

    txtLateFeeAmt.DataBindings.Add(new Binding("Text", bindsrcContract, "fee_code", true));

    txtPrePayPenalty.DataBindings.Add(new Binding("Text", bindsrcContract, "prepay_penalty", true));

    txtLateFeeDays.DataBindings.Add(new Binding("Text", bindsrcContract, "late_days", true));
}

if (bindsrcLoan.DataSource == null)
{
    bindsrcLoan.DataSource = _ds;
    bindsrcLoan.DataMember = loan”;

    mskRecvDate.DataBindings.Add(new Binding("Text", bindsrcLoan, "receive_date", true));

    cmboDocsRcvd.DataBindings.Add(new Binding("Value", bindsrcLoan, "docs", true));     
}

Cela fonctionne lorsque nous ne la première lecture de ce service et obtenir un dataset. L'information est affichée sur les contrôles du formulaire, nous pouvons le mettre à jour à l'aide de la forme, et puis “enregistrer” en passant la modification des valeurs de retour du service WCF.

Ici, c'est notre problème. Si vous sélectionnez un autre prêt de la clé et de faire le même appel pour le service et obtenir un nouveau jeu de données, à nouveau avec 3 tables avec une rangée de chacun, les contrôles (zones de texte, masked edit box, etc...) ne sont pas mis à jour avec les nouvelles informations. Notez que le smartPart/View n'est pas fermé ou quoi que ce soit, mais reste chargé dans entre les appels vers le service. Sur le second appel, nous ne sommes pas de reliaison les appels, mais simplement essayer d'obtenir les données pour actualiser à partir de la mise à jour du jeu de données.

Nous avons essayé tout ce que nous pouvons penser, mais clairement il nous manque quelque chose. C'est notre première tentative à l'aide du contrôle BindingSource. Nous avons essayé

bindsrcContract.ResetBindings(false);

et

bindsrcContract.ResetBindings(true);

et

bindsrcContract.RaiseListChangedEvents = true;

et

for (int i = 0; i < bindsrcContract.Count; i++)
{
    bindsrcContract.ResetItem(i);
}

Ainsi que la réinitialisation de la propriété DataMember de nouveau.

bindsrcContract.DataMember = Contract”;

Nous avons regardé beaucoup d'exemples. De nombreux exemples font référence à la BindingNavigator mais depuis les tables de données seulement une ligne, nous ne pensions pas que nous avons besoin. Il y a beaucoup d'exemples de grilles, mais nous n'utilisons pas ici. Quelqu'un peut s'il vous plaît signaler où l'on va mal, ou de nous orienter vers des ressources qui vous fournir plus d'informations?

Nous sommes à l'aide de VisualStudio 2008, C# et .Net 2.0, client XP, W2K3 serveur.

Merci d'avance

wes

OriginalL'auteur | 2008-10-28