Problème de Datagrid [Résolu]

Im a FBI agent 9 Messages postés lundi 24 mai 2004Date d'inscription 30 janvier 2007 Dernière intervention - 18 janv. 2006 à 10:14 - Dernière réponse : Im a FBI agent 9 Messages postés lundi 24 mai 2004Date d'inscription 30 janvier 2007 Dernière intervention
- 18 janv. 2006 à 15:51
Bonjour,
j'ai un problème pour remplir une datagrid, voici mon code:

ArrayList prenoms= new ArrayList();
ArrayList ages = new ArrayList();

prenoms.Add("Gustave");
prenoms.Add("Robert");
ages.Add("57");
ages.Add("46");

DataSet ds = new DataSet();

DataTable table = ds.Tables.Add("TABLE");

table.Columns.Add("Prenom", typeof(string));
table.Columns.Add("Age", typeof(string));

foreach(string prenom in prenoms)
{
ds.Tables["TABLE"].Rows.Add(new object[]{prenom});
}

foreach(string age in ages)
{
ds.Tables["TABLE"].Rows.Add(new object[]{age});
}

dataGrid1.DataSource = ds.Tables["TABLE"];

Le problème est que toutes les données se remplissent dans la 1ère colonne, Si quelqu'un a une petite idée pour changer de colonne... Merci
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Im a FBI agent 9 Messages postés lundi 24 mai 2004Date d'inscription 30 janvier 2007 Dernière intervention - 18 janv. 2006 à 15:51
3
Merci
Merci beaucoup, c'est parfait!!! J'ai juste remplacé le Dataset par une DataTable et ça marche. Avec le Dataset, il fallait cliquer pour ouvrir la table. C'est exactement ce qu'il me fallait. Encore merci

ArrayList personnes = new ArrayList();
personnes.Add(new Personne("gustave", 57));
personnes.Add(new Personne("robert", 46));
DataTable table = new DataTable("TABLE1");
table.Columns.Add("nom");
table.Columns.Add("age");
foreach (Personne p in personnes)
{
table.Rows.Add(new object[] {p.Nom, p.Age});
}
this.dataGrid1.DataSource = table;

Merci Im a FBI agent 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de Im a FBI agent
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 18 janv. 2006 à 10:43
0
Merci
Bonjour,

C'est normal, car a chaque iteration de foreach, tu ajoutes une ligne dans ton DataTable.
Ce qu'il faudrait que tu fasses, c'est simplement creer une classe Personne, qui aurait comme Propriétés Nom et Age. Ensuite, tu instancies une occurence de Personne en lui fournissant son nom et son age via le constructeur.
Et finalement, tu utilises un ArrayList contenant tes instances comme Datasource de ton Datagrid.

Mx
MVP C#
Commenter la réponse de MorpionMx
Im a FBI agent 9 Messages postés lundi 24 mai 2004Date d'inscription 30 janvier 2007 Dernière intervention - 18 janv. 2006 à 11:46
0
Merci
Re,
Ca na marche pas avec ce que tu m'as dit, le datagrid est vide.
Et quand je rentre des String dans le Arraylist, le datagrid affiche la longueur de mes String.

Est-ce qu'il y aurait un moyen de choisir la colonne que l'on veut remplir de lignes?
Commenter la réponse de Im a FBI agent
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 18 janv. 2006 à 11:59
0
Merci
Ce code fonctionne parfaitement


<HR>

using System;

using System.ComponentModel;
u
sing System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Collections;

namespace WindowsApplication1
{

public
class
Form1 :
Form
{
private System.Windows.Forms.
DataGrid dataGrid1;

public Form1()
{
InitializeComponent();

ArrayList personnes =
new
ArrayList();
personnes.Add(
new
Personne(
"gustave", 57));
personnes.Add(
new
Personne(
"robert", 46));

dataGrid1.DataSource = personnes;
}



private
void InitializeComponent()
{

this.dataGrid1 =
new System.Windows.Forms.
DataGrid();

this.SuspendLayout();

this.dataGrid1.DataMember =
"";

this.dataGrid1.HeaderForeColor = System.Drawing.
SystemColors.ControlText;

this.dataGrid1.Location =
new System.Drawing.
Point(12, 12);

this.dataGrid1.Name =
"dataGrid1";

this.dataGrid1.Size =
new System.Drawing.
Size(268, 242);

this.dataGrid1.TabIndex = 0;

this.Controls.Add(
this.dataGrid1);

this.ResumeLayout(
false);
}

}


public
class
Personne
{

private
string nom;

private
int age;


public
string Nom
{

get {
return
this.nom; }
}

public
int Age
{

get {
return
this.age; }
}

public Personne(
string nom,
int age)
{

this.nom = nom;

this.age = age;
}
}
}

<HR>

Ensuite, a toi de voir et de l'adapter, selon si tu as vraiment besoin d'utiliser un Dataset et ce que tu veux faire des données affichées dans la grille .

Mx
MVP C#
Commenter la réponse de MorpionMx
Im a FBI agent 9 Messages postés lundi 24 mai 2004Date d'inscription 30 janvier 2007 Dernière intervention - 18 janv. 2006 à 15:05
0
Merci
Merci, ça marche.
Par contre, avec le dataset (ou la datatable (en fait je ne sais pas trop comment ça fonctionne)), lorqu'on clique sur le titre de la colonne, ça organise par ordre alphabétique, ou ordre croissant des chiffres. Et avec ton exemple ça ne le fait plus.
J'ai besoin de cette fonctionnalité.

Est-ce que c'est possible avec le code que j'ai mis plus haut? seulement en choisissant la colonne dans laquelle je veux insérer les lignes.
Commenter la réponse de Im a FBI agent
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 18 janv. 2006 à 15:30
0
Merci
Pour passer avec le dataset comme tu le faisais, et conserver le tri, tu peux faire ainsi :
(En gardant la classe Personne)


<HR>
ArrayList personnes =
new
ArrayList();
personnes.Add(
new
Personne(
"gustave", 57));
personnes.Add(
new
Personne(
"robert", 46));

DataSet ds =
new
DataSet();
ds.Tables.Add(
"TABLE1");
ds.Tables[
"TABLE1"].Columns.Add(
"nom");
ds.Tables[
"TABLE1"].Columns.Add(
"age");

foreach (
Personne p
in personnes)
{
ds.Tables[
"TABLE1"].Rows.Add(
new
object[] { p.Nom, p.Age });
}

this.dataGrid1.DataSource = ds;

<HR>



Mx
MVP C#
Commenter la réponse de MorpionMx

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.