7
votes

Pourquoi DataGridView n'est-elle pas rafraîchir?

Voici ce qui se passe après avoir appuyé sur un bouton: xxx

Veuillez noter que je le fais avec un autre contrôle appelé graphique1 et ça fonctionne bien, Il le remplit avec les nouvelles données requises, mais datagridview ne reste que le même

la première tentative est réussie.

Cependant, la deuxième fois que je l'appuie , il affiche la même chose!

Quelqu'un sache si je vous rafraîchit la DataGridView correctement?


4 commentaires

Est connectableAndreadlist renvoyant des données différentes?


@gmcalab oui définitivement,


Qu'est-ce que exactement est cette méthode. Et êtes-vous sur le fil de l'interface utilisateur à l'époque?


J'admette la méthode de rafraîchissement sur le datagridview semble actualiser les données, mais cela "oblige le contrôle à invalider sa zone client et redessinant immédiatement et tout contrôle des enfants". BLANDSOURE Tout le chemin! J'ai commenté des terrains sur cette page, mais la plupart de ces réponses ne répondent pas à la méthode Aformentionnée Actualisée () qui est la mauvaise chose à utiliser et c'est juste plus de code pour effacer le DataGridView et réglez-le à nouveau!


9 Réponses :


-1
votes

Initialisez-vous la source de données la première fois dans un si (! page.ispospostback)

Il peut être réinitialisé la source de données sur chaque message.


0 commentaires

0
votes

Avez-vous essayé d'appeler Endedit () avant Actualiser () ?


1 commentaires

Rafraîchir () n'est pas ce dont ils ont besoin dans ce cas, je crois Stackoverflow.com/a/14501458/427684



1
votes

A DataGridView établit des liaisons la première fois que vous attribuez la DataSource. Le problème est que les missions de données de données ultérieures, si les missions ont une structure différente de l'affectation initiale, échouera parce que les fixations sont maintenant "off"

Vous devez réinitialiser la DataGridView Ainsi, afin que les données soient liées à une nouvelle. (Le lien est pour VB mais il vous suffit de connaître les méthodes à appeler. Même copier / coller serait surcharger.)


0 commentaires

-1
votes

Essayez ceci? XXX


1 commentaires

Actualiser () Ne peut pas être utilisé pour des données rafraîchissantes!



0
votes

Vous pouvez faire comme @cycling suggéré, vous pouvez également utiliser une liaison à laquelle je pense est la méthode recommandée par Microsoft.

BindingSource bs = new BindingSource(); 
bs.DataSource = ConnectandReadList(some_query);
dataGridView1.DataSource = bs;
dataGridView1.Refresh;


0 commentaires

12
votes

Différence subtile ici à @fake mais appelant Actualiser () ne fonctionnera pas comme l'appelant sur le DataGridView uniquement

"force le contrôle d'invalider sa zone client et redessiner immédiatement et tout contrôle des enfants."

Comme cette méthode est liée à tout contrôle, non à l'actualisation des données relatives à un objet. Reportez-vous à ici (méthodes DataGridView) et faites défiler jusqu'à rafraîchir et vous verrez Le lien pointe vers Control.Refresh Methode

Vous voulez quelque chose comme ceci; xxx

et vous pouvez simplement appeler réinitialisé () sur BS (votre liaison de liaison ); xxx


1 commentaires

RESETBINDINGS FTW. Il y a beaucoup de suggestions énumérées pour des questions telles que celles-ci, mais c'est le seul à travailler pour un dataGridView de DataNTound. Cela devrait être la réponse en tant que réponse acceptée des liens vers un poste de forum sans résolution ...



0
votes

En fait, le problème est là que votre table de table n'est pas rafraîchissante. J'ai utilisé ce code après la modification de la table (mydatabase.tbl) pour l'actualiser:

            tblTableAdapter.Fill(mydatabaseDataSet.tbl);
            dataGridView1.DataSource = tblBindingSource;
            dataGridView1.Update();


0 commentaires

0
votes

Cette ligne de code charge les données dans le wmp_exportdataset.dest_ax_pricgediscadmtransentité Tableau. Vous pouvez le déplacer, ou l'enlever, selon le besoin. xxx


0 commentaires

1
votes

Peu d'astuce que vous pouvez faire si vous liez une liste Lorsque vous le réglez sur votre source de données, ajoutez TOLIST () à la fin de la fin:

dataGridView1.DataSource = ConnectandReadList(some_query)
var m = dataGridView1.GetType().GetMethod("OnDataSourceChanged", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(dataGridView1, new object[] { EventArgs.Empty });


0 commentaires