Voila le code de la page:
Code ASP.NET :
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1"
AutoGenerateColumns="false" CellPadding="4" AutoPostBack="true"
ForeColor="#333333" GridLines="None">
<RowStyle BackColor="#EFF3FB"/>
<Columns>
<asp:BoundField DataField="Outil_reporting_fr" HeaderText="Outil de reporting"
SortExpression="Outil_reporting_fr" />
<asp:BoundField DataField="Domaine_fr" HeaderText="Domaine"
SortExpression="Domaine_fr" />
<asp:BoundField DataField="Libelle_phase_fr" HeaderText="Libellé"
SortExpression="Libelle_phase_fr" />
<asp:BoundField DataField="code_phase_fr" HeaderText="Code"
SortExpression="code_phase_fr" />
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#2461BF" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
Et voici le code behind en C# :
Code 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.