6
votes

Comment rafraîchir la DataSource sur une winforms DataGridView?

Je peuploie la grilleview.datasource à partir d'un modèle d'entitéFramework: xxx

Lorsqu'une nouvelle ligne est ajoutée aux _enties, j'essaie de mettre à jour la grille (essayé d'utiliser la même instruction que ci-dessus, Réglage de la null, puis retour aux _entisties.Timelogs, etc.), mais la grille ne sera tout simplement pas à jour. Même si des _entisties.Timelogs contiennent réellement les nouvelles lignes.

Qu'est-ce que je manque?


0 commentaires

4 Réponses :


13
votes

Anciene réponse: Avez-vous essayé d'appeler GridView.Databind ()?

Woops, je pensais que c'était une webforms DataGrid. p>

Si vous êtes sur WinForms, vous voudrez peut-être examiner le Classe de liaison. La liaison à cette classe au lieu de droite à votre liste fournira une notification de mise à jour, etc. p>

Le code suivant fonctionne pour moi: p>

        List<Person> names = new List<Person>();
        names.Add(new Person(){
            FirstName = "Steve",
            LastName = "Jobs"
        });
        names.Add(new Person()
        {
            FirstName = "Bill",
            LastName = "Gates"
        });

        BindingSource source = new BindingSource();
        source.DataSource = names;
        dataGridView1.DataSource = source;

        names.Add(new Person()
        {
            FirstName = "Steve",
            LastName = "Balmer"
        });

        source.ResetBindings(false);


5 commentaires

BLANTSOURCE @ MSDN: MSDN.MicRosoft.com/fr- US / Bibliothèque / ...


Toujours ne fonctionne pas. Je veux simplement que la grille mise à jour. Je n'ai pas vraiment besoin de notification de mise à jour. Peut-être que ce sont les données sous-jacentes qui sont le cadre d'entité.


J'ai posté le code ci-dessus. Les données sous-jacentes ne devraient pas avoir d'importance. Avez-vous appelé ResetBindings ()?


Cela ne fonctionne pas lorsque la liaison se réfère à une requête de cadre d'entité.


Oui, malheureusement, cela ne fonctionne pas après avoir mis à jour une variable de niveau de formulaire (re-récupéré du service de repos).



7
votes

La réponse est d'avoir la grille de la grille connectée à la liste de liaison plutôt que la liste.


0 commentaires

-1
votes
 grid.EndEdit();
 BindingSource.EndEdit();
 _entities = new dbEntities();
 firmeBindingSource.DataSource=_entities.TimeLogs;

1 commentaires

Bienvenue à Stackoverflow! Il est toujours préférable de fournir une brève description d'un exemple de code pour améliorer la précision post :)



2
votes

Cela fonctionne pour moi:

dataGridView.DataSource = null;
dataGridView.DataSource = listOfSomething;


3 commentaires

Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme. Par exemple, y a-t-il une raison pour laquelle définir la source de données à NULL puis quelque chose d'autre fonctionne?


Ce code provoque la mise à jour de l'ensemble du contenu de la grille de données, tout en définissant simplement la source de données sur la même valeur à nouveau - n'est pas


C'était la seule chose qui a fonctionné pour moi. J'ai eu réinitialisé (Faux) Travailler sur d'autres formes, mais pour une raison quelconque, il s'est arrêté quand je suis allé dans le cadre d'entité.