OVH Cloud OVH Cloud

Erreur que je comprends vraiment pas!!! HELP !

22 réponses
Avatar
amplitude
Bonjour, voici mon code :

for(int i=3D0;i<Tbl.Rows.Count;i++)
{
Tbl.Rows[i][0] =3D "0";
}

Je pr=E9cise que j'ai 4 colonnes dans ma table, je l'ai bien v=E9rifi=E9e=
=2E

Il me dit l'erreur suivante sur la ligne Tbl.Rows[i][0] =3D "0" :

An unhandled exception of type 'System.StackOverflowException' occurred=20
in system.windows.forms.dll

Dans le debugg, je peux voir que le i est =3D =E0 0, donc ca a prioris d=
ans=20
le premier passage de la boucle.

J'ai donc essayer en faisant : Tbl.Rows[0][0] =3D "0";

et tout marche, j'ai fait pareil avec tous les autres num=E9ro de ligne, =

ca ne pose pas de prob, seulement qd je met i...

D'ailleur, si je met =E0 la place de i -1 ou, 5 (soit 1 de plus que le=20
nombre de ligne), il me dit juste qu'il n'y =E0 aucune ligne.

Merci de votre aide, pcq l=E0 je s=E8che... :(

10 réponses

1 2 3
Avatar
Mielmonster
est-il possible de voir le code de l'objet Tbl et surtout de sa propriete
Rows

Yannick

"amplitude" a écrit dans le message de news:
cl5mf7$3ri$
Bonjour, voici mon code :

for(int i=0;i<Tbl.Rows.Count;i++)
{
Tbl.Rows[i][0] = "0";
}

Je précise que j'ai 4 colonnes dans ma table, je l'ai bien vérifiée.

Il me dit l'erreur suivante sur la ligne Tbl.Rows[i][0] = "0" :

An unhandled exception of type 'System.StackOverflowException' occurred
in system.windows.forms.dll

Dans le debugg, je peux voir que le i est = à 0, donc ca a prioris dans
le premier passage de la boucle.

J'ai donc essayer en faisant : Tbl.Rows[0][0] = "0";

et tout marche, j'ai fait pareil avec tous les autres numéro de ligne,
ca ne pose pas de prob, seulement qd je met i...

D'ailleur, si je met à la place de i -1 ou, 5 (soit 1 de plus que le
nombre de ligne), il me dit juste qu'il n'y à aucune ligne.

Merci de votre aide, pcq là je sèche... :(
Avatar
amplitude
Merci pour la réponse rapide! :)

Voici l'objet Tbl :

Tbl = new DataTable("FactNonPayees");
Tbl.Columns.Add("Date");
Tbl.Columns.Add("Numéro");
Tbl.Columns.Add("Référence");
Tbl.Columns.Add("Montant dû");
Tbl.Columns.Add("Ventilation");

foreach(DataRow r in Tbl1.Rows)
{
DataRow dt = Tbl.NewRow();
dt["Date"] = r["DateCrea"];
dt["Numéro"] = r["Numero"];
dt["Référence"] = r["Reference"];
dt["Montant dû"] =
decimal.Parse(r["MontantHT"].ToString().Replace(".",","))+decimal.Parse(r ["MontantTVA"].ToString().Replace(".",","));
dt["Ventilation"] = 0m;
Tbl.Rows.Add(dt);
}

Voilà, en fait, pr chaque row, il reprend des infos d'une autre table.. .

J'ai essayer en décomposant :

MontantVentile += decimal.Parse(txt.Replace(".",","));
DataRow dt = Tbl.Rows[i];
dt["Ventilation"] = MontantVentile;
Tbl.Rows.RemoveAt(i);
Tbl.Rows.InsertAt(dt,i);

Mais il me fait la même erreur sur la dernière ligne (il me souligne en
fait le i++ du for)



Mielmonster wrote:
est-il possible de voir le code de l'objet Tbl et surtout de sa proprie te
Rows

Yannick

"amplitude" a écrit dans le message de news:
cl5mf7$3ri$
Bonjour, voici mon code :

for(int i=0;i<Tbl.Rows.Count;i++)
{
Tbl.Rows[i][0] = "0";
}

Je précise que j'ai 4 colonnes dans ma table, je l'ai bien vérifié e.

Il me dit l'erreur suivante sur la ligne Tbl.Rows[i][0] = "0" :

An unhandled exception of type 'System.StackOverflowException' occurred
in system.windows.forms.dll

Dans le debugg, je peux voir que le i est = à 0, donc ca a prioris dans
le premier passage de la boucle.

J'ai donc essayer en faisant : Tbl.Rows[0][0] = "0";

et tout marche, j'ai fait pareil avec tous les autres numéro de ligne ,
ca ne pose pas de prob, seulement qd je met i...

D'ailleur, si je met à la place de i -1 ou, 5 (soit 1 de plus que le
nombre de ligne), il me dit juste qu'il n'y à aucune ligne.

Merci de votre aide, pcq là je sèche... :(




Avatar
Boris Sargos
Salut,

en général, une StackOverflowException est généré, comme son nom l'indique,
par un dépassement de capacité de la pile. Dans ton code, sans le savoir, tu
dois faire des appels récursifs. Cette ligne notamment est suspecte :
foreach(DataRow r in Tbl1.Rows) {
DataRow dt = Tbl.NewRow();
}
Regarde-la de plus près.
Avatar
Patrick Philippot
Boris Sargos wrote:
foreach(DataRow r in Tbl1.Rows) {
DataRow dt = Tbl.NewRow();
}



Bonjour,

Tbl1 ne pointerait pas par erreur sur le même objet que Tbl ?

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
amplitude
Apparemment, (du moins à MON avis qui n'est pas trop trop fiable), le
Tbl.NewRow(); ne créer pas une nouvelle ligne, mais crée un DataRow q ui
possède les propriété d'une Row de ma table. L'insertion se fait
ensuite, juste après un remove justement...

Mais je peux me tromper...

Boris Sargos wrote:
Salut,

en général, une StackOverflowException est généré, comme son nom l'indique,
par un dépassement de capacité de la pile. Dans ton code, sans le s avoir, tu
dois faire des appels récursifs. Cette ligne notamment est suspecte :
foreach(DataRow r in Tbl1.Rows) {
DataRow dt = Tbl.NewRow();
}
Regarde-la de plus près.




Avatar
amplitude
Je suis partit sur encore une autre façon, qui me semblait plus propre. .. :

foreach(DataRow dt in Tbl.Rows)
{
string txt =
this.gridEXFactures.GetRow(i).Cells[Tbl.Columns.Count-1].Text;
if(txt.Length > 0)
{
MontantVentile += decimal.Parse(txt.Replace(".",","));
dt["Ventilation"] = txt.Replace(".",",");
}
i++;
}

A prioris, dans cette façon, je ne peux pas sortir de la pile, et je ne
rajoute aucune ligne....
Mais il me fait la même erreur!!!!!

An unhandled exception of type 'System.StackOverflowException' occurred
in mscorlib.dll

sur le i++, donc a prioris sur la ligne d'avant....


amplitude wrote:
Apparemment, (du moins à MON avis qui n'est pas trop trop fiable), le
Tbl.NewRow(); ne créer pas une nouvelle ligne, mais crée un DataRow qui
possède les propriété d'une Row de ma table. L'insertion se fait
ensuite, juste après un remove justement...

Mais je peux me tromper...

Boris Sargos wrote:

Salut,

en général, une StackOverflowException est généré, comme son nom
l'indique,
par un dépassement de capacité de la pile. Dans ton code, sans le
savoir, tu
dois faire des appels récursifs. Cette ligne notamment est suspecte :
foreach(DataRow r in Tbl1.Rows) {
DataRow dt = Tbl.NewRow();
}
Regarde-la de plus près.







Avatar
Vincent Lascaux
Poste un code compilable le plus petit possible qui pose probleme

--
Vincent
Avatar
amplitude
Ca va être chaud, alors j'ai fait un test vite fait :

MessageBox.Show(Tbl.Rows[0][0].ToString());

Ca marche bien et ca m'affiche le bon truc

Si je fais :

Tbl.Rows[0][0] = "Test";

Là il me fait erreur !! :-[

c fou ça!

Vincent Lascaux wrote:
Poste un code compilable le plus petit possible qui pose probleme



Avatar
Paul Bacelar
Quand il y a une StackOverFlow, généralement le débuggeur est aux fraises
sur la zone qui pose problème.

Le bon vieux printf("coucou") de notre glorieux passé C est encore
d'actualité.

Donc, fais des debug.Trace dans ta boucle pour voir.
--
Paul Bacelar


"amplitude" wrote in message
news:cl6hmj$gd0$
Ca va être chaud, alors j'ai fait un test vite fait :

MessageBox.Show(Tbl.Rows[0][0].ToString());

Ca marche bien et ca m'affiche le bon truc

Si je fais :

Tbl.Rows[0][0] = "Test";

Là il me fait erreur !! :-[

c fou ça!

Vincent Lascaux wrote:
Poste un code compilable le plus petit possible qui pose probleme



Avatar
amplitude
Le c# est mon premier language de prog, donc je ne comprend pas tout...
Mais si tu parles d'un try{ } catch{] j'ai essayé avec un MessageBox qu i
me retourne l'exception, mais il ne le prend pas en compte !! C'est
d'ailleur la première fois que ça me le fait !



Paul Bacelar wrote:
Quand il y a une StackOverFlow, généralement le débuggeur est aux fraises
sur la zone qui pose problème.

Le bon vieux printf("coucou") de notre glorieux passé C est encore
d'actualité.

Donc, fais des debug.Trace dans ta boucle pour voir.


1 2 3