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 :

Comment faire pour choisir une colonne d'un dataGrid?


Sujet :

Windows Forms

  1. #41
    Membre du Club

    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 65
    Points
    65
    Par défaut
    Aucune classe ne doit etre "dans" une autre
    La classe Donnees n'herite d'aucune autre classe
    listeDonnees herite uniquement de ArrayList comme te le montre le code que je t'ai montré
    Voici le squelette que tu devrais avoir

    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
    namespace machin
    {//Debut du namespace
         Class Form1
         {
     
         }
     
         Class Donnees
         {
     
         }
     
         Class listeDonnees
         {
     
         }
    }//Fin du namespace

  2. #42
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à titip
    Ok, merci pour ton renseignement!!

    Si je laisse le '.Text', cela me génére l'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\fils\Mes documents\Visual Studio Projects\SuiviClient_DistribInfo\SuiviIntervention.cs(1570): 'string' ne contient pas de définition pour 'Text'
    Par contre, si je fais comme Guulh me la conseillé, je n'ai plus de message d'erreur mais comme je le dit depuis tout ta l'heure, les colonnes de mon dataGrid ne se créé pas!! Je pense que ce problème vient peut être(je peux me tromper!!) de l'exécution de la requête(cr si je la test dans lanalyseur de requête de SqlServer2000 alors ça m'affiche bien les noms des colonnes). Voici le code qui l'exécute :
    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
    DataTable dt1 = new DataTable();
    			string RelationClientele = ("SELECT RC_NUMINTER as numinter, RC_DHRELCL as DateHeure, RC_CNURELCL as Contenu, RC_TELCTACT as Tel, RC_MOYCTACT as MoyenContact FROM RELATION_CLIENTELE WHERE RC_NUMINTER = '" + NumIntervention.Text + "'");
    			connection.Open();
    			try
    			{
    				SqlDataAdapter dataAdapter1 = new SqlDataAdapter(RelationClientele, connection);
    				dataAdapter1.Fill(dt1);
    				dataGrid2.DataMember = "RelationClientele";
     
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.ToString());
    			}
    			finally
    			{
    				connection.Close();
    			}  
    			listeDonnees liste = new listeDonnees();
    			//Transformation du DataTable en listeDonnees			
    			foreach(DataRow dr in dt1.Rows)
    			{
    				liste.Add(new Donnees(dr[0].ToString(),DateTime.Parse(dr[1].ToString()), dr[2].ToString(), dr[3].ToString(), dr[4].ToString()));
    			}
    			dataGrid2.DataSource = liste;
    Comment faire!!??

    Merci d'avance!!

  3. #43
    Membre du Club

    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 65
    Points
    65
    Par défaut
    rajoute la ligne suivante pour debugger un peu,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show(liste.Count.ToString());
    avant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid2.DataSource = liste;
    Ca te permettra de savoir si tu as des lignes dans ton datasource

  4. #44
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à titip
    Si dans la base, il existe aucune relationClientèle pour l'intervention choissit alors il m'affiche 0, sinon il m'affiche le nombre de relation clientèle!!
    Donc jusque la aucun problème!!

    Si il m'en affiche 0 alors les colonnes ne se créé pas(voir ci-joint ce que cela me donne).
    Si il m'affiche 1 alors les colonnes se créé, les remplits(voir ci-joint ce que cela me donne)mais si je descent le curseur pour les voir tous alors il m'affiche l'erreur suivante :
    Une exception non gérée du type 'System.Reflection.TargetInvocationException' s'est produite dans system.windows.forms.dll

    Informations supplémentaires*: L'accesseur de propriété 'NumIntervention' sur l'objet 'System.String' a levé l'exception suivante*:'L'objet ne correspond pas au type cible.'
    Merci d'avance!!

  5. #45
    Membre du Club

    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Une exception non gérée du type 'System.Reflection.TargetInvocationException' s'est produite dans system.windows.forms.dll

    Informations supplémentaires*: L'accesseur de propriété 'NumIntervention' sur l'objet 'System.String' a levé l'exception suivante*:'L'objet ne correspond pas au type cible.'
    Je suppose que tu as change le nom de l'accesseur numInter par numIntervention de la classe Donnees...
    Verifie tes types dans la definition de l'accesseur et de l'attribut correspondant, ils doivent tous etre en string
    Essaie de creuser en mettant des points d'arrets sau niveau de l'accesseur si tu ne vois pas d'erreur, tu pourras debugger step by step avec la touche F11

  6. #46
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à titip
    Je voudrais te remercier pour tout ton aide que tu m'apporte!!

    Donc maintenant je n'ai plus de message d'erreur, mes colonne se créé.
    Tu va me demander comment j'ai fais : ben tout simplement j'ai mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid2.DataSource = dt1;
    apré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid2.DataMember = "RelationClientele";
    et apré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(DataRow dr in dt1.Rows)
    			{
    				liste.Add(new Donnees(dr[0].ToString(),DateTime.Parse(dr[1].ToString()), dr[2].ToString(), dr[3].ToString(), dr[4].ToString()));
    			}
    ce qui me donne le code suivant :
    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
     
    private void NumInter_TextChanged(object sender, System.EventArgs e)
    		{
    DataTable dt1 = new DataTable();
    			string RelationClientele = ("SELECT RC_NUMINTER as numinter, RC_DHRELCL as DateHeure, RC_CNURELCL as Contenu, RC_TELCTACT as Tel, RC_MOYCTACT as MoyenContact FROM RELATION_CLIENTELE WHERE RC_NUMINTER = '" + NumIntervention.Text + "'");
    			connection.Open();
    			try
    			{
    				SqlDataAdapter dataAdapter1 = new SqlDataAdapter(RelationClientele, connection);
    				dataAdapter1.Fill(dt1);
    				dataGrid2.DataMember = "RelationClientele";
    				dataGrid2.DataSource = dt1;
     
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.ToString());
    			}
    			finally
    			{
    				connection.Close();
    			}  
    			listeDonnees liste = new listeDonnees();
    			//Transformation du DataTable en listeDonnees			
    			foreach(DataRow dr in dt1.Rows)
    			{
    				liste.Add(new Donnees(dr[0].ToString(),DateTime.Parse(dr[1].ToString()), dr[2].ToString(), dr[3].ToString(), dr[4].ToString()));
    			}
    			dataGrid2.DataSource = dt1;
    }
    Mais le problème c'est que si je remplit les colonnes(sans remplir la première c'est à dire 'numinter') ben la première colonne reste vide. C'est à dire que dans mon dataGrid j'obtien ce genre de chose :
    numinter = (null)
    DateHeure = 01/08/2008
    Contenu = jghd
    Tel = 3315743
    MoyenContact = répondeur

    Pourquoi numinter prend pas le numéro de l'intervention comme valeur(label)??


    Voici le code de la class Donnees :
    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
    49
    	public class Donnees
    	{
    		private string numinter;
    		private DateTime dateHeure;
    		private string contenu;
    		private string tel;
    		private string moyenContact;
     
    		public Donnees(string n, DateTime d, string c, string t, string m)
    		{
    			numinter= n;
    			dateHeure= d;
    			contenu= c;
    			tel= t;
    			moyenContact= m;
    		}
    		public string NumIntervention
    		{
    			get{ return numinter; }
    			set{ numinter= value; }
    		}
    		public DateTime DateHeure
    		{
    			get{ return dateHeure; }
    			set{ dateHeure= value; }
    		}
    		public string Contenu
    		{
    			get{ return contenu; }
    			set
    			{ 
    				contenu = value; 
    				if(contenu == null)
    				{
    					numinter = NumIntervention;
    				}
    			}
    		} 
    		public string Tel
    		{
    			get{ return tel; }
    			set{ tel = value; }
    		}
    		public string MoyenContact
    		{
    			get{ return moyenContact; }
    			set{ moyenContact= value; }
    		}
    	}
    Merci d'avance!!

  7. #47
    Membre du Club

    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Mais le problème c'est que si je remplit les colonnes(sans remplir la première c'est à dire 'numinter') ben la première colonne reste vide. C'est à dire que dans mon dataGrid j'obtien ce genre de chose :
    numinter = (null)
    DateHeure = 01/08/2008
    Contenu = jghd
    Tel = 3315743
    MoyenContact = répondeur

    Pourquoi numinter prend pas le numéro de l'intervention comme valeur(label)??


    Voici le code de la class Donnees :
    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
    49
    	public class Donnees
    	{
    		private string numinter;
    		private DateTime dateHeure;
    		private string contenu;
    		private string tel;
    		private string moyenContact;
     
    		public Donnees(string n, DateTime d, string c, string t, string m)
    		{
    			numinter= n;
    			dateHeure= d;
    			contenu= c;
    			tel= t;
    			moyenContact= m;
    		}
    		public string NumIntervention
    		{
    			get{ return numinter; }
    			set{ numinter= value; }
    		}
    		public DateTime DateHeure
    		{
    			get{ return dateHeure; }
    			set{ dateHeure= value; }
    		}
    		public string Contenu
    		{
    			get{ return contenu; }
    			set
    			{ 
    				contenu = value; 
    				if(contenu == null)
    				{
    					numinter = NumIntervention;
    				}
    			}
    		} 
    		public string Tel
    		{
    			get{ return tel; }
    			set{ tel = value; }
    		}
    		public string MoyenContact
    		{
    			get{ return moyenContact; }
    			set{ moyenContact= value; }
    		}
    	}
    Merci d'avance!!
    Parce que tu ne demande pas de le remplir au bon endroit... tu demande d'effectuer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numinter = NumIntervention;
    lors de l'acces à la variable "contenu" si elle est nulle. Or dans tes valeurs, contenu n'est pas nulle

    Il faudrait plutot essayer un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public string Contenu
    {
    	get{ return contenu; }
    	set
    	{ 
    		contenu = value; 
    		if(contenu != "" && (numinter == "" || numinter == null))
    		{
    			numinter = NumIntervention;
    		}
    	}
    }
    La condition est un exemple, il faudrait l'adapter selon l'utilisation que tu en fais, le cas que je te presente renseigne numinter par NumIntervention si le contenu est vide ET que numinter est soit vide soit nul.

    Bon courage

  8. #48
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à titip
    merci pour tes renseignements!!

    Voila je viens de réaliser la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public string Contenu
    			{
    				get{ return contenu; }
    				set
    				{ 
    					contenu = value; 
    					if((contenu != "" || contenu != "") && (numinter == "" || numinter == (null)) && (tel != (null) || tel != "") && (moyenContact != (null) || moyenContact != ""))
    					{
    						numinter = NumIntervention;
    					}
    				}
    			}
    Mais cela ne m'ajoute toujours pas le numéro de l'intervention dans la colonne!!
    Donc je me demande, en insérant ce code dans la classe Donnee, a quel moment cela devrai m'insérer le numéro de l'intervention dans le dataGrid??

    Devrai-je pas plutot le mettre dans le "foreach"??

    Est-ce que d'apré toi, mon problème peut venir du fait que j'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid2.DataSource = liste;
    aprés le "foreach"??

    Cordialement!!

  9. #49
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Lorsque je met des points d'arrêts au niveau du 'set de contenu' dans la classe Donnees, je me rend compte que ça passse pas par là!! Donc c'est pour ça que la colonne numinter ne se remplit pas!!

    J'ai relu ce que vous m'avez dit depuis le début, un moment titip tu me parle de l'événement leave, mais je comprend pas trop ce qu'il fais exactement?? Donc je me demande si je dois mettre le foreach+le if dedans??

    J'ai vraiment besoin de votre aide s'il vous plais!!

    Cordialement!

  10. #50
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Apré avoir réfléchi j'ai voulu tester le code suivant :
    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
    private void dataGrid2_Leave(object sender, System.EventArgs e)
    		{
    			if(dataGrid1.DataSource != null)
    			{
    				foreach(Donnees d in ((listeDonnees)dataGrid2.DataSource))
    				{
    					if(d.NumInter == "(null)")
    					{
    						d.NumInter = NumIntervention.Text;
    						dataGrid2.Refresh();
    					}
    				}
    			}
     
    		}
    Le problème c'est que lorsque je clique sur une textBox ou autre de la fenêtre(apré avoir remplit les colonnes sauf la première), j'obtien un message d'erreur qui se situe dans le document ci-joint(word).

    J'ai vraiment besoin de votre aide car je suis bloqué et je sais pas comment faire!!

    Cordialement!!

  11. #51
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    C'est bon j'ai réussit a résoudre mon problème en mettant le code suivant dans l'événement de mon bouton valider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void Valider_Click(object sender, System.EventArgs e)
    		{
    			listeDonnees liste = new listeDonnees();
    			//Transformation du DataTable en listeDonnees			
    			foreach(DataRow dr in dt1.Rows)
    			{
    				if(dr[2].ToString()!= "")
    					dr[0] = NumIntervention.Text;
     
    				liste.Add(new Donnees(dr[0].ToString(),DateTime.Parse(dr[1].ToString()), dr[2].ToString(), dr[3].ToString(), dr[4].ToString()));
    			} 
    			dataGrid2.DataSource = liste;
    }
    Merci pour tout!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2009, 03h48
  2. Comment faire pour qu'une colonne s'agrandisse selon son contenu?
    Par loic20h28 dans le forum Windows Forms
    Réponses: 19
    Dernier message: 13/08/2008, 19h34
  3. Comment faire pour afficher une image ds une dbgrid
    Par totomaze dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/10/2004, 15h31
  4. Comment faire pour killer une application ?
    Par tintin22 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 17/08/2004, 18h16
  5. comment faire pour qu'une application soit toujours visible ?
    Par goldbar dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/03/2004, 14h35

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