Problème incompréhensible

Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008 - 8 avril 2005 à 16:51
Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008 - 8 avril 2005 à 17:18
Bonjour,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


J’ai un soucis de mise à jour de datagrid (validation d'ajout de lignes dans le datatable correspondant) : dans mon programme j’utilise 3 datagrid, à chaque datagrid correspond un dataset en variable d’instance. Pour le remplissage et la mise à jour de mes datagrid j’utilise systématiquement un datatable défini dans mes fonctions.





Le remplissage de mes datagrid se fait sans erreurs mais pour l’un des trois datagrid mon programme met un temps relativement long. Cela se passe toujours sur le même datagrid quelque soit l’odre de remplissage des datagrid. Mon programme freeze et le proc est utilisé à fond (50% sur un P-IV HT) puis fini l’affichage :



Affichage en boucle de la ligne : « Console.WriteLine("ienum.MoveNext()..."+zar+++"-"+zor++); »


Freeze du programme et travail processeur


Affichage de la ligne : « Console.WriteLine("fini"); »





Par contre, ma mise à jour se fait normalement (aucun freeze).





Je pense que cela est anormal mais je n’ai aucune idée sur la manière de trouver le problème exact et donc sa solution.





Mon problème n’est pas bloquant mais il est gênant et semble être corrigible.






Ci-dessous le code de déclaration des objets nécessaires au datagrid et le code de remplissage du datagrid (les deux autres datagrid sont construits et remplis de la même manière) :





// Déclaration des objets composant mon datagrid


System.Data.DataTable dtTmp;


DataColumn dcTmp;





#region Création de la table pour dsDAE


dsDAE = new DataSet();


#region Création des colonnes


dtTmp = new DataTable("Documents à émettre");


dtTmp.BeginInit();


dcTmp = new DataColumn();


dcTmp.DataType = System.Type.GetType("System.Boolean");


dcTmp.ColumnName = "Choisir";


dcTmp.DefaultValue = false;


dtTmp.Columns.Add(dcTmp);


dcTmp = new DataColumn();


dcTmp.DataType = System.Type.GetType("System.String");


dcTmp.ColumnName = "N°";


dtTmp.Columns.Add(dcTmp);


dcTmp = new DataColumn();


dcTmp.DataType = System.Type.GetType("System.String");


dcTmp.ColumnName = "Type";


dtTmp.Columns.Add(dcTmp);


dcTmp = new DataColumn();


dcTmp.DataType = System.Type.GetType("System.String");


dcTmp.ColumnName = "Objet";


dtTmp.Columns.Add(dcTmp);


dcTmp = new DataColumn();


dcTmp.DataType = System.Type.GetType("System.String");


dcTmp.ColumnName = "Contact";


dtTmp.Columns.Add(dcTmp);


dcTmp = new DataColumn();


dcTmp.DataType = System.Type.GetType("System.String");


dcTmp.ColumnName = "Date";


dtTmp.Columns.Add(dcTmp);


dtTmp.EndInit();


#endregion Création des colonnes


try


{


FGTrans_dgDocAEmettre.BeginEdit();


dsDAE.Tables.Add(dtTmp);


FGTrans_dgDocAEmettre.SetDataBinding(dsDAE, "Documents à émettre");


FGTrans_dgDocAEmettre.EndEdit(); }


catch(Exception ex)


{


Console.WriteLine("Erreur affichage FGTrans_dgDocAEmettre : "+ex.Message);


}


#region Modification de la largeur des colonnes


DataGridTableStyle dgtsDAE = new DataGridTableStyle((CurrencyManager) BindingContext[dsDAE, "Documents à émettre"]);


FGTrans_dgDocAEmettre.TableStyles.Add( dgtsDAE );


dgtsDAE.GridColumnStyles[0].Width = 30; // Choisir


dgtsDAE.GridColumnStyles[1].Width = 100; // N°Doc


dgtsDAE.GridColumnStyles[2].Width = 175; // Type


dgtsDAE.GridColumnStyles[4].Width = 175; // Contact


dgtsDAE.GridColumnStyles[5].Width = 75; // Date


widthRestant=


(FGTrans_dgDocAEmettre.Size.Width>1220?FGTrans_dgDocAEmettre.Size.Width:1220)


-dgtsDAE.GridColumnStyles[0].Width


-dgtsDAE.GridColumnStyles[1].Width


-dgtsDAE.GridColumnStyles[2].Width


-dgtsDAE.GridColumnStyles[4].Width


-dgtsDAE.GridColumnStyles[5].Width


-Grouillot.getLargeurADéduireDesDataGrid()


;


dgtsDAE.GridColumnStyles[3].Width = widthRestant; // Objet


#endregion Modification de la largeur des colonnes


#endregion Création de la table pour dsDAE








// Et le code de mise à jour :





Cursor.Current = Cursors.WaitCursor;


int zar=1;


Console.WriteLine("remplirComposantsGraphiques");


#region Déclarations


System.Data.DataTable dtTmp;


IEnumerator ienum;


String stmp;


String[] stmp2;


#endregion Déclarations


Console.WriteLine("FGTrans_dgDocAEmettre");


#region FGTrans_dgDocAEmettre


dtTmp = dsDAE.Tables["Documents à émettre"];


dtTmp.Clear();


dtTmp.BeginLoadData();


if(htADAE.ContainsKey(htA[FGTrans_cbActivité.SelectedItem.ToString()]))


{


ienum = ((ArrayList)htADAE[htA[FGTrans_cbActivité.SelectedItem.ToString()]]).GetEnumerator();


while(ienum.MoveNext())


{


int zor=1;


stmp=ienum.Current.ToString();


stmp2=(String[])htDAE[stmp];


dtTmp.Rows.Add( new Object[]{ false, stmp, stmp2[0], stmp2[1], stmp2[2], stmp2[3] } ); //["N° Type Objet Contact Date]


Console.WriteLine("ienum.MoveNext()..."+zar+++"-"+zor++);


}


}


dtTmp.EndLoadData();


#endregion FGTrans_dgDocAEmettre


Cursor.Current = Cursors.Default;


Console.WriteLine("fini");






Par avance merci,


Gaxx

1 réponse

Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008
8 avril 2005 à 17:18
PS : Tel quel le code ne fonctionne pas car j'ai remplacé sans tester les FGTrans_dgDocAEmettre.BeginInit(); et FGTrans_dgDocAEmettre.EndInit(); par FGTrans_dgDocAEmettre.BeginEdit(); et FGTrans_dgDocAEmettre.EndEdit();

Donc il ne faut pas prendre en compte les appels à BeginEdit(); et à EndEdit(); et là ça compile et ça fonctionne (lentement ).
0
Rejoignez-nous