Affichage avec c#

Résolu
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012 - 9 juil. 2012 à 21:24
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012 - 1 août 2012 à 14:30



bonjour
je suis débutant en c# est j'ai une liste des matières et des modules et je veux l'es afficher comme l'image suivante
quelqu'un peut m'aider svp ?
merci

37 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
15 juil. 2012 à 13:30
Bonjour, tes 2 boucles sont imbriquées, du coup,en même temps que tu rempli la listbox, tu la parcours pour afficher les textbox.
Donc à chaque ligne de la base sql, tu relis entièrement la listbox, ca n'est peut etre pas la raison de ton bug, mais ça n'est pas optimisé.

Je te conseille de séparer tes boucles.
À la fin d'une exécution, tu peux regarder la listbox pour voir si ça chargé bien les données.

Whismeril
3
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
25 juil. 2012 à 17:55
Ok, ça revient un peu à ton image initiale (sauf qu'il y avait une case à cocher).

Comme je te l'avais dit à ce moment là, tu peux te servir d'un DataGridView, dont les deux premières colonnes sont des zones de texte et les deux autres des combobox, là une source d'exemple

Sinon il va falloir que tu ajoutes dynamiquement chaque contrôle à ton formulaire ou un conteneur (groupbox ou autre), pour ça il faut reproduire le type de code que Visual Studio génère dans le fichier Form1.Designer.cs quand tu déposes des contrôles sur le formulaire.

par exemple pour un bouton:

this.butCoucou = new System.Windows.Forms.Button();
...
// 
// butCoucou
// 
this.butCoucou.Location = new System.Drawing.Point(216, 203);
this.butCoucou.Name = "butCoucou";
this.butCoucou.Size = new System.Drawing.Size(108, 41);
this.butCoucou.TabIndex = 0;
this.butCoucou.Text = "coucou";
this.butCoucou.UseVisualStyleBackColor = true;

...

this.Controls.Add(this.butCoucou);




Whismeril
3
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
9 juil. 2012 à 23:39
Bonsoir,

le lien avec l'image ne semble pas avoir fonctionné.


Whismeril
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
11 juil. 2012 à 12:51
Bonjour,

j'ai reçu ton image.

Pour ce qui de l'affichage, avec un datagridview tu pourras afficher un module. Si tu recupéres tes données sous forme de List<T> ou de DataTable, il suffit d'affecter le contenant à la propriété datasource du datagridview. Tu peux aussi utiliser un databindingsource.

Pour afficher plusieurs modules, soit tu connais le nombre par avance et tu as préparer autant de grille sur ta form, soit tu devras les creer dynamiquement.

Eventuellement tu pourrais les mettre dans un ListView, mais je ne connais pas le fonctionnement.

Pour ta deuxième question sur le passage de variable d'une form à ou autre (ou d'une classe à une autre) regarde cette discussion. Elle explique comment passer la réfence d'une form à une autre. Le principe est le mêm pour une variable, au lieu d'attendre un Form dans le constructeur, il suffit de parramètrer un Int, un String ou ce que tu veux.


Whismeril
0

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

Posez votre question
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012
12 juil. 2012 à 14:10
bonjour
voila ma requete et ce que je veux faire exactement mais j'arrive pas

System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("SELECT libelle_titre FROM titre", ConnectBase.getinstance().Connection());

List liste= new List();
affiche_titre = comm.ExecuteReader();

while (affiche_titre.Read())

{
liste.Add(Convert.ToInt32(affiche_titre["libelle_titre"].ToString()));

//titre.Add(affiche_titre.ToString(0));

module1.Text = liste[0]ToString();
module2.Text = liste[1].ToString();
module3.titre3.Text = liste[2].ToString();

merci
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
12 juil. 2012 à 14:15
Bonjour, je ne connais pas le sql.


Whismeril
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
12 juil. 2012 à 14:45
Salut,

il faudrait poster l'image pour que je sache quel rendu tu recherches. Sinon, s'il s'agit bien de remplir un DataGridView, alors je te conseille ce petit exemple.
0
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012
12 juil. 2012 à 16:23
Bonjour merci a tous,

maintenant voila mon problème: comment parcourir et affecter le résultat de cette requête.
j'ai essayer avec la liste mais sa fonctionne pas!


System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("SELECT libelle_titre FROM titre", ConnectBase.getinstance().Connection());

List liste= new List();
affiche_titre = comm.ExecuteReader();

while (affiche_titre.Read())

{
liste.Add(Convert.ToInt32(affiche_titre["libelle_titre"].ToString()));

//titre.Add(affiche_titre.ToString(0));

module1.Text = liste[0]ToString();
module2.Text = liste[1].ToString();
module3.Text = liste[2].ToString();
merci
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
12 juil. 2012 à 16:34
Euh ... je veux l'image du rendu recherché, pas le code que tu as déjà posté plus haut. Surtout que si tu as lu le tuto que je t'ai filé tu auras vu qu'il est plus simple de passer par les DataAdapter/DataTable.

Et d'un point de vu général autant ne pas parcourir un DataReader pour remplir une liste qui sera à son tour parcouru pour ton affichage. Mais cela dépend de ce que tu recherches vraiment à faire ...
0
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012
12 juil. 2012 à 17:31
bonjour
j'arrive pas a mettre l'image sur le forum
c'est pour ça j'ai envoyé le code si quelqu'un le connais,
mon but c'est de recupérer toute une ou plusieurs colonnes de ma base aprés je dois affecter le résultat dans des textbox bien définie afin de les modifier! ajouter des ligne et des colonnes avec des chekliste et listbox)
si possible je vous envoie par mail l'image
merci
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
12 juil. 2012 à 17:52
Pas besoin d'image, je crois maintenant comprendre ce que tu cherches à faire.
En fait tu veux faire une sorte de tableur. Ton appli affiche les données qui sont en base et te permet de les modifier, j'ai bon ?

Si tu tiens vraiment à utiliser des TextBox alors il va falloir que tu génères tes contrôles en même temps que tu parcours ton DataReader, car tu ne peux pas savoir à l'avance combien d'enregistrement vont ressortir. De plus tu pourrais avoir quelques souci pour faire la sauvegarde en masse (plusieurs lignes) des tes modifications.

Sinon l'utilisation d'un DataGridView avec un DataAdapter serait quand même plus simple. Il te permettra facilement de modifier un(des) enregistrement(s) avec très peu de code à écrire.

Bon là faut que je me déconnecte, si t'es pressé demande à ton moteur de recherche préféré "DataGridView DataAdapter.Update" et tu devrais trouver de bons tuto ;)
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
12 juil. 2012 à 18:08
Bonsoir,

voici l'image qu'elle m'a envoyé:


ainsi que le corps du mail associé.

1- voila j'ai presque 15 module et chaque module entre 2 et 05 matières (stockés dans des tables) je veux l'afficher comme montre l'image ci joint.
aprés je dois mettre mes commentaires et remplire les autres colonnes et je les souvegardes dans la base de donnes (autres tables).
2- comment je récupère une variable de form 1 vers form 2 : lagré que j'ai fait instance de form1 dans 2 mais sa marche pas (la form1 n'appel pas la form2).


Whismeril
0
amm5207 Messages postés 10 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 29 avril 2015
13 juil. 2012 à 10:38
bonjour,

j'ai ce bout de code qui sa fonctionne pas:( j'arrive pas a affecter le resultat dans les textbox quelqu'un peu m'aider svp.

System.Data.SqlClient.SqlDataReader affiche_titre;
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("SELECT libelle_titre FROM titre", ConnectBase.getinstance().Connection());
ListBox list = new ListBox();
DataTable titre = new DataTable();
affiche_titre = comm.ExecuteReader();
string [] row = null;

while (affiche_titre.Read())
{
row = new string[list.Items.Count];
for (int i = 0; i < list.Items.Count; i++)
{
row[i] = list.Items[i].ToString();

}
titre1.Text = row[0];
titre2.Text = row[1];
titre3.Text = row[2];
titre4.Text = row[3];
titre5.Text = row[4];
titre6.Text = row[5];


merci
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
13 juil. 2012 à 11:51
Merci whismeril,

du coup il va bien falloir faire de la génération dynamique de contrôles. Je vais donc commencer par te donner un pseudo-code qui devra te permettre de faire un premier jet, si tu as un souci dans la mise en place de la solution il suffira de revenir ici nous demander (attention, si je vois que t'as fait un c/c à l'arrache, que tu n'as pas cherché à comprendre, je n'aiderai plus).

Donc voici le pseudo-code :
public void FillTable() {
  // je récupère ma liste de modules dans un DataReader
  // pour chaque enregistrement :
    // j'ajoute une ligne d'en-tête à mon contrôle container (je te conseille un TableLayoutPanel)
    // je récupère ma liste des matières pour le module en cours dans un autre DataReader
    // pour chaque enregistrement :
      // je génère mes 4 contrôles (2 TextBox, 1 CheckBox et 1 ComboBox)
      // je les identifie de manière à retrouver, plus tard, à quel enregistrement ils correspondent
      // je les initialise avec les valeurs trouvées dans la matière en cours
      // je les ajoutes à mon container
}


Maintenant voilà un peu de vrai code, qui te montre comment créer tes contrôles dynamiquement, dans le cas précis une TextBox (dr correspond ici à ton deuxième DataReader) :
  // on instancie le contrôle
  TextBox txtMatiere = new TextBox();
  // on lui donne un nom "utile", on imagine que ta table "matières" contient une clé primaire appelée "id"
  txtMatiere.Name = "txtMatiere_" + dr["id"].ToString();
  // on la remplie avec une autre valeur de la BDD que j'imagine s'appeler "desc"
  txtMatiere.Text = dr["desc"].ToString();
  // on l'ajoute à notre TableLayoutPanel que j'ai appelé tlayout
  // dans cet exemple on ajoute le contrôle dans la première colonne de la première lignes (les paramètres à '0')
  tlayout.Controls.Add(txtMatiere, 0, 0);
0
amm5207 Messages postés 10 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 29 avril 2015
13 juil. 2012 à 15:30
merci beaucoup jopop

je vais essayer mais vraiment je suis encore débutante et j'ai pas trouvé des exemples similaires et je dois terminer mon travail avant le 15 aout.
je vais essayer et je vous tiens en cours de mes avancements et ce que j'ai fait.
je peux appeler ma methode Filltable dans ma fonction load aprés ?

grand merci
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
13 juil. 2012 à 19:40
Re,

on a tous débuter un jour, et c'est avec plaisir que je t'orienterai dans ton dev :)

Et oui tu pourras appeler cette fonction dans le Load.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
13 juil. 2012 à 20:54
Je suis un peu perdu moi, Jopop répondais tu à coucou008 ou à amm5207?

Whismeril
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
13 juil. 2012 à 21:03
@whismeril : my bad, les deux ont la même demande, j'avais pas vu que l'utilisateur n'était pas le même ^^
Quoiqu'il en soit je suis prêt à l'aider comme n'importe qui ici ;)
0
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012
13 juil. 2012 à 22:24
Bonjour
@whismeril moi aussi je connais pas le pseudo mais je pense quelqu'un qui me connais il veut m'aider je lui dis merci :)
merci a vous tous
0
cs_coucou008 Messages postés 20 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 11 septembre 2012
14 juil. 2012 à 20:19
Bonjour jopop

je suis tjs blocqué :(
pour les textbox sont déja crée dans des tabPage(07 tabPage)
et voila ma requet qui fonctionne trés bien avec la liste box j'arrive a afficher les donnes.donc mon problème c'est comment stocker mes donnees dans chaque text box
je reçoie une erreur
(impossible de convertir implécitement ~ sqlreader en string)
c a dire la problème c'est dans la converssion (le resultat "affiche_titre" contient toute ma colonne juste comment le convertir pour que je puisse affecter )

voila ma requete

System.Data.SqlClient.SqlDataReader affiche_titre;
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("SELECT libelle_titre FROM titre", ConnectBase.getinstance().Connection());
affiche_titre = comm.ExecuteReader();
ListBox list = new ListBox();
string [] row = null;

while (affiche_titre.Read())
{
row = new string[list.Items.Count];
for (int i = 0; i < list.Items.Count; i++)
{
row[i] = list.Items[i].ToString();

}
titre1.Text = row[0];
titre2.Text = row[1];
titre3.Text = row[2];
titre4.Text = row[3];
titre5.Text = row[4];
titre6.Text = row[5];

merci et désolé pour le dérangement
0
Rejoignez-nous