Torna al Thread
protected void btn_anno_Click(object sender, EventArgs e)
{
//prima di tutto, cotnrollo se è effettivamente un numero. Ho messo un try/ catch,
//ma puoi gestirla anche in altri modi (tipo le regex, credo)
DateTime time = new DateTime();
try
{
// stupidata, ma è tanto epr fare un controllo: se il testo inserito
time = new DateTime(Convert.ToInt32(tb_anno.Text), 1, 1);
}
catch
{
//lancio un alert javascript per segnalare il formato errato dell'inserimento
string s = "<script language='javascript'>";
s += " alert('ATTENZIONE! Formato dell\\'anno non valido');";
s += "</script>";
Page.ClientScript.RegisterStartupScript(s.GetType(), "errore", s);
return;
}
//se il controllo è ok, mi creo il mio DataTable, con una sola colonna
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("ANNO");
dt.Columns.Add(dc1);
//primo ciclo: per ogni mese dell'anno prescelto mi faccio restituire i giorni
for (int i = 1; i < 12; i++)
{
int dayForMonth = Convert.ToInt32(((new DateTime(Convert.ToInt32(tb_anno.Text), i, 1)).AddMonths(1)).AddDays(-1).Day);
//secondo ciclo: per i giorni di ogni mese mi creo una nuova data e vado a vedere se il giorno della settimana è un lunedì (=1)
for (int x = 1; x < dayForMonth; x++)
{
DateTime ndt2 = new DateTime(Convert.ToInt32(tb_anno.Text), i, x);
//Se è un lunedì, creo una nuova riga del mio dataTable e ci metto la mia stringa di data
if (Convert.ToInt32(ndt2.DayOfWeek) == 1)//lunedì
{
DataRow drw = dt.NewRow();
//ho scelto la "M", che mi restituisce tipo: "01 Aprile".
//Per altre opzioni ti rimando a http://msdn.microsoft.com/it-it/library/az4se3k1.aspx
drw[0] = ndt2.ToString("M");
dt.Rows.Add(drw);
dt.AcceptChanges();
}
}
}
//dopo avere riassociato la riga al mio dataTable, bindo i dati al mio gridview
gv.DataSource = dt;
gv.DataBind();
//Se il testo inserito è l'anno di una data, diventa l'intestazione della mia riga
gv.HeaderRow.Cells[0].Text = time.Year.ToString();
}