IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Probleme sur la modification des donnees affichées par un datagrid a l execution,C#


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Probleme sur la modification des donnees affichées par un datagrid a l execution,C#
    bonjour a tous,

    j ai un datatable Requete qui est initialiser a l execution par la lecture d une table.
    Ce datatable devient datasource de mon datagrid, toujours a l execution. Mon datagrid contient une colonne checkBox, cette colonne affiche le contenu d'une colonne de mon datatable (colonne de type char(1) qui vaut 1 ou null).
    A l affichage de mon datagrid, pas de probleme, si ma colonne vaut 1, la checkbox est cochee, sinon elle vaut null, la checkbox est decochee.

    Mantenant, contrairement au fonctionnement normal du datagrid, je veux modifier la valeuir de ma checkbox par un simple clic sur celle ci. Et c est la que ca ne fonctionne pas. Voice mon code:

    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
     
    private void DTG_Requete_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    	DataGrid.HitTestInfo hti = this.DTG_Requete.HitTest(e.X, e.Y); 
    	try 
    	{ 
    	    if( hti.Type == DataGrid.HitTestType.Cell && hti.Column == myCheckBoxCol) 
                    { 
    	  //this.DTG_Requete[hti.Row, myCheckBoxCol] = ! (bool)   this.DTG_Requete[hti.Row, myCheckBoxCol]; 
                 	Requete.Rows[hti.Row][myCheckBoxCol] = (this.Requete.Rows[hti.Row][myCheckBoxCol].ToString() == "1" ? "0":"1");
    	    } 
                  }                                                                                   
    	catch(Exception ex) 
     	{ 
     		MessageBox.Show(ex.ToString()); 
     	} 
     }
    La ligne en commentaire ne fonctionne pas, lorsque que l on clique deux fois de suite sur la meme case, j ai une erreur. Pour les autres cas, ca fonctionne.

    La ligne du dessous fonctionne sauf dans le cas ou on clique deux fois de suite sur la meme case, la premiere fois, la valeur change, la deuxieme fois il ne se passe rien (si ce n est que en debut de ligne apparait le stylo a la place de la fleche) et la troisieme fois, la valeur change, on revient au fonctionnement normal d un double clic.

    Je ne comprend pas, pouvez vous m aider.

  2. #2
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,
    Je vois que t'as bien mis un :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	try 
    	{ 
    	   //Ton code
                 }                                                                                   
    	catch(Exception ex) 
     	{ 
     		MessageBox.Show(ex.ToString()); 
     	}

    T'aurais dû nous fournir également le message d'erreur, question d'éliminer les différents possibilités.
    D'après ta description, je crois qu'il s'agit d'un "La référence d'objet n'est pas définie à une instance d'un objet.", quand tu dis que la colonne en question est un char qui vaut '1' ou null, alors s'il vaut null et qu'on passe par ta ligne bugeuse:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //...
    this.DTG_Requete[hti.Row, myCheckBoxCol] = ! (bool)   this.DTG_Requete[hti.Row, myCheckBoxCol];
    //C'est comme si tu faisais (bool) null;
    //...
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par DarkMolo
    Salut,
    Je vois que t'as bien mis un :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	try 
    	{ 
    	   //Ton code
                 }                                                                                   
    	catch(Exception ex) 
     	{ 
     		MessageBox.Show(ex.ToString()); 
     	}

    T'aurais dû nous fournir également le message d'erreur, question d'éliminer les différents possibilités.
    D'après ta description, je crois qu'il s'agit d'un "La référence d'objet n'est pas définie à une instance d'un objet.", quand tu dis que la colonne en question est un char qui vaut '1' ou null, alors s'il vaut null et qu'on passe par ta ligne bugeuse:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //...
    this.DTG_Requete[hti.Row, myCheckBoxCol] = ! (bool)   this.DTG_Requete[hti.Row, myCheckBoxCol];
    //C'est comme si tu faisais (bool) null;
    //...

    Ok, mais alors pourquoi ca le fait que pour deux clic d affiles sur la meme ligne???? Ca fonctionne tres bien quand on fait un clic sur une ligne, un sur une autre ligne et qu on revient faire un clic sur la premiere ligne, dans ce cas, aucun souci, la case change d etat sans probleme.

    Et dans le cas ou je modifie directement les donnees (le datatable, donc je gere le string (char(1))), la mise a jour du datagrid se fait tres bien, sauf quand je clique deux fois de suite sur la meme ligne, ou la il passe en mode edition et prend pas en compte le changement de valeur de mon datatable. Pourquoi???

  4. #4
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Je t'avais dit que ce n'était qu'une hypothèse, transmets nous le message d'erreur pour qu'on y voit plus clair.
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par DarkMolo
    Je t'avais dit que ce n'était qu'une hypothèse, transmets nous le message d'erreur pour qu'on y voit plus clair.
    Le cast spécifié n est pas valide

  6. #6
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Ah, là c'est plus clair, j'ai voulu testé, et j'ai eu le même problème:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object f = "1";
    bool g = (bool)f;    //<--Le cast spécifié n'est pas valide.

    Donc je pense que tu dois faire le control toi même:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    this.DTG_Requete[hti.Row, myCheckBoxCol] = ! (bool)   (this.DTG_Requete[hti.Row, myCheckBoxCol] == null ? false : true);
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par DarkMolo
    Ah, là c'est plus clair, j'ai voulu testé, et j'ai eu le même problème:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object f = "1";
    bool g = (bool)f;    //<--Le cast spécifié n'est pas valide.

    Donc je pense que tu dois faire le control toi même:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    this.DTG_Requete[hti.Row, myCheckBoxCol] = ! (bool)   (this.DTG_Requete[hti.Row, myCheckBoxCol] == null ? false : true);
    OK, je vais tester, mais dans mon exemple de code, j utilise directement le datatable Requete, les modifications sont effectuées dessus, mais dans le cas de deux clic a la suite sur le meme ligne, la midification au niveau du datagrid n est pas effectuee (alors qu elle l est sur le datatable), la ligne du datagrid passe en mode edition, c est justement ce que je veux eviter... Ca marche tres bien quand on clic sur des lignes differentes.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par fdatdev06
    OK, je vais tester, mais dans mon exemple de code, j utilise directement le datatable Requete, les modifications sont effectuées dessus, mais dans le cas de deux clic a la suite sur le meme ligne, la midification au niveau du datagrid n est pas effectuee (alors qu elle l est sur le datatable), la ligne du datagrid passe en mode edition, c est justement ce que je veux eviter... Ca marche tres bien quand on clic sur des lignes differentes.
    En fait, j ai dit une betise, quand je rempli mon datatable Requete, si la colonne vaut null, je metrs la valeur "0". Donc pour la suite, je n ai pas de probleme avec le null. Mais alors, ou est le probleme??????????

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par fdatdev06
    En fait, j ai dit une betise, quand je rempli mon datatable Requete, si la colonne vaut null, je metrs la valeur "0". Donc pour la suite, je n ai pas de probleme avec le null. Mais alors, ou est le probleme??????????
    Voila comment je semble avoir resolu mon probleme, est ce que cela vous semble correct, le resultat est bon, mais est ce que la maniere l est?

    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
     
    if( hti.Type == DataGrid.HitTestType.Cell && hti.Column == myCheckBoxCol) 
    { 
       DataGridTableStyle dgt= DTG_Requete.TableStyles[0];
       DataGridColumnStyle myCol = dgt.GridColumnStyles[4]; 
     
       dgt.BeginEdit(myCol,hti.Row); 
     
       //this.DTG_Requete[hti.Row, myCheckBoxCol] = ! (bool) this.DTG_Requete[hti.Row, myCheckBoxCol]; 
     
       Requete.Rows[hti.Row][myCheckBoxCol] = (this.Requete.Rows[hti.Row]  [myCheckBoxCol].ToString() == "1" ? "0":"1");
     
       dgt.EndEdit(myCol, hti.Row, true);
     
    }
    J utilise en fait le BeginEdit et EndEdit du DataGridTableStyle pour dire au DataGrid que je fait des modification sur les données, pendant ce temps, les contraintes sont temporairements désactivées.

    Qu en pensez vous???

Discussions similaires

  1. probleme sur la gestion des collections
    Par joelc dans le forum ASP
    Réponses: 1
    Dernier message: 24/08/2006, 15h19
  2. Réponses: 5
    Dernier message: 03/07/2006, 18h19
  3. Réponses: 12
    Dernier message: 07/06/2006, 17h13
  4. [Servlet] envoyer des données serializé par post
    Par vinceLeBarbare dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/06/2006, 11h19
  5. Probleme sur le Fields des fichiers Xmlgram
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/03/2003, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo