Probème de remplissage sur un DataGrid [Résolu]

Signaler
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
-
 cs_coq -
Bonjour à tous,

J'aimerais réaliser un DataGrid dans lequel se trouverais les 5 dernières interventions du client choisit auparavant.

Je n'ai jamais réalisé de DataGrid donc j'ai besoin de votre aide s'il vous plais.

Je pense avec les tutos que j'ai lu, qu'il serait bien que je réalise un dataSet.

J'aimerais avoir votre aide sur le procédé de comment réaliser et surtout remplir mon dataGrid??

J'ai essayé quelque chose mais ça fonctionne pas :

CODE :
string
requete ("SELECT TOP 5 INTERVENTION.IN_NUMINTER, CONTACT.CT_NOMCTACT, MACHINE.M_NOMMAT FROM INTERVENTION INNER JOIN MACHINE ON INTERVENTION.IN_IDMAT MACHINE.M_IDMAT AND INTERVENTION.IN_NUMCLT = dbo.MACHINE.M_NUMCLT INNER JOIN CONTACT ON MACHINE.M_NUMCTACT = CONTACT.CT_NUMCTACT WHERE INTERVENTION.IN_NUMCLT = '" + NumClt.Text + "' ORDER BY INTERVENTION.IN_NUMINTER DESC");connection =

new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI");connection.Open();

try{
SqlDataAdapter dataAdapter new SqlDataAdapter(requete,connection);DataSet ds

new DataSet();dataAdapter.Fill(ds);

}

catch(Exception ex){

MessageBox.Show(ex.ToString());

}

finally{

connection.Close();

}

Merci d'avance pour votre aide!!

28 réponses

Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

private






void
dataGrid1_MouseDown(

object
sender, System.Windows.Forms.MouseEventArgs e)
{
   DataGrid monGrid = (DataGrid) sender;
   System.Windows.Forms.DataGrid.HitTestInfo hti;
   hti = monGrid.HitTest(e.X, e.Y);


if
(hti.Column.Equals(0))
{
   NumInter.Text = dataGrid1[hti.Row ,hti.Column].ToString();
   NumInter.Visible=

true
;
   LieuInter.Visible=

true
;
   RaisonInter.Visible=

true
;
   EtatInter.Visible=

true
;
}


else

{
   NumInter.Text = "";
   NumInter.Visible=

false
;
   LieuInter.Visible=

false
;
   RaisonInter.Visible=

false
;
   EtatInter.Visible=

false
;
}
}

Dans NomClient_SelectedIndexChanged juste en dessous de  dataGrid1.DataMember = "Five_Last_Intervention"; ajoute :

NumInter.Text = "";
NumInter.Visible=
false;
LieuInter.Visible=
false;
RaisonInter.Visible=
false;
EtatInter.Visible=
false;
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Null est l'absence de valeur, donc une initialisation comme :

string DateCharge="<NULL>";

string Depo="<NULL>";

ne te servira pas a grand chose !

Aprés je pense que ta requete sera mieu si tu l'écris de la sorte lorsque le checked est a False
new SqlCommand("UPDATE INTERVENTION SET IN_PRICHARG Null WHERE IN_NUMINTER '" + NumIntervention.Text + "'", connection);

Ps: n'oublie pas de cloturer le sujet quand ça sera ok
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Tout simplement il faut que tu donne à la propriété DataSource de ton DataGrid le DataSet que tu vient de remplir par la méthode Fill() du dataAdapter ...

SqlDataAdapter dataAdapter =
new
SqlDataAdapter(requete, connection);

DataSet ds =
new
DataSet();

dataAdapter.Fill(ds,
"Nom_Table"); //je te conseil de donner un nom au jeux de résultats de ta requete SELECT

DataGrid1.DataSource = ds.Tables[
"Nom_Table"]; //Affecte la source a ton DataGrid

DataGrid1.DataBind(); //Rempli le datagrid
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Merci pour ton aide lassaad83.

Mais je viens d'essayer cela : SqlDataAdapter dataAdapter new SqlDataAdapter(requete, connection);DataSet ds

new DataSet();dataAdapter.Fill(ds,"requete");

//je te conseil de donner un nom au jeux de résultats de ta requete SELECTdataGrid1.DataSource = ds.Tables["requete"];

//Affecte la source a ton DataGriddataGrid1.DataBindings();

//Rempli le datagrid

L'erreur est la suivante : " C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(243): 'System.Windows.Forms.Control.DataBindings' désigne 'propriété' où 'méthode' était attendu
".
Il me souligne "DataBindings".

Mais si je met "DataBind()" au lieu de "DataBlindings", l'erreur est la suivante : "C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(243): 'System.Windows.Forms.DataGrid' ne contient pas de définition pour 'DataBind'
".

Comment je peux faire??

P.S. : que veux tu dire par  "je te conseil de donner un nom au jeux de résultats de ta requete SELECT"??

Merci d'avance!!
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Attention c'est DataGrid1.DataBind() et non pas dataGrid1.DataBindings();

Concernant ma remarque, en fait lorsque tu récupere le résultat de ton SELECT dans le DataSet il serait préférable de lui donné un nom comme un alias. Le DataSet est une mini Base de Donné en mémoire, donc tu peut avoir plusieur table dans un seul DataSet. En donnant des nom a ces Tables tu t'y retrouvera facilement surtout si tu compte en stocké plusieurs dans le DataSet.

dataAdapter.Fill(ds,"Five_Last_Intervention");  //designe le jeux de résultat de ta requetes des  5 dernières interventions

dataAdapter.Fill(ds,"Client");  //designe le jeux de résultat d'une requetes qui liste les Clients

//Après si tu veux par exemple que ton DataGrid affiche les 5 dernières interventions tu devra lui affecter comme source :
dataGrid1.DataSource = ds.Tables["Five_Last_Intervention"];

// si tu veux afficher le nom des Client tu lui affectera :
dataGrid1.DataSource = ds.Tables["Client"];

N'oubli pas le DataGrid1.DataBind() !
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Pour revenir sur ta remarque , ce que tu ma dit, revien au même que d'avoir mit requete?? Certe "Five_Last_Intervention" est plus explicite mais si je met ça faut que je mette : Five_Last_Intervention = ("SELECT TOP 5 INTERVENTION.IN_NUMINTER, CONTACT.CT_NOMCTACT, MACHINE.M_NOMMAT FROM INTERVENTION INNER JOIN MACHINE ON INTERVENTION.IN_IDMAT = MACHINE.M_IDMAT AND INTERVENTION.IN_NUMCLT = dbo.MACHINE.M_NUMCLT INNER JOIN CONTACT ON MACHINE.M_NUMCTACT = CONTACT.CT_NUMCTACT WHERE INTERVENTION.IN_NUMCLT = '" + NumClt.Text + "' ORDER BY INTERVENTION.IN_NUMINTER DESC");

??

Mais mon DataGrid se nomme dataGrid1 donc je devrais plutot mettre "DataGrid1.DataBind()"??

Mais si je met cela  "dataGrid1.DataBind();
" , le problème est le suivant : C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(165): 'System.Windows.Forms.DataGrid' ne contient pas de définition pour 'DataBind'
 ??

Merci d'avance!!
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

La belle bétisé que je vien de dire ....

Il faut plutot mettre ça :

dataAdapter.Fill(ds,"xyz"); 
dataGrid1.DataSource = ds;
dataGrid1.DataMember = "xyz";
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Pas grave t'inquiète pas, ça arrive a tout le monde.

Je l'avais vu DataMember mais je savais pas trop si je devais m'en servir puis surtout comment.

Merci beaucoup car grâce à toi, ça fonctionne.
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Par contre je voulais savoir s'il étais possible qu'en cliquant sur une ligne du DataGrid, (par exemple on clique le NumInter) ben que ce NumInter soit affiché en dessous du DataGrid??

merci d'avance!!
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Oui c'est possible, mais perso le DataGrid ... ça me rappel de très mauvais souvenir ...

Pour faire ce que tu veux, il faudra que tu passe par l'abscise, l'ordonnée retourné par le click de la souri et faire plein de bricolage sans dessus dessous pour pouvoir recuperer le text de ta cellule...

Tu est sur VS 2003 ou 2005 ? 

Si tu est sur VS 2005 je te consiel d'utiliser plutot le DataGridView, il faut savoir que le DataGrid n'a pas été conservé dans le Framework 2.0 tout simplement pour fournir une compatibilité ascendante avec l'ancienne version et qu'il reste très limiter en comparaison à ces succésseurs.
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Bonjour lassaad83.

J'utilise VS.Net 2003.

merci d'avance pour ton aide.

P.S. : quel mauvais souvenir le datagrid te rappelle t-il??
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Il fallait écrire beaucoup de code pour pouvoir faire ce que l'ont voulait, mais surtout, c'était pas facil à maintenir !
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Ok.

Que veux tu dire pas "pas facil a maintenir"??

Tu pourrais m'aider s'il te plais pour faire ce que je veux car je sait voit pas trop quoi  utiliser, comment utiliser....??

merci d'avance!!
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

La maintenance du code été difficile, chaque modification chamboulait tout ce qui été fait auparavant bien entendu c'était pas toujours le cas...

Pour ce que tu veut fairte il faut que tu implémente l'evenement CurrentCellChanged de ton dataGrid et voila comment afficher dans un label la cellule selectionnée lors de ton click :

private
void dataGrid1_CurrentCellChanged(
object sender, System.EventArgs e)
{
   
// MessageBox.Show ("Colone n° " + dataGrid1.CurrentCell.ColumnNumber
   // + ", ligne n° " + dataGrid1.CurrentCell.RowNumber 
   // + ", Value : " + dataGrid1[dataGrid1.CurrentCell] );

      label1.Text = dataGrid1[dataGrid1.CurrentCell].ToString();
}
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Ok.

Que veux tu dire par : // MessageBox.Show ("Colone n° " + dataGrid1.CurrentCell.ColumnNumber
   // + ", ligne n° " + dataGrid1.CurrentCell.RowNumber 
   // + ", Value : " + dataGrid1[dataGrid1.CurrentCell] ); ??

Sinon j'ai fais :

private
void dataGrid1_CurrentCellChanged(
object sender, System.EventArgs e){

NumInter.Text = dataGrid1[dataGrid1.CurrentCell].ToString();

}

Mais 2 problème :
   * Dés que j'ai mon DataGrid d'affiché, lorsque je clique sur la première ligne, ça me l'affiche pas dans le label. Mais si je veux insérer la première ligne dans le label faut ke je clike sur la deuxième(ou la troisième..lignes) puis ensuite ke je reclike sur la première. Alors que je souhaiterais pouvoir cliké sur la première sans avoir a aller sur une autre avant. Comment puis-je faire??
   * Je souhaiterais pouvoir juste cliquer sur les NumInterventions(première colonne du datagrid) Comment je peux faire pour faire cela??

merci d'avance pour ton aide et merci pour l'aide ke tu ma déja apporté.
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Essaye ça :

private
void dataGrid1_CurrentCellChanged(
object sender, System.EventArgs e)
{   
      MessageBox.Show ("Colone Numéro : " + dataGrid1.CurrentCell.ColumnNumber
      + ", Ligne numéro : " + dataGrid1.CurrentCell.RowNumber 
      + ", Valeur NumInterventions :  " + dataGrid1[dataGrid1.CurrentCell] );
}

Qu'est ce que t'affiche le message lorsque tu click sur le premier NumInterventions ??
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Lorsque je clique sur la première intervention, il m'affiche rien, ça sélectionne juste.
Par contre si je clique sur le NomCtact, il m'affiche l'emplacement (ligne n°0, colonne : 2, valeur : vivien).

Merci d'avance.
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Une question me tracasse Loic.... tu est bien sur un projet Windows et non ASP ...
Messages postés
207
Date d'inscription
mardi 19 juin 2007
Statut
Membre
Dernière intervention
22 février 2016
2
Il ne faut pas te tracasser pour si peu lassaad83 car c'est bien un projet Windows.

merci d'avance!!
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

ça, ça te retourne normalement le NumIntervention de la ligne ou tu a clické ...

label1.Text = dataGrid1[dataGrid1.CurrentCell.RowNumber ,0].ToString();