Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
747 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Pourquoi mon DataGridView scintille (colonne rétrécissent et reprennen

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pourquoi mon DataGridView scintille (colonne rétrécissent et reprennen

n°2446556
zollen777
Posté le 15-05-2023 à 19:42:46  profilanswer
 

Salut a tous,
 
J'ai un Datagridview qui reçoit des données externe et j'ai rajouté 3 colonnes independantes des données externes
 
Ma datagridview se rafraichit toutes les 3 secondes et lors du rafraissichement le tableau scintille (c'est a dire que les cellules rétrécissent et reprennent leur tailles d'origine) et aussi le contenu des 3 colonnes independantes (celles ajoutées) disparait et reapparait.
 
J'ai ce probleme avec cet ajout de code (voir ci-dessous qui correpond a une colone ajouté), si je supprime ce bout de code le probleme disparait :
 

Code :
  1. var id = row.Cells[0].Value.ToString();
  2.                             var nickNameTask = Task.Run<string>(async() => await this.GetTraderName(id));
  3.                             nickNameTask.Wait();
  4.                             string nickName = nickNameTask.Result;
  5.                             row.Cells[1].Value =nickName;


 
Savez vous d'ou peut venir le probleme et comment le corrigé?
 
Voici le code :
 

Code :
  1. private void dtgvPositions_DataBindingComplete(
  2.           object sender,
  3.           DataGridViewBindingCompleteEventArgs e)
  4.         {
  5.             List<string> lstUID = this.ReplaceDownTheLine(this.txtUIDs.Text.Trim());
  6.             Dictionary<string, bool> lstUIDColor = new Dictionary<string, bool>();
  7.             for (int index = 0; index < lstUID.Count; ++index)
  8.                 lstUIDColor.Add(lstUID[index], index % 2 == 0);
  9.             this.dtgvPositions.Invoke((Action)(() =>
  10.             {
  11.                 foreach (string str in lstUID)
  12.                 {
  13.                     foreach (DataGridViewRow row in (IEnumerable)this.dtgvPositions.Rows)
  14.                     {
  15.                         string key  = row.Cells[0].Value.ToString();
  16.                         Decimal num = 0M;
  17.                         Decimal num1 = 0M;
  18.                         Decimal num2 = 0M;
  19.                         Decimal num3 = 0M;
  20.                         try
  21.                         {
  22.                             num  = Decimal.Parse(row.Cells[9].Value.ToString());
  23.                             num1 = Decimal.Parse(row.Cells[5].Value.ToString());
  24.                             num2 = Decimal.Parse(row.Cells[7].Value.ToString());
  25.                             num3 = Decimal.Parse(row.Cells[3].Value.ToString());
  26.                             var id = row.Cells[0].Value.ToString();
  27.                             var nickNameTask = Task.Run<string>(async() => await this.GetTraderName(id));
  28.                             nickNameTask.Wait();
  29.                             string nickName = nickNameTask.Result;
  30.                             row.Cells[1].Value =nickName;
  31.                             bool flag;
  32.                             lstUIDColor.TryGetValue(key, out flag);
  33.                             row.DefaultCellStyle.BackColor = Color.FromArgb(24, 26, 32);
  34.                             row.Cells[1].Selected = false;
  35.                             row.Cells[1].Style.ForeColor = flag ? Color.LightSkyBlue : Color.LightPink;
  36.                             row.Cells[2].Value = num1 >= 0M ? "Long" : "Short";
  37.                             row.Cells[2].Style.ForeColor = num1 >= 0M ? Color.FromArgb(22, 181, 93) : Color.FromArgb(194, 52, 54);
  38.                             row.Cells[6].Value = (num1 * num2) / num3;
  39.                             row.Cells[9].Style.ForeColor = num >= 0M ? Color.FromArgb(22, 181, 93) : Color.FromArgb(194, 52, 54);
  40.                             row.Cells[10].Style.ForeColor = num >= 0M ? Color.FromArgb(22, 181, 93) : Color.FromArgb(194, 52, 54);
  41.                         }
  42.                         catch
  43.                         {
  44.                         }
  45.                     }
  46.                 }
  47.             }));
  48.         }


 
Merci

mood
Publicité
Posté le 15-05-2023 à 19:42:46  profilanswer
 

n°2446572
TotalRecal​l
Posté le 16-05-2023 à 09:00:56  profilanswer
 

Dans le DataGrid y a pas des méthodes du genre BeginUpdate / EndUpdate ou SuspendDrawing / ResumeDrawing à appeler avant de balancer des trucs dedans que tu aurais oublié ?  
 
Tu n'aurais pas du Autosize quelque part qui réagit ?


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2446603
zollen777
Posté le 17-05-2023 à 13:20:05  profilanswer
 

Bonjour et merci, non il a rien de ça

n°2446612
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-05-2023 à 14:47:12  profilanswer
 

Tu as essayé de créer un DatagridView avec le double buffer d'activé ?

 

https://learn.microsoft.com/en-us/d [...] esktop-7.0

 

DoubleBuffered est un attribut protected, tu dois donc créer une classe qui héritera de DatagridView pour l'initialiser :

 
Code :
  1. class DoubleBufferedDataGridView : DataGridView
  2. {
  3.    public DoubleBufferedDataGridView () { DoubleBuffered = true; }
  4. }


Message édité par Harkonnen le 17-05-2023 à 14:47:42

---------------
J'ai un string dans l'array (Paris Hilton)
n°2446618
zollen777
Posté le 17-05-2023 à 15:59:23  profilanswer
 

Merci Harkonnen, je vais essayé et je vous tiens au couran..

n°2446619
TotalRecal​l
Posté le 17-05-2023 à 16:12:25  profilanswer
 

Ca se tente, mais j'imagine que si MS a masqué cette propriété c'est pas pour rien :D. Après c'est peut être juste pour une histoire de mémoire consommée.
 
Pour éviter de surcharger complètement la classe du contrôle, on doit aussi pouvoir bricoler ça par reflection, qqch du genre :
 

Code :
  1. typeof(DataGridView).InvokeMember(
  2.    nameof(DataGridView.DoubleBuffered),
  3.    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
  4.    null,
  5.    gridview,
  6.    new object[] { true });


 
Au chargement de la form (code non testé, c'est pour l'exemple)
 
Les deux solutions sont un peu moches mais celle là évite de créer une nouvelle classe.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2446631
zollen777
Posté le 17-05-2023 à 19:24:22  profilanswer
 

Alors pour le retour, les 2 solutions n'ont pas foctionner.
Merci


Aller à :
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Pourquoi mon DataGridView scintille (colonne rétrécissent et reprennen

 

Sujets relatifs
copier/coller colonne activeinsertion colonne et codage VBA
[PosteGre] - Transformation colonne smallint en booleanCopie d'une formule sur une colonne => #NOM?
[MySQL] Ajouter un nombre à une colonne nullCSS - Retour en haut de colonne
message d'alerte après un tri sur la colonneAfficher des valeurs d'une colonne à l'autre selon condition
Ecrire une variable tableau sur une feuille avec colonne masquéeesMariaDB Requête UPDATE JSON_SET sur une colonne NULL
Plus de sujets relatifs à : Pourquoi mon DataGridView scintille (colonne rétrécissent et reprennen


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR