Problème d'insertion dans un GridView [Résolu]

k2lic2 4 Messages postés mercredi 5 mai 2010Date d'inscription 12 mai 2010 Dernière intervention - 5 mai 2010 à 11:45 - Dernière réponse : k2lic2 4 Messages postés mercredi 5 mai 2010Date d'inscription 12 mai 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
k2lic2 4 Messages postés mercredi 5 mai 2010Date d'inscription 12 mai 2010 Dernière intervention - 12 mai 2010 à 12:28
3
Merci
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.

Merci k2lic2 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de k2lic2
pierrehenri56 63 Messages postés mardi 4 décembre 2007Date d'inscription 29 octobre 2013 Dernière intervention - 7 mai 2010 à 10:59
0
Merci
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
Commenter la réponse de pierrehenri56
k2lic2 4 Messages postés mercredi 5 mai 2010Date d'inscription 12 mai 2010 Dernière intervention - 7 mai 2010 à 16:58
0
Merci
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
Commenter la réponse de k2lic2
pierrehenri56 63 Messages postés mardi 4 décembre 2007Date d'inscription 29 octobre 2013 Dernière intervention - 10 mai 2010 à 14:19
0
Merci
Bonjour,

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

Merci
Commenter la réponse de pierrehenri56
k2lic2 4 Messages postés mercredi 5 mai 2010Date d'inscription 12 mai 2010 Dernière intervention - 11 mai 2010 à 09:49
0
Merci
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.
Commenter la réponse de k2lic2

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.