Remplir un datagrid à l'aide d'un arrayList

Signaler
Messages postés
10
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2005
-
Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
-
Hello,

J'essaye désepérément de remplir mon datagrid à l'aide d'un arrayList, mais sasn succès.
Est-ce que l'un ou l'une d'entre vous aurait la solution miracle ???
Pour info et si besoin est voici un petit bout de mon code ...


public
class RqtProduit
{

/// <summary> Sélectionne l'ensemble des produits </summary>
/// <returns> Retourne une collection de produits </returns>
public ArrayList selectAll()
{
// Déclaration des variables
string sql;
OleDbCommand objSql;
OleDbDataReader datas;

// Création des instances
Connection conn = Connection.getUniqueInstance();
ArrayList produits =
new ArrayList();

// Création et exécution du script SQLsql "SELECT pro_id, typ_nom, pro_nom, pro_stock, pro_descr, pro_contenu, pro_prix, pro_stockAlerte FROM TypeProduit LEFT JOIN Produit ON TypeProduit.type_id Produit.pro_typ_id WHERE pro_existant = Yes";
objSql = conn.select(sql);

// Récupération des données de l'exécution du script
datas = objSql.ExecuteReader();

// Boucle pour l'ensemble des données permettant de créer des instances et les affecter à la connection
while (datas.Read())
{
// Création de l'instance avec les paramètres et affectation à la collection
Produit produit =
new Produit(
new Integer(datas.GetInt16(0)), datas.GetString(1), datas.GetString(2),
new Integer(datas.GetInt32(3)), datas.GetFloat(6),
new Integer(datas.GetInt32(7)));




produit.setDescr(Convert.ToString(datas.GetValue(4)));


produit.setContenu(datas.GetFloat(5));




produits.Add(produit);}



// Libération
datas.Close();
objSql.Cancel();
objSql.Dispose();

// Retour de la collection
return produits;}

Merci d'avance pour votre aide ... !!!!!

12 réponses

Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
2
tu declare

DataTable dt =
new DataTable();




tu ajoute des colone s
comme tu veaux
exmple
dt.Columns.Add(
new DataColumn("mot1",
typeof(
int)));


nouveau enregistrment
DataRow row1 = dt.NewRow();



row[i]=contenu de ton arryliste tu fais le aprcour un par un

apres la fin pour passer a l'enregistrementy suivant

dt.Rows.Add(row1);





DiBou
email:dibouched@yahoo.fr
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Ou dans ton cas, plutot utiliser le DataBinding...



TonDataGrid.DataSource = produits;




Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
J'oubliais de te préciser que pour ton DataGrid sache quels membre de
ton arrayList produits afficher, il faut créer des propriétés

Mx
Messages postés
10
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2005

Tu m'excuse MorpionMx mais j'ai pas tout compris à tes explications ... :-(
Tu peux me réexpliquer svp?

MERCI !
Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
2
mais essaye ce que je te dis ca va marcher !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
apres que ton-arrylist est remplie va essye ce code c'est fait pour toi!!!!!!!!!!!!!!!!!!!

DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn("produit",
typeof(string
));

int leng=ton _ArrayList .Length;

int i=0;
while (i<leng)
{
string produit=ton _ArrayList.GetValue(i).ToString();
DataRow row1 = dt.NewRow();
row1[1]=produit;
dt.Rows.Add(row1);
i=i+1;
}

DataGrid1.DataSource=dt;
DataGrid1.DataBind();
DataGrid1.Visible=true;
dt.Clear();

dans ton code html tu ajoute ca

<columns>

<HeaderTemplate>
produits
</HeaderTemplate>

<%#DataBinder.Eval(Container,"DataItem.produit") %>

</columns>
<COLUMNS><HEADERTEMPLATE><COLUMNS><HEADERTEMPLATE></HEADERTEMPLATE></HEADERTEMPLATE>la proprite autogernrate de votre datagrid est a false
maintenant essaye ca avec une colone ensuite avec d'autre colone
DiBou
email:dibouched@yahoo.fr
Messages postés
10
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2005

Alors j'ai essayer les 2 propositions mais aucune ne marche ...
Voici les codes :

Pour la sol 1 :
int i=0;
DataTable dt = new DataTable();
//Récupération de l'array list
ArrayList produits = new ArrayList();
Director dir = new Director();
produits = dir.selectAllProduits();
MOD.Produit produit;
//Ajout de colone
dt.Columns.Add(new DataColumn("mot1", typeof(Int32)));
//Nouvel enregistrement
//DataRow row1 = dt.NewRow();
DataRow row1 = dt.NewRow();
produit = (MOD.Produit)produits[i];
row1[i]= produit.getId().integer;
//contenu de ton arryliste tu fais le parcours un par un
//apres la fin pour passer a l'enregistrementy suivant
dt.Rows.Add(row1);*/

Pour la sol 2 :

//Récupération de l'array list
ArrayList produits =
new
ArrayList();
Director dir = new
Director();
produits = dir.selectAllProduits();
MOD.Produit produit;
produit = (MOD.Produit)produits[2];
dgProduits.DataSource = produits;

Les 2 compiles mais elles n'affichent rien ...
Encore un petit coup de pouce svp ...
Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
2
tu as essyer mon dernier code ca marche mais ce quoi ca!!!!!!!!!!!!!!!!



DiBou
email:dibouched@yahoo.fr
Messages postés
10
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2005

Alors j'ai essayer la 2eme version de ton code, adapté pour C# car je n'ai pas de partie html
Code :

ArrayList produits =
new ArrayList();
Director dir =
new Director();
produits = dir.selectAllProduits();
MOD.Produit produit;

DataTable dt =
new DataTable();
dt.Columns.Add(
new DataColumn("produit",
typeof(
string)));
dt.Columns.Add(
new DataColumn("produit1",
typeof(
string)));
dt.Columns.Add(
new DataColumn("produit2",
typeof(
string)));
dt.Columns.Add(
new DataColumn("produit3",
typeof(
string)));
dt.Columns.Add(
new DataColumn("produit4",
typeof(
string)));
dt.Columns.Add(
new DataColumn("produit5",
typeof(
string)));

for (
int i = 0; i < produits.Count; i++){
DataRow row1 = dt.NewRow();
produit = (MOD.Produit)produits[i];
row1[i]= produit.ToString();
dt.Rows.Add(row1);
i=i+1; }
dgProduits.DataSource=dt;

//dgProduits.DataBindings;
dgProduits.Visible=
true;
dt.Clear();

Cela compile et m'affiche les titres des colonnes mais pas de données .... En revanche le DataBindings ne marche pas
Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
2
dgProduits.DataBind();
et non

dgProduits.DataBindings;

esaye ce ca va marcher
maintrenant ca commece a converger
et et dans ton code HTML tu fais ca
<%#DataBinder.Eval(Container,"DataItem.produit") %>
<%#DataBinder.Eval(Container,"DataItem.produit1") %>
<%#DataBinder.Eval(Container,"DataItem.produit2") %>
<%#DataBinder.Eval(Container,"DataItem.produit3") %>
<%#DataBinder.Eval(Container,"DataItem.produit4") %>
<%#DataBinder.Eval(Container,"DataItem.produit5") %>
si encore il ya une probleme ajoute un label dans ton dat grid et let dans
Text='<%#DataBinder.Eval(Container,"DataItem.produit") %>'
'
bonne courage

DiBou
email:<
Messages postés
10
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2005

Je te remercie pour ton aide mais je code en C#. Je n'ai donc aucune partie HTML.
Si j'ai ecris dgProduits.DataBindings; c'est simplement que je n'ai pas de définition pour dgProduits.DataBind(); De plus dgProduits.DataBindings; ne passe pas à la compil'
Donc ton code ne marche pas dans ma situation, je l'ai tourné dans tous les sens. mais c'est gentil de m'avoir aidé
Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
2
tu ne me comprend encore pas
mon code marche et ca devrai marcher
moi aussi je code en c#
HTML pour dire ton page web WebForm
la ou tu as ajouter les colones de ton data grid
tu doit ajouter les lignes que je te donner pour afficher les resultat
passe a ton page aspx dans ton datagrid
fait comme suit

<columns>

<HeaderTemplate>
produits
</HeaderTemplate>

'>

<HeaderTemplate>
produits
</HeaderTemplate>

'>

<HeaderTemplate>
produits
</HeaderTemplate>

'>

</columns>

<COLUMNS><HEADERTEMPLATE><COLUMNS><HEADERTEMPLATE></HEADERTEMPLATE></HEADERTEMPLATE>et utilise

dgProduits.DataBind();
c'st pas magique aller
cette fosi tu vas la faire

DiBou
email:dibouched@yahoo.fr
Messages postés
219
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
17 juillet 2007
2
je susi désolé
mais j'ai remarque que tu es entrains d'afficher tous le sproduit dans une seule ligne
tu fasi comme ca
DataRow row1 = dt.NewRow();
for (int i = 0; i < produits.Count; i++){
produit = (MOD.Produit)produits[i];
row1[i]= produit.ToString();

i=i+1; }
dt.Rows.Add(row1);

ou bien

for (
int i = 0; i < produits.Count; i++){
DataRow row1 = dt.NewRow();
produit = (MOD.Produit)produits[i];
row1[0= produit.ToString();
dt.Rows.Add(row1);
i=i+1; }
et dasn le deusiemme cas tu n'utilse pas produit , produit1,produit2..........
mais tous simplement une seule
produits

DiBou

email:dibouched@yahoo.fr