Affichage avec c# [Résolu]

cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention - 9 juil. 2012 à 21:24 - Dernière réponse : cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

37 réponses

Meilleure réponse
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 15 juil. 2012 à 13:30
3
Merci
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

Merci Whismeril 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Whismeril
Meilleure réponse
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 25 juil. 2012 à 17:55
3
Merci
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

Merci Whismeril 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Whismeril
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 9 juil. 2012 à 23:39
0
Merci
Bonsoir,

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


Whismeril
Commenter la réponse de Whismeril
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 11 juil. 2012 à 12:51
0
Merci
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
Commenter la réponse de Whismeril
cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention - 12 juil. 2012 à 14:10
0
Merci
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
Commenter la réponse de cs_coucou008
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 12 juil. 2012 à 14:15
0
Merci
Bonjour, je ne connais pas le sql.


Whismeril
Commenter la réponse de Whismeril
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 12 juil. 2012 à 14:45
0
Merci
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.
Commenter la réponse de cs_jopop
cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention - 12 juil. 2012 à 16:23
0
Merci
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
Commenter la réponse de cs_coucou008
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 12 juil. 2012 à 16:34
0
Merci
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 ...
Commenter la réponse de cs_jopop
cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention - 12 juil. 2012 à 17:31
0
Merci
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
Commenter la réponse de cs_coucou008
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 12 juil. 2012 à 17:52
0
Merci
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 ;)
Commenter la réponse de cs_jopop
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 12 juil. 2012 à 18:08
0
Merci
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
Commenter la réponse de Whismeril
amm5207 12 Messages postés jeudi 10 juin 2010Date d'inscription 29 avril 2015 Dernière intervention - 13 juil. 2012 à 10:38
0
Merci
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
Commenter la réponse de amm5207
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 13 juil. 2012 à 11:51
0
Merci
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);
Commenter la réponse de cs_jopop
amm5207 12 Messages postés jeudi 10 juin 2010Date d'inscription 29 avril 2015 Dernière intervention - 13 juil. 2012 à 15:30
0
Merci
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
Commenter la réponse de amm5207
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 13 juil. 2012 à 19:40
0
Merci
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.
Commenter la réponse de cs_jopop
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 13 juil. 2012 à 20:54
0
Merci
Je suis un peu perdu moi, Jopop répondais tu à coucou008 ou à amm5207?

Whismeril
Commenter la réponse de Whismeril
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 13 juil. 2012 à 21:03
0
Merci
@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 ;)
Commenter la réponse de cs_jopop
cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention - 13 juil. 2012 à 22:24
0
Merci
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
Commenter la réponse de cs_coucou008
cs_coucou008 20 Messages postés lundi 9 juillet 2012Date d'inscription 11 septembre 2012 Dernière intervention - 14 juil. 2012 à 20:19
0
Merci
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
Commenter la réponse de cs_coucou008

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.