Bonjour, voici le code...
J'ai donc une fonction récursive... elle ne rentrera plus dans le for à partir du moment où le cpt est arrivé à 1...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 private void Test_Contrat(int[] Tab, string ID, int Choix) { this.dsPrincipal1.Table_Contrats.Clear(); this.daContrats.Fill(this.dsPrincipal1.Table_Contrats); string Nouvelle_Date=""; MessageBox.Show("OK"); if(Choix==1) { //---Compte le nbre d'enregistrement à tester pour ce candi---// int m=0, Cpt=0; while(m<Tab.Length && Tab[m]!=-1) { Cpt++; m++; } MessageBox.Show(Cpt.ToString()); if(Cpt>1) for(int j=1;j<Cpt;j++) { //---Si ils ont les mêmes horaires, baremes, et status, on fusionne---// if(Tab[j-1]!=-1 && Tab[j]!=-1 && this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Status_Nom"].ToString() == this.dsPrincipal1.Table_Contrats[Tab[j]]["Status_Nom"].ToString() && this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Horaires_Heure"].ToString()==this.dsPrincipal1.Table_Contrats[Tab[j]]["Horaires_Heure"].ToString() && this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Baremes_Valeur"].ToString()==this.dsPrincipal1.Table_Contrats[Tab[j]]["Baremes_Valeur"].ToString()) { //-----------------------// //---Fusion des dates---// //---------------------// Nouvelle_Date=this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Periode_Dates"].ToString().Substring(0,this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Periode_Dates"].ToString().IndexOf(" ")); Nouvelle_Date+=" "+this.dsPrincipal1.Table_Contrats[Tab[j]]["Periode_Dates"].ToString().Substring(this.dsPrincipal1.Table_Contrats[Tab[j]]["Periode_Dates"].ToString().IndexOf(" ")+1); //---Ecrire le nouvel enregistrement fusionné---// Ecrire_Fusion(Tab[j-1],Tab[j], Nouvelle_Date); //---On efface les 2 que l'on va fusionner---// Efface_Table_Contrat(this.dsPrincipal1.Table_Contrats[Tab[j-1]]["ID_Contrat"].ToString()); Efface_Table_Contrat(this.dsPrincipal1.Table_Contrats[Tab[j]]["ID_Contrat"].ToString()); //---On recommence les tests---// this.dsPrincipal1.Table_Contrats.Clear(); this.daContrats.Fill(this.dsPrincipal1.Table_Contrats); Tab=Offset_Table_Contrats(ID); //---On recalcule les offsets---// Test_Contrat(Tab, ID, 1); //---On réeffectue les tests---// } } } MessageBox.Show("OUT"); }
Tout cela parfaitement...
A l'affichage j'ai
C'est justement les 4 OUT qui me dérangent... Comment est ce possible qu'il passe 4 fois par là alors qu'il ne passe pas par le début de cette fonction (étant donné qu'il ne m'affiche pas OK avant le OUT...)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 OK 4 OK 3 OK 2 OK 1 OUT OUT OUT OUT
Je n'ai jamais utilisé de fonction récursive (je ne sais d'ailleurs pas si le terme est adapter à ce que je fais...), peut être est ce que je m'y prend mal... Mais ce me depasse.
Est ce que il y a une explication qui saute aux yeux ?
Où comment arriver à debugger cela, parce que je ne comprend pas comment c'est possible...
HELP.
Merci.
Partager