Problème d'insertion dans un GridView

Résolu
k2lic2 Messages postés 4 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 12 mai 2010 - 5 mai 2010 à 11:45
k2lic2 Messages postés 4 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 12 mai 2010 - 12 mai 2010 à 12:28
Bonjour,

Je suis débutant en ASP .NET et j'ai un problème.

J'ai une page internet avec un GridView relié à une base de données et un boutton.

Dans le code behind du boutton (en C#), j'ai ajouté plusieurs colonne dynamiquement. Puis je voudrais ajouter des valeurs pour certaines lignes et colonnes.

Voici le code pour créer les colonnes et ajouter les valeurs:

[i]BoundField bf = new BoundField();
bf.HeaderText = "test";
gridview.Columns.Add(bf);/i

gridview.Rows[i].Cells[j].Text = "test";

Le code compile mais rien n'est affiché sur le site.

Si vous avez des idées...
Merci

5 réponses

k2lic2 Messages postés 4 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 12 mai 2010
12 mai 2010 à 12:28
Salut,

J'ai réussi à trouver le problème. En fait le databind doit être placé avant l'écriture dans le gridview.

Merci à tous ceux qui se penchés sur le problème.
3
pierrehenri56 Messages postés 63 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 29 octobre 2013 1
7 mai 2010 à 10:59
Bonjour,

ton code fonctionnera mieux si tu recharge ta grid

ajoute un
gridView.DataBind();
après ton
gridview.Columns.Add(bf); 


Tiens moi au courant
0
k2lic2 Messages postés 4 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 12 mai 2010
7 mai 2010 à 16:58
Bonjour,

Tout d'abord, merci de ta réponse.

Par contre, je me suis mal exprimé: les colonnes crées s'affichent mais c'est le texte que je souhaite ajouter dedans après qui ne s'affiche pas.

J'ai essayé de recharger le gridview avec ta méthode, après avoir ajouté le texte mais ça ne marche toujours pas.

Si tu as d'autres idées...

Merci
0
pierrehenri56 Messages postés 63 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 29 octobre 2013 1
10 mai 2010 à 14:19
Bonjour,

envoyer votre code si vous voulez, je pense que vous avez appelé votre méthode dans le load de votre page.

Merci
0

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

Posez votre question
k2lic2 Messages postés 4 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 09:49
Voila le code de la page:

















Et voici le code behind en C# :

protected void Button1_Click(object sender, EventArgs e)
{
// Déclaration de l'objet de connexion
System.Data.SqlClient.SqlConnection oConnection = new System.Data.SqlClient.SqlConnection();

// Ecriture de la chaîne de connexion
string sConnectionString = "Server=test2;Initial Catalog=test;uid=****;password=****";
oConnection.ConnectionString = sConnectionString;

Button b = (Button)sender;

ContentPlaceHolder c = (ContentPlaceHolder)b.Parent;

GridView g = (GridView)c.FindControl("GridView1");

Table t = (Table)c.FindControl("table1");

DropDownList listeDesAnnee = (DropDownList)t.Rows[0].Cells[1].FindControl("DropDownList1");
string Id_annee = listeDesAnnee.SelectedValue;

DropDownList listeDesMois = (DropDownList)t.Rows[0].Cells[3].FindControl("DropDownList2");
string Id_mois = listeDesMois.SelectedValue;

try
{
// Ouverture de la connexion
oConnection.Open();

// Traitement des opération à effectuer sur la base de données
SqlCommand sqlCommand1 = new SqlCommand();
sqlCommand1.Connection = oConnection;
sqlCommand1.CommandText "SELECT A.Annee, C.Id_mois, count(C.id_calendrier) FROM CALENDRIER_CALENDRIER C INNER JOIN CALENDRIER_ANNEE A ON A.Id_annee C.Id_annee WHERE C.id_mois = " + Id_mois + " and C.id_annee = " + Id_annee + " Group BY C.Id_mois, C.Id_annee, A.Annee";
SqlDataReader data_mois_annee = sqlCommand1.ExecuteReader();
int Annee, Mois, nb_ligne;

if (data_mois_annee.Read())
{
Annee = (int)data_mois_annee.GetSqlInt32(0);
Mois = (int)data_mois_annee.GetSqlInt32(1);
nb_ligne = (int)data_mois_annee.GetSqlInt32(2);
}
else
{
Annee = 0;
Mois = 0;
nb_ligne = 0;
}
data_mois_annee.Dispose();

if (Annee != 0 && Mois != 0)
{
while (g.Columns.Count != 4)
{
g.Columns.RemoveAt(4);
}
int nb_jour_mois = DateTime.DaysInMonth(Annee, Mois);
for (int i = 0; i < nb_jour_mois; i++)
{
BoundField bf = new BoundField();

DateTime d = new DateTime(Annee, Mois, i + 1);
string jour = d.DayOfWeek.ToString();

if (jour.Equals("Monday"))
{
bf.HeaderText = (i + 1).ToString() + "\n Lu";
g.Columns.Add(bf);
}
else if (jour.Equals("Tuesday"))
{
bf.HeaderText = (i + 1).ToString() + "\n Ma";
g.Columns.Add(bf);
}
else if (jour.Equals("Wednesday"))
{
bf.HeaderText = (i + 1).ToString() + "\n Me";
g.Columns.Add(bf);
}
else if (jour.Equals("Thursday"))
{
bf.HeaderText = (i + 1).ToString() + "\n Je";
g.Columns.Add(bf);
}
else if (jour.Equals("Friday"))
{
bf.HeaderText = (i + 1).ToString() + "\n Ve";
g.Columns.Add(bf);
}
else if (jour.Equals("Saturday"))
{
bf.HeaderText = "";
g.Columns.Add(bf);
}
else if (jour.Equals("Sunday"))
{
bf.HeaderText = "";
g.Columns.Add(bf);
}
else
{
bf.HeaderText = (i + 1).ToString() + "\n Erreur";
g.Columns.Add(bf);
}
}
// Traitement des opération à effectuer sur la base de données
SqlCommand sqlCommand3 new SqlCommand("SELECT CA.Jour_debut, CA.Jour_fin, C.Code_phase_fr FROM CALENDRIER_CALENDRIER CA INNER JOIN CALENDRIER_LIEN_TABLE LT ON CA.Id_lien_table LT.Id_lien_table INNER JOIN CALENDRIER_CODE C ON LT.Id_code = C.Id_code WHERE CA.Id_mois = " + Id_mois + " AND CA.id_annee = " + Id_annee, oConnection);
SqlDataReader data_jour = sqlCommand3.ExecuteReader();

int[] Jour_debut = new int[nb_ligne];
int[] Jour_fin = new int[nb_ligne];
string[] Code = new string[nb_ligne];

int cpt = 0;

while (data_jour.Read())
{
Jour_debut[cpt] = (int)data_jour.GetSqlInt32(0);
Jour_fin[cpt] = (int)data_jour.GetSqlInt32(1);
Code[cpt] = (string)data_jour.GetSqlString(2);

cpt++;
}
data_jour.Dispose();

for (int i = 0; i < nb_ligne; i++)
{
for (int j = 0; j < cpt; j++)
{
if (g.Rows[i].Cells[3].Text.Equals(Code[j]))
{
int cpt2 = Jour_debut[j] + 4;
do
{
g.Rows[i].Cells[cpt2].Text = "X";
cpt2++;
}
while (cpt2 != Jour_fin[j] + 5);
g.DataBind();
}
}
}
}
oConnection.Close();
}
catch (System.Exception ex)
{
}
}

Comme je l'ai dit plus haut, je suis débutant en aspx.net et en C#. Je viens de commencer. C'est pourquoi mon code n'est peut être pas la meilleure façon de faire.

Ce que je dois obtenir, c'est un calendrier qui montre les différentes phases de projet pour chaque mois (par exemple en juin, le projet 1 va durer du premier au trois, dans ce cas, on fera apparaitre les 'X' dans les trois cases correspondantes).
Les projets ainsi que leur durée sont contenus dans une base de données sqlServer 2005. Le framework que j'utilise est le 3.5.

Voila, j'espère avoir été clair. Si vous avez besoin d'autres informations sur le projet, faites le moi savoir.

Merci de votre aide.
0
Rejoignez-nous