Problème affichage DataGrid

lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006 - 21 févr. 2006 à 16:17
cs_amiri Messages postés 3 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 21 décembre 2006 - 20 déc. 2006 à 21:04
Bonjour,





Je rencontre un problème d’affichage avec les datagrids.


Voilà mon problème.


J’ai 2 datagrids (DG1 et DG2).


Je sélectionne une ligne dans DG1.


Je vide DG2 puis je la recharge avec des données qui sont fonction de la ligne sélectionnée dans DG1.


Mes 2 datagrids sont remplis.


Je sélectionne une cellule dans DG2. Puis je sélectionne une autre ligne de DG1, DG2 se remet à jour, mais le contenu de l’ancienne cellule sélectionnée dans DG2 reste affichée dans le « vide ».


Par exemple :


J’ai 20 lignes dans DG2 avant rechargement, je sélectionne une cellule de la ligne 19.


J’ai 10 lignes dans la DG2 après rechargement et les données anciennement sélectionnées restent affichées à la position de la ligne 19 en dehors du tableau. Comme une sorte de fantôme de l’affichage précédent !


Il faut que je sélectionne une ligne de DG2 pour que le problème d’affichage disparraisse.


J’ai éssayé de vider la sélection courante, de faire un refresh sur ma DG2, même de supprimer la ligne, rien n’y fait.


Quelqu’un aurait déjà rencontré ce problème ?

Merci d’avance pour vos réponses.

Lilou

14 réponses

ienien85 Messages postés 41 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 28 février 2006
21 févr. 2006 à 16:45
salut est ce que tu pourrai laisser ton code pour voir un peu mieu. j'essayerai de t'aider

ienien85
0
lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006
21 févr. 2006 à 16:57
Bonjour,

Merci de ta démarche ca va être compliqué pour le code mais voici la fonction qui charge la DG2 en fonction de la DG1

Pour info:

DG1 = DG_Cours
DG2 = DG_Evaluation


private
void DG_Cours_MouseUp(
object sender, System.Windows.Forms.MouseEventArgs e)


{



//Déclaration des variables


DataView dv;


CurrencyManager cm;



int i;



int nbLigneSelect = 0;



int indexSelected = -1;


DataRow row;


DataTable table;



if (e.Button == MouseButtons.Left)


{


cm = (CurrencyManager)
this.BindingContext[
this.DG_Cours.DataSource,
this.DG_Cours.DataMember];


dv = (DataView)cm.List;



for(i = 0 ; i < dv.Table.Rows.Count; i++)


{



if(
this.DG_Cours.IsSelected(i))


{


nbLigneSelect ++;


indexSelected = i;


}


}



if(nbLigneSelect == 1)


{



if(indexSelected != -1)


{


row = dv.Table.Rows[indexSelected];


table = agEvaluationIntervenantSectionDate.GetTableSortedByWhereClause(



new CriterionExpressionAND(



new CriterionExpressionEQ(BOGRV2_Evaluation_Intervenant_Section_Date.AnneeField,



int.Parse(row[BOGRV2_Evaluation_Intervenant_Section_Date.AnneeField.Name].ToString())),



new CriterionExpressionEQ(BOGRV2_Evaluation_Intervenant_Section_Date.CoteField,


row[BOGRV2_Evaluation_Intervenant_Section_Date.CoteField.Name]),



new CriterionExpressionEQ(BOGRV2_Evaluation_Intervenant_Section_Date.SemestreField,


row[BOGRV2_Evaluation_Intervenant_Section_Date.SemestreField.Name])),


Order.By(BOGRV2_Evaluation_Intervenant_Section_Date.IntervenantField,


BOGRV2_Evaluation_Intervenant_Section_Date.NUMEROSECTIONField));



this.lblCours.Text = row[BOGRV2_Evaluation_Intervenant_Section_Date.LIBELLELocalizedField.Name].ToString();



this.lblCours.Text += " ( " + row[BOGRV2_Evaluation_Intervenant_Section_Date.CoteField.Name].ToString() + " )";



//Vide le DG_Evaluation



if(
this.DG_Evaluation.DataSource !=
null)


{


((DataView)
this.DG_Evaluation.DataSource).Table.Clear();


}


table.RowChanged +=
new DataRowChangeEventHandler(table_RowChanged);


table.ColumnChanged +=
new DataColumnChangeEventHandler(table_ColumnChanged);



this.DG_Evaluation.DataSource =
new DataView(table);


}


}



else


{


Helper.ShowBusinessMessageBoxDialog(
this,"Vous devez sélectionner une seule ligne","You must select only one row.");


}


}
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
22 févr. 2006 à 11:44
personnelemnt j'utiliserais un currency manager avec l'evennement positionchanged sur la D1 pour lancer le chargement de ta d2 et pas un mouse up ^^
ainsi des que la position de ton currencymanager sur D1 a changer il execute le code qui charge D2...
peut etre un epu plus propre que le mouse up...

sinon pour ton pb, peut etre un dg.refresh();

ou un
try
{
dg2.select(0);
}
catch{}

pour ce positionner sur la premiere ligne
si tu utilise un dataset pour DG2, faut peut etre faire un ds.clear();

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006
22 févr. 2006 à 12:14
Bonjour,

Merci de ton conseil Arthenius, je vais le mettre en place dès cet aprem.

Par contre pour le problème d'affichage, j'ai déjà testé le dg2.select(0) et mm avec un dg2.unselect(0) derrière rien à faire. Cela ne change rien. J'ai peur que ca soit un problème du controle datagrid lui mm.

Merci de ta réponse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
22 févr. 2006 à 14:35
c'est assez bizarre...

j'utilise cet technique un peu partout dans mes appli et pas de sousci...
tu a bien fais un dg.refresh() ??

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
22 févr. 2006 à 14:38
par contre j'utilise des dataset ...

et ca n'a aps l'air ton cas me gourge ???

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006
22 févr. 2006 à 14:45
Le refresh ne change rien.

Effectivement je n'utilise pas de DataSet mais directement une DataTable.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
22 févr. 2006 à 15:13
voila un exemple de code que je met sur le positionchanged

<hr size="2" width="100%"> ds.T_DOSSIER_SITE.Rows.Clear();
//On rempli le datagrid Site
if(CM_Dossier.Position>=0)
{
Da_Site.SelectCommand.Parameters["@DOSNUM"].Value = (System.Guid) ds.T_DOSSIER.Rows[CM_Dossier.Position]["DOSNUM"];
Da_Site.Fill(ds.T_DOSSIER_SITE);

//On affecte le Ds au datagrid
dg_Liste_Site.DataSource = ds.T_DOSSIER_SITE;
CM_Site = (CurrencyManager) BindingContext[ds.T_DOSSIER_SITE];
//Largeur des colonnes et nom de Colonnes
dg_Liste_Site.TableStyles["T_DOSSIER_SITE"].GridColumnStyles["SITCOD"].HeaderText = "Code";
dg_Liste_Site.TableStyles["T_DOSSIER_SITE"].GridColumnStyles["SITCOD"].Width = 100;
dg_Liste_Site.TableStyles["T_DOSSIER_SITE"].GridColumnStyles["SITCOD"].NullText = "";
dg_Liste_Site.TableStyles["T_DOSSIER_SITE"].GridColumnStyles["SITLIB"].HeaderText = "Site";
dg_Liste_Site.TableStyles["T_DOSSIER_SITE"].GridColumnStyles["SITLIB"].Width = 320;
dg_Liste_Site.TableStyles["T_DOSSIER_SITE"].GridColumnStyles["SITLIB"].NullText = "";

//Refresh du Datagrid
dg_Liste_Site.Refresh();
try
{
dg_Liste_Site.Select(0);
}
catch{}

<hr size="2" width="100%">
et jamais eu de sousis telle que le tiens...

CM_Dossier est mon currencymanager sur la table parent (ton D1)
dg_Liste_Site = D2

peut etre cela peut-il t'aider

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006
22 févr. 2006 à 15:41
Merci de ton aide.

Je vais voir avec ton code si ca change qq chose.

Je te tiens au courant.
0
lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006
23 févr. 2006 à 09:41
Bonjour,

J'ai utilisé le positionchanged du currency manager, ca marche super merci du conseil.

Par contre ca n'a pas résolu mon problème d'affichage. J'en perd mon latin. Je crois que g tout essayé. y compris de supprimer mon DG et de le recontruire.

Voilou merci pour ce qui m'ont aidé.

Lilou
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 févr. 2006 à 10:02
j'avoue ne pas comprendre comment la DG peut elle garder en memoire des choses alors que tu vide ton dataTable oO
???

:(

oui le positionchanged c mieux :)
plutot que
((DataView)
this.DG_Evaluation.DataSource).Table.Clear();

essaie :

((DataView)
this.DG_Evaluation.DataSource).Table.Rows.Clear();

...peut etre ^^

au point ou on en est

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
lilou3m Messages postés 8 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 23 février 2006
23 févr. 2006 à 16:41
Ben g testé
((DataView)this.DG_Evaluation.DataSource).Table.Rows.Clear();

ca marche po non plus .

Je crois que le problème d'affichage restera pour le moment. C un peu un casse tête chinois.

Par contre g une autre question, a propos du currency manager et de positionchanged. Ca marche trés bien mais y a un cas où ca ne marche pas.

Si g la ligne 12 selectionnée pour exemple, que je tri ma DG et que la ligne que je ve selectionner et à nouveau sur l'index 12 et ben elle ne se charge pas car la position du currency manager n'a pas changé, malgré le fait que les données elles ne sont plus les mm.

Je ne vois pas comment je pe pallier à ce problème !! Je n'arrive pas à trouver un évènement qui soit déclenché au moment du tri de la DG

Lilou.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 févr. 2006 à 17:29
erfouille ce qui veux dire que j'ai le meme pb...

bon on sait que les tris foute un joyeux bordel....

une solution possible (mais je sais pas si c faisable) est de trapper l'event du tri et de lancer le positionchanged ^^

mais bon...

perso j'ai deja eu pas mal de galere avec els tris...
en regle general qd je manipule les données je desactive temporairement les tris... ^^

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
cs_amiri Messages postés 3 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 21 décembre 2006
20 déc. 2006 à 21:04
Bonjour à tous,

Je suis dans une situation similaire.
Mon DG1 permet de mettre à jour le DG2.
En ce qui me concerne, les données apparaissent lorsque je clique sur l'intitulé d'une colonne !

Est-ce que qq a trouvé une solution.

Merci d'avance pour votre aide.

Raphaël
0
Rejoignez-nous