7
votes

La liste ne montre pas les modifications apportées à DataSource

Je pensais que c'était un simple problème, mais je ne trouve aucune information sur le Web. Je lie une liste de liste à une liste à l'aide de liaison de liaison comme: xxx

maintenant, lorsque j'ajoute ou supprimez de Clients LISTE, MON LISTOXBOX est mis à jour (même sans utiliser RESETBINDINGES ON BLANDATIONSOURCE ), mais si je modifie l'un des objets client Dans la liste, ce n'est pas le cas. Appeler réinitialisationbindings n'a aucun effet. J'ai même mis en place ma propre relielle , mais le comportement n'a pas changé.
Le client Classe utilise des propriétés pour accéder et modification des données. Son Tostring () est affiché dans la liste.

J'utilise c # dans .NET 2.0.

Toute idée? < p> merci


0 commentaires

5 Réponses :


4
votes

OK, voici une solution sale: wenever Vous devez rafraîchir le contenu de la boîte Set Datasource = NULL, puis la reculer.

La raison pour laquelle il ne met pas à jour est parce que les objets de la liste n'ont pas changé et ne vérifient que les références de l'objet plutôt que leur contenu.


2 commentaires

Oui, je pense que c'est ce que j'ai fait à la fin (je n'ai pas le code maintenant), mais comme vous l'avez dit, c'est sale.


Un autre problème est que DataSource perd ses paramètres de temps de conception par exemple. DisplayMember et immatriculation des propriétés deviennent non définies.



2
votes

Il existe également un bogue dans la zone de liste qui peut causer ce problème. Si vous définissez la sélectionMode sur Aucun Ce problème apparaît.

En tant que travail autour, j'ai défini le mode de sélection sur une, puis revenez à aucun lors de la mise à jour de la date de données.


0 commentaires

5
votes

Si vous utilisez un Bindinglist , vous n'avez même pas besoin de la liaison : xxx


0 commentaires

0
votes

J'ai entouré ce problème en convertissant des données en tableau lors de la mise à jour de la source. Veuillez vous reporter à la méthode Updateateata. De cette façon, vous pouvez mettre à jour votre boîte de liste déroulante sans perdre des paramètres Combobox.

class Person {
   public int Id {get; set; }
   public string FirstName{ get; set; }
   public string SurName {get; set; }
}

public Form1()
{
    InitializeComponent();
    comboBox1.DisplayMember = "FirstName";
    comboBox1.ValueMember = "Id";
    comboBox1.DataSource = m_PersonList;
}

public void UpdateData() {
    m_PersonList[0].FirstName = "Firstname1";
    comboBox1.DataSource = m_PersonList.ToArray<Person>();
}


0 commentaires

0
votes

Je comprends que cette question a été posée il y a près de 6 ans, mais autrement que le travail, je ne vois pas une réponse correcte ici. Lorsque vous modifiez la propriété d'un article dans une collection, l'événement est soulevé pour l'élément (objet) mais pas la collection. La collection ne voit donc pas de changement et ne pourra pas actualiser les contrôles liés. Éléments à l'intérieur de toutes les collections de liaison et la plupart des collections génériques telles que Liste <> Recevoir 2 événements, PropertyChangeing et Propertychanged . Lorsqu'une propriété de l'élément à l'intérieur de la collection est modifiée, l'événement est déclenché. Tout ce que vous avez à faire est d'ajouter un gestionnaire d'événements qui déclencherait une nouvelle liaison ou un événement sur la collection .


0 commentaires