OVH Cloud OVH Cloud

Problème de navigation

4 réponses
Avatar
Oriane
Bonjour,

j'ai certains probl=E8mes de mise =E0 jour de DataGrid parent-enfants, =
auxquels je ne comprends pas gd chose.
Sch=E9matiquement j'ai Site-->Commande-->Produits avce =E0 chaque fois =
une relation 1-->N.

J'ai trois grids, et j'ai cr=E9=E9 dans le code deux event-handlers pour =
les Grids "Site" et "Commande". Ces event-handlers d=E9clenchent des =
requ=EAtes en base pour alimenter un dataset typ=E9, contenant les 3 =
tables.

Et en fait, tout fonctionne pour la premi=E8re ligne de chaque grid. =
Mais si je clique sur les seconde, troisi=E8me... je ne r=E9cup=E8re pas =
ce qui est en base. Pourtant la requ=EAte est lanc=E9e...

Pire, la deuxi=E8me fois que je clique sur une ligne de "Site", rien ne =
se met =E0 jour. Lorsque je rentre dans le code de la fonction de =
requ=EAtage appele=E9 par le event handler (avec un breakpoint en mode =
DEBUG), et que je fais "Next" pour aller =E0 la premi=E8re ligne je =
reviens directement sur l'application, cad que bien que le code soit =
l=E0, il ne s'ex=E9cute pas !!!

Des id=E9es ?

4 réponses

Avatar
VANNESTE Xavier
arf il me faudrait voir le code
"Oriane" a écrit dans le message de news:
d1m5ia$mr$
Bonjour,

j'ai certains problèmes de mise à jour de DataGrid parent-enfants, auxquels
je ne comprends pas gd chose.
Schématiquement j'ai Site-->Commande-->Produits avce à chaque fois une
relation 1-->N.

J'ai trois grids, et j'ai créé dans le code deux event-handlers pour les
Grids "Site" et "Commande". Ces event-handlers déclenchent des requêtes en
base pour alimenter un dataset typé, contenant les 3 tables.

Et en fait, tout fonctionne pour la première ligne de chaque grid. Mais si
je clique sur les seconde, troisième... je ne récupère pas ce qui est en
base. Pourtant la requête est lancée...

Pire, la deuxième fois que je clique sur une ligne de "Site", rien ne se met
à jour. Lorsque je rentre dans le code de la fonction de requêtage appeleé
par le event handler (avec un breakpoint en mode DEBUG), et que je fais
"Next" pour aller à la première ligne je reviens directement sur
l'application, cad que bien que le code soit là, il ne s'exécute pas !!!

Des idées ?
Avatar
Oriane
J'ai la réponse à la première question. Le fait que ca marche juste pour la première ligne est un hasard dûe aux données en base.

Je me suis rendu compte que la requête générée par le DataAdapter lorsqu'il s'agit de "DateTime" dont l'heure n'est pas précisée, indique par défaut midi !! Voilà pourquoi y a un blême.

Concernant le second point j'ai repris le code classique :

// membre de la form principale

private CurrencyManager cmSite;

private CurrencyManager cmCmd;



// Initilialisation
// ds1 est ma source (dataset comprenant Client, Site_, Commande, Produit),
// "ClientSite" est le nom de la relation Client-->Site
// "SiteCommande" le nom de la relation Site_--> Commande
cmSite = (CurrencyManager) BindingContext[ds1, "Client.ClientSite"];

cmSite.PositionChanged += new EventHandler(cmSite_PositionChanged);

cmCmd = (CurrencyManager) BindingContext[ds1, "Site_.SiteCommande"];

cmCmd.PositionChanged += new EventHandler(cmCmd_PositionChanged);


...

// La fonction appelée lorsqu'on clique sur un site

private void cmSite_PositionChanged(object sender, EventArgs e)

{

if (this.cmSite.Position < ds1.Site_.Rows.Count)

RefreshCmd(ds1.Site_[cmSite.Position].Id);

}


private void RefreshCmd(string IdSite)

{

ds1.Commande.Rows.Clear();

ds1.Produit.Rows.Clear(); //daCmd est un dataAdapter associé aux commandes

baseSql.daCmd.SelectCommand.Parameters["@IdSite"].Value = IdSite;

baseSql.daCmd.Fill(ds1);

}



// La fonction appelée lorsqu'on clique sur une commande

private void cmCmd_PositionChanged(object sender, EventArgs e)

{

if (this.cmCmd.Position < ds1.Commande.Rows.Count)

RefreshProduit(ds1.Commande[cmCmd.Position].IdSite, ds1.Commande[cmCmd.Position].DateLivraison);

}

private void RefreshProduit(string IdSite, DateTime IdDateLivraison)

{

ds1.Produit.Rows.Clear(); / / Si je pose le breakpoint ici, ca s'arrête dès qu'on clique sur un site.

// Mais si je fais F10 je retourne parfois (jamais la première) directement sur l'application ?????

// daProd est un dataAdpater attaché au produit

baseSql.daProd.SelectCommand.Parameters["@IdSite"].Value = IdSite;

baseSql.daProd.SelectCommand.Parameters["@IdDateLivraison"].Value = IdDateLivraison;

baseSql.daProd.Fill(ds1);

}



Voilà voilà...

"VANNESTE Xavier" a écrit dans le message de news:
arf il me faudrait voir le code
"Oriane" a écrit dans le message de news:
d1m5ia$mr$
Bonjour,

j'ai certains problèmes de mise à jour de DataGrid parent-enfants, auxquels
je ne comprends pas gd chose.
Schématiquement j'ai Site-->Commande-->Produits avce à chaque fois une
relation 1-->N.

J'ai trois grids, et j'ai créé dans le code deux event-handlers pour les
Grids "Site" et "Commande". Ces event-handlers déclenchent des requêtes en
base pour alimenter un dataset typé, contenant les 3 tables.

Et en fait, tout fonctionne pour la première ligne de chaque grid. Mais si
je clique sur les seconde, troisième... je ne récupère pas ce qui est en
base. Pourtant la requête est lancée...

Pire, la deuxième fois que je clique sur une ligne de "Site", rien ne se met
à jour. Lorsque je rentre dans le code de la fonction de requêtage appeleé
par le event handler (avec un breakpoint en mode DEBUG), et que je fais
"Next" pour aller à la première ligne je reviens directement sur
l'application, cad que bien que le code soit là, il ne s'exécute pas !!!

Des idées ?




Avatar
Oriane
Finalement la première question se pose toujours je crois parce que même quand il n'est pas question de date ca ne fonctionne pas.

"Oriane" a écrit dans le message de news: d1m74d$12p$
J'ai la réponse à la première question. Le fait que ca marche juste pour la première ligne est un hasard dûe aux données en base.

Je me suis rendu compte que la requête générée par le DataAdapter lorsqu'il s'agit de "DateTime" dont l'heure n'est pas précisée, indique par défaut midi !! Voilà pourquoi y a un blême.

Concernant le second point j'ai repris le code classique :

// membre de la form principale

private CurrencyManager cmSite;

private CurrencyManager cmCmd;



// Initilialisation
// ds1 est ma source (dataset comprenant Client, Site_, Commande, Produit),
// "ClientSite" est le nom de la relation Client-->Site
// "SiteCommande" le nom de la relation Site_--> Commande
cmSite = (CurrencyManager) BindingContext[ds1, "Client.ClientSite"];

cmSite.PositionChanged += new EventHandler(cmSite_PositionChanged);

cmCmd = (CurrencyManager) BindingContext[ds1, "Site_.SiteCommande"];

cmCmd.PositionChanged += new EventHandler(cmCmd_PositionChanged);


...

// La fonction appelée lorsqu'on clique sur un site

private void cmSite_PositionChanged(object sender, EventArgs e)

{

if (this.cmSite.Position < ds1.Site_.Rows.Count)

RefreshCmd(ds1.Site_[cmSite.Position].Id);

}


private void RefreshCmd(string IdSite)

{

ds1.Commande.Rows.Clear();

ds1.Produit.Rows.Clear(); //daCmd est un dataAdapter associé aux commandes

baseSql.daCmd.SelectCommand.Parameters["@IdSite"].Value = IdSite;

baseSql.daCmd.Fill(ds1);

}



// La fonction appelée lorsqu'on clique sur une commande

private void cmCmd_PositionChanged(object sender, EventArgs e)

{

if (this.cmCmd.Position < ds1.Commande.Rows.Count)

RefreshProduit(ds1.Commande[cmCmd.Position].IdSite, ds1.Commande[cmCmd.Position].DateLivraison);

}

private void RefreshProduit(string IdSite, DateTime IdDateLivraison)

{

ds1.Produit.Rows.Clear(); / / Si je pose le breakpoint ici, ca s'arrête dès qu'on clique sur un site.

// Mais si je fais F10 je retourne parfois (jamais la première) directement sur l'application ?????

// daProd est un dataAdpater attaché au produit

baseSql.daProd.SelectCommand.Parameters["@IdSite"].Value = IdSite;

baseSql.daProd.SelectCommand.Parameters["@IdDateLivraison"].Value = IdDateLivraison;

baseSql.daProd.Fill(ds1);

}



Voilà voilà...

"VANNESTE Xavier" a écrit dans le message de news:
arf il me faudrait voir le code
"Oriane" a écrit dans le message de news:
d1m5ia$mr$
Bonjour,

j'ai certains problèmes de mise à jour de DataGrid parent-enfants, auxquels
je ne comprends pas gd chose.
Schématiquement j'ai Site-->Commande-->Produits avce à chaque fois une
relation 1-->N.

J'ai trois grids, et j'ai créé dans le code deux event-handlers pour les
Grids "Site" et "Commande". Ces event-handlers déclenchent des requêtes en
base pour alimenter un dataset typé, contenant les 3 tables.

Et en fait, tout fonctionne pour la première ligne de chaque grid. Mais si
je clique sur les seconde, troisième... je ne récupère pas ce qui est en
base. Pourtant la requête est lancée...

Pire, la deuxième fois que je clique sur une ligne de "Site", rien ne se met
à jour. Lorsque je rentre dans le code de la fonction de requêtage appeleé
par le event handler (avec un breakpoint en mode DEBUG), et que je fais
"Next" pour aller à la première ligne je reviens directement sur
l'application, cad que bien que le code soit là, il ne s'exécute pas !!!

Des idées ?




Avatar
Oriane
Finalement mon code comportait des erreurs dans l'assignation des datamembers. J'assignais des relations (Site.SiteCommande) alors que je devais mettre des tables (Commande).

Cependant le comportement que j'ai indiqué (le NEXT en mode DEBUG qui me remet directement sur l'application) se produit au bout d'un certain nb de manipulations...

Ca doit être un bug j'imagine...

A+

_________________________________________________________________________ _______________________

"Oriane" a écrit dans le message de news: d1m5ia$mr$
Bonjour,

j'ai certains problèmes de mise à jour de DataGrid parent-enfants, auxquels je ne comprends pas gd chose.
Schématiquement j'ai Site-->Commande-->Produits avce à chaque fois une relation 1-->N.

J'ai trois grids, et j'ai créé dans le code deux event-handlers pour les Grids "Site" et "Commande". Ces event-handlers déclenchent des requêtes en base pour alimenter un dataset typé, contenant les 3 tables.

Et en fait, tout fonctionne pour la première ligne de chaque grid. Mais si je clique sur les seconde, troisième... je ne récupère pas ce qui est en base. Pourtant la requête est lancée...

Pire, la deuxième fois que je clique sur une ligne de "Site", rien ne se met à jour. Lorsque je rentre dans le code de la fonction de requêtage appeleé par le event handler (avec un breakpoint en mode DEBUG), et que je fais "Next" pour aller à la première ligne je reviens directement sur l'application, cad que bien que le code soit là, il ne s'exécute pas !!!

Des idées ?