Problème de Datagrid

Résolu
Im a FBI agent Messages postés 9 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 30 janvier 2007 - 18 janv. 2006 à 10:14
Im a FBI agent Messages postés 9 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 30 janvier 2007 - 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

6 réponses

Im a FBI agent Messages postés 9 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 30 janvier 2007
18 janv. 2006 à 15:51
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;
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
18 janv. 2006 à 10:43
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#
0
Im a FBI agent Messages postés 9 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 30 janvier 2007
18 janv. 2006 à 11:46
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?
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
18 janv. 2006 à 11:59
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#
0

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

Posez votre question
Im a FBI agent Messages postés 9 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 30 janvier 2007
18 janv. 2006 à 15:05
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.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
18 janv. 2006 à 15:30
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#
0
Rejoignez-nous