Tableau html en c# [Résolu]

cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 5 déc. 2007 à 11:39 - Dernière réponse : billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention
- 6 déc. 2007 à 17:36
bonjour

j'annonce je suis débutant :)

juste une chose, moi mes donnée sont issue d'une table sous sql server 2005. la connexion a sql server est faite, et fonctionne correctement (c'est la seul chose d'ailleur lol)
je veut mettre dans ce tableau (en html) ces donnée (de ma table) , mon tableau doit etre dynamique

voila mon code je ne pense pas que tout les "data" doivent etre utile

je sait pas comment declaré un tableau etc ..


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using score_lib;
using System.Data.SqlClient;
using System.IO;
using System.Data.Common;

namespace gestscore
{
public partial class Import_data2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//ouverture de connexion avec la chaine de connection
Cscore_lib instance1 = new Cscore_lib();
SqlConnection connexion = new SqlConnection(instance1.chaine_de_connexion());
connexion.Open();
//gestion des exeption
try
{
//lancement de la procedure stocké import_data2
string id_indicateur = Request.Form["id"];
SqlCommand commande4 = null;
commande4 = new SqlCommand("Import_Data2", connexion);
commande4.CommandType = CommandType.StoredProcedure;

//entrée des parametre de la procédure sotckée
SqlParameter parametre_id = new SqlParameter("@ID", SqlDbType.VarChar, 0);
parametre_id.Value = id_indicateur;
commande4.Parameters.Add(parametre_id);
SqlParameter erreur = new SqlParameter("@nbrowscum", SqlDbType.Int, 4);
erreur.Direction = ParameterDirection.Output;
commande4.Parameters.Add(erreur);


string strRequete = "SELECT * FROM majpz order by IDlibelle, IDgeo, periode";
// Objet Command
SqlCommand command = new SqlCommand(strRequete, connexion);
// création du dataset
DataSet ds = new DataSet();
//création d'une datatable
DataTable majpz = new DataTable("majpz");



for (int i = 0, i < majpz.Length, i++);
{
Response.Write( "<tr>" );
for (int j = 0, j < tab.Rank, j++);
{
if (tab[i][j] is int )
Response.Write( "<td>" + ( int ) tab[i][j] + "</td>" );
else if ( tab[i][j] is String )
Response.Write( "<td>" + ( String ) tab[i][j] + "</td>" );
}
Response.Write( "</tr>" );
}

//création du data adapter
SqlDataAdapter da_majpz = new SqlDataAdapter();


//equivalent du system"pause"(attente de saisie de l'utilisateur)
Console.ReadLine();

}
catch (SqlException sqlerr)
{
Response.Write("<table>");
Response.Write("
" + sqlerr.Message.ToString());
}
// Fermeture connection
connexion.Close();
}
}
}


donc majpz est ma table remplis précedement par une requete paramétré
voila je sui a votre ecoute et ca fait 2 semaine que je suis sur ce probleme
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 5 déc. 2007 à 12:09
3
Merci
Pourquoi ne pas déclarer le tableau du côté de la page .aspx comme ceci:
<

table
id="tableTest"
runat="server">

</table>Tu pourra ensuite accéder à ton tableau côté code et le remplir de la façon suivante:

HtmlTableCell

newCell =
new
HtmlTableCell();newCell.InnerText =

"ta valeur";

HtmlTableRow newRow =
new
HtmlTableRow();newRow.Cells.Add(newCell);

tableTest.Rows.Add(newRow);

Ca devrait être plus pratique ^^

Remarque: tu peux faire la même avec un control Table asp.net

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Merci billou_13 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 billou_13
Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 5 déc. 2007 à 16:17
3
Merci
Voici une des facons de remplir le tableau HTML à partir de ton DataSet

foreach

(
DataRow curRow
in dataset.Tables[0])//Pour toi: dataset.Table[0] = maj_pz{

HtmlTableRow newRow = newHtmlTableRow();

for (
int i = 0; i < curRow.ItemArray.Length; i++){

//New cell

HtmlTableCell newCell =
new
HtmlTableCell();newCell.InnerText = curRow[i];

newRow.Cells.Add(newCell);

//--}

tableTest.Rows.Add(newRow);

}

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Merci billou_13 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 billou_13
Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 6 déc. 2007 à 12:32
3
Merci
Re,

Je penses que c'est une erreur du post mais la fonction ToString contient des parenthèses:
ce n'est donc pas dr2[0].ToString mais dr2[0].ToString()

Ensuite, essayes avec la syntaxe suivante :

Response.Write(string.Concat("<td>", dr2[0].ToString(), "</td>"));

En espérant que cette fois, c'est la bonne ^^

Bonne journée

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Merci billou_13 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 billou_13
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 5 déc. 2007 à 14:29
0
Merci
re bonjour Billou 13 merci davoir répondu.

bah je que ce serait plus simple en aspx mais j'ai des contrainte a respecter et mon tuteur veut absolument que je le fasse de cette maniere. et mettons que je le fasse de cette maniere comment je peut remplir ce tableau avec mes donnée de ma table sous sql server.
de meme je ne voit pas "ou" ou "comment" se fait le lien entre asp et le c #, alor j'ai du mal a comprendre le systeme (malgré tout ce que j'ai lu)

a+
Commenter la réponse de cs_tazagaga
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 5 déc. 2007 à 14:36
0
Merci
apparement pour commencer je peu compter les ligne de ma table avec mon dataset je pense que cela me permetrait de définir la dimension de mon tableau et apres ca reste le remplissage issu de ma base le gros poitn du moment :D
Commenter la réponse de cs_tazagaga
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 5 déc. 2007 à 17:29
0
Merci
en effet j'ai essayer ce que tu as dit et c'était une facon de faire sous asp mais parrallelement j'ai avancer de cette maniere

string strRequete = "SELECT * FROM valeur where idlibelle='30-01-01-01-01' order by IDlibelle, IDgeo, periode";
// Objet Command
SqlCommand command = new SqlCommand(strRequete, connexion);
// création du dataset
DataSet ds = new DataSet();
//création d'une datatable
DataTable majpz = new DataTable("majpz");

SqlDataReader dr2 = command.ExecuteReader();

/*
DataColumn majpzCol = majpz.Columns.Add("IDlibelle", typeof(Int32));
majpzCol.AllowDBNull = false;
majpzCol.Unique = true;

majpz.Columns.Add("IDgeo", typeof(String));
majpz.Columns.Add("Valeur", typeof(String));
majpz.Columns.Add("Significativite", typeof(string));

// string[] majpz2 = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
*/
int nb = 1;
int i = 1;
int j = 1;
int h = 1;

Response.Write("\");
for (i =1 ;i <=1; i++)
{
Response.Write(\"----
\");
for (j = 1; j <= 1; j++)
{
Response.Write(\"" + dr2.GetName(0) + ", \");
Response.Write(\"" + dr2.GetName(1) + ", \");
Response.Write(\"" + dr2.GetName(2) + ", \");
Response.Write(\"" + dr2.GetName(3) + ", \");
Response.Write(\"" + dr2.GetName(4) + ", \");
}
Response.Write(\"\");
dr2.NextResult();
Response.Write(\"----
\");

while (dr2.Read())
{
Response.Write(\"" + dr2.GetInt32(0) + ", \"); // c'est ici que ca s'arrete
Response.Write(\"" + dr2.GetString(1) + ", \");
Response.Write(\"" + dr2.GetString(2) + ", \");
Response.Write(\"" + dr2.GetFloat(3) + ", \");
Response.Write(\"" + dr2.GetName(4) + ", \");
}
Response.Write(\"\");

}
Response.Write("
");
dr2.Close();

//création du data adapter
SqlDataAdapter da_majpz = new SqlDataAdapter();


//equivalent du system"pause"(attente de saisie de l'utilisateur)
Console.ReadLine();

}

donc j'arrive a récupéré le nom des champ mais je n'arrive pas a récupéré les information dans les champ . je pense que c'est un probleme ici:

dr2.GetXXX(0)

dans le XXX je ne sait pas quoi mettre : les champ dans ma table sont en varchar, en float et autre.

si vou pouviez m'aidez pour cela a moins que je me plante et que l'erreur n'est pas ici.

merci d'avance a++
Commenter la réponse de cs_tazagaga
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 5 déc. 2007 à 17:41
0
Merci
Es-tu sur de ta ligne :
dr2.NextResult(); //?
Il me semble que cela te fait louper le premier enregistrement ?

Essayes la syntaxe : dr2[0].ToString() au lieu de dr2.GetInt32(0)
Et ceci, pour tous les champs

Tiens moi au courant, je regarderais plus en détail sinon

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 5 déc. 2007 à 17:43
0
Merci
Au passage, une fois que cela marchera, tu pourra épurer ton code.
J'entend par cela:
- suppression du DataSet, DataTable, SqlDataAdapter qui ne te servent plus
- suppression de tes boucles for car " for(int i=1; i<=1; i++) " ne sert pas à grand chose ^^

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 6 déc. 2007 à 10:05
0
Merci
bonjour

alor j'ai effectuer les modification que tu ma dit ca passe au niveau du code mais il me met une erreur

l'operateur'+' ne peut etre appliquer au opérande de type string et au groupe de methode

mon code actuel:

int nb = 1;
int i = 1;
int j = 1;
int h = 1;

Response.Write("<table border>");
for (i = 1; i <= 1; i++)
{
Response.Write("<tr>");
for (j = 1; j <= 1; j++)
{
Response.Write("<td>" + dr2.GetName(0) + "</td>");
Response.Write("<td>" + dr2.GetName(1) + "</td>");
Response.Write("<td>" + dr2.GetName(2) + "</td>");
Response.Write("<td>" + dr2.GetName(3) + "</td>");
Response.Write("<td>" + dr2.GetName(4) + "</td>");
}
Response.Write("</tr>");
//dr2.NextResult();
Response.Write("<tr>");

while (dr2.Read())
{
Response.Write("<td>" + dr2[0].ToString + "</td>");
Response.Write("<td>" + dr2[1].ToString + "</td>");
Response.Write("<td>" + dr2[2].ToString + "</td>");
Response.Write("<td>" + dr2[3].ToString + "</td>");
Response.Write("<td>" + dr2[4].ToString + "</td>");
}
Response.Write("</tr>");


}

en effet le "dr2.next résult" je pense qu'il saute la premiere ligne, je l'avai mis car je pensait que la lecture des champ etait considéré comme une ligne . apparement non .

merci billou
Commenter la réponse de cs_tazagaga
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 6 déc. 2007 à 12:59
0
Merci
ahhh ca marche avec dr2[0].tostring() bon c'est le bordel dans mon tableau mais cela doit pouvoir se réparé

de plus certaine chose que je n'ai pas compris

_ a quoi me sert string concat (je ne l'ai pas encore rajouter).
_ pourquoi alor que je n'ai pas mis de enxtresult il lit les valeur de la ligne du desous?

et pour continuer dans le programme, comment vais-je pouvoir par la suite me promener dans ce fameux tableau. cara en effet il va falloir que je manipule ces donnée (c'est juste un petit calcule entre les ligne mais je doit récupéré les valeur pour la manipuler)

merci billou pour deja cette étape de passé, moi je continu de chercher et de boukiné dessus lol.
Commenter la réponse de cs_tazagaga
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 6 déc. 2007 à 13:52
0
Merci
Re,

- Le string.Concat(...) permet de concaténer des chaînes de caractères (et même des types "object": int, bool, ...). Et donc:
test = string.Concat("auto", "mobile");
 est équivalent à
 test = "auto" + "mobile";

Remarque, tu aurais pu tout aussi faire:
Response.Write(string.Format("<td>{0}</td>", dr2[0]); //ou {0} est remplacé par dr2[0] (équivalent à sscanf(...) en C++)

- La lecture de toutes les lignes vient du fait que tu as la ligne :
while(dr2.Read())
{
...
}
dr2.Read() lit la prochaine ligne et renvoit false lorsque toutes les lignes seront lues. C'est donc la bonne méthode pour lire toutes les données de ta base de données.

Bon courage,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 6 déc. 2007 à 15:06
0
Merci
ok j'ai piger a pres a quoi cela servait le concat

pour le dr2.read ok je comprend mieu .

mais maintenant que mon tableau est remplis est ce que je peu le parcourir ligne par ligne? comme un curseur avec le quele je peut monter et descendre ?
j'avai fait cela en vb il y a longtempc'est comme les next rows avec les datatble . mais la je voudrait faire pareil avec dabs le tableau que je vien de crée
merci
Commenter la réponse de cs_tazagaga
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 6 déc. 2007 à 15:41
0
Merci
J'ai bien peur que si tu créé le tableau avec Response.Write(...), tu ne peux pas y accéder comme cela ^^

C'est pour cela que je t'avais conseillé de le faire à partir du composant Table du panneau d'outils ^^. Ainsi, tu pouvais appeler le tableau dans ton code.

Mais là, à moins de faire du code javascript... il va falloir changer d'optique et opter pour un control table de la boîte à outils

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 6 déc. 2007 à 15:45
0
Merci
Tu peux néanmoins utilisé le code Html qui tu as généré pour le mettre dans un objet HtmlTable:

HtmlTable

table =
new
HtmlTable();table.InnerHtml = "code html généré";

Ainsi, tu pourras tourner dans le tableau.Mais c'est pas très joli tout cela ^^. Je te conseille plutot de créer ton HtmlTable dès le début et d'ajouter ligne par ligne les informations de la base de données.

Et à la limite, tu pourras mettre à la fin de ton code :

Response.Write(table.InnerHtml);

(Mais ca ne vaut pas le bon control de la barre d'outils déposer sur la page aspx en mode design ^^)

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 6 déc. 2007 à 16:42
0
Merci
ouin ca sent la bricole... m'enfin bon on va continuer dans cette voie meme si c'est pas nikel .

apparement j'aime bien ton idée de html table mais quand tu met "code html généré" je le récupere ou le code html généré ?
Commenter la réponse de cs_tazagaga
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 6 déc. 2007 à 17:07
0
Merci
Le code html généré correspond à tout le html qui tu avais mis dans le Response.Write(..)

Au lieu d'écrire ton tableau au fur et à mesure dans le Response.Write(..), tu le place dans une chaine de caractères (string). C'est cette chaine que tu pourra mettre de le HtmlTable (et que tu pourras aussi envoyé dans le Response.Write).

Remarque: Ta chaine ressemble à "<td>...
"

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
cs_tazagaga 31 Messages postés mardi 6 novembre 2007Date d'inscription 23 février 2009 Dernière intervention - 6 déc. 2007 à 17:33
0
Merci
en fait j'ai reussi a comparer les valeur lors de la construction du tableau, la récupération des valeur précédente permet de faire une comparaison.

je boss dessus et je te tien au courant
Commenter la réponse de cs_tazagaga
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 6 déc. 2007 à 17:36
0
Merci
Ok,

Bon courage à toi

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13

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.