Grazie Marco, il codice è un po lungo... i dati sono salvati in arraylist statici
static ArrayList idCantieri = new ArrayList();
static ArrayList nomeCantieri = new ArrayList();
static ArrayList oreCantieri = new ArrayList();
sono riempiti da db (OreNelCantiere è una classe che contiene una textbox)
connessioneComMon.Open();
drLettore = cmdComando.ExecuteReader();
DateTime giornoAttuale = inizioFoglioOre;
int cantiereAttuale = -1;
if (drLettore.HasRows)
{
int indiceRighe = -1;
while (drLettore.Read())
{
int cantiereLettore = drLettore.GetInt32(0);
DateTime dataLettore = drLettore.GetDateTime(1);
if (cantiereLettore == cantiereAttuale)
{
while (dataLettore > giornoAttuale)
{
// inserisci cella vuota
OreNelCantiere oNC = new OreNelCantiere(cantiereLettore, giornoAttuale);
((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
// ---
giornoAttuale = giornoAttuale.AddDays(1);
}
// inserisci ore lettore
OreNelCantiere oNCe = new OreNelCantiere(cantiereLettore, dataLettore, drLettore.GetDouble(2));
((ArrayList)oreCantieri[indiceRighe]).Add(oNCe);
// ---
giornoAttuale = giornoAttuale.AddDays(1);
}
else
{
if (giornoAttuale > inizioFoglioOre)
{
while (giornoAttuale <= fineFoglioOre)
{
// inserisci cella vuota
OreNelCantiere oNC = new OreNelCantiere(cantiereLettore, giornoAttuale);
((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
// ---
giornoAttuale = giornoAttuale.AddDays(1);
}
giornoAttuale = inizioFoglioOre;
}
cantiereAttuale = cantiereLettore;
// inserisci nuova riga
idCantieri.Add(cantiereAttuale);
nomeCantieri.Add(drLettore.GetString(3));
ArrayList nuovoOreCantiere = new ArrayList();
oreCantieri.Add(nuovoOreCantiere);
indiceRighe++;
// ---
while (dataLettore > giornoAttuale)
{
// inserisci cella vuota
OreNelCantiere oNC = new OreNelCantiere(cantiereLettore, giornoAttuale);
((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
// ---
giornoAttuale = giornoAttuale.AddDays(1);
}
// inserisci ore lettore
OreNelCantiere oNCe = new OreNelCantiere(cantiereLettore, dataLettore, drLettore.GetDouble(2));
((ArrayList)oreCantieri[indiceRighe]).Add(oNCe);
// ---
giornoAttuale = giornoAttuale.AddDays(1);
}
}
while (giornoAttuale <= fineFoglioOre)
{
// inserisci cella vuota
OreNelCantiere oNC = new OreNelCantiere(cantiereAttuale, giornoAttuale);
((ArrayList)oreCantieri[indiceRighe]).Add(oNC);
// ---
giornoAttuale = giornoAttuale.AddDays(1);
}
}
drLettore.Close();
connessioneComMon.Close();
e da qui genero la tabella
int indiceRiga = 0;
foreach (int idCantiere in idCantieri)
{
HtmlTableRow rigaTabella = new HtmlTableRow();
HtmlTableCell cellaCantiere = new HtmlTableCell();
Label lblNomeCantiere = new Label();
lblNomeCantiere.Text = nomeCantieri[indiceRiga].ToString();
lblNomeCantiere.Width = 200;
cellaCantiere.Controls.Add(lblNomeCantiere);
if (indiceRiga % 2 == 0) cellaCantiere.BgColor = "ffffa0";
rigaTabella.Controls.Add(cellaCantiere);
foreach (OreNelCantiere oNC in ((ArrayList)oreCantieri[indiceRiga]))
{
HtmlTableCell cellaTabella = new HtmlTableCell();
if (indiceRiga % 2 == 0) cellaTabella.BgColor = "ffffa0";
if (oNC.DataPrestazione.DayOfWeek == DayOfWeek.Saturday) cellaTabella.BgColor = "ffcc66";
if (oNC.DataPrestazione.DayOfWeek == DayOfWeek.Sunday) cellaTabella.BgColor = "ffbb66";
cellaTabella.Controls.Add(oNC.Casella);
cellaTabella.Controls.Add(oNC.Validatore);
rigaTabella.Controls.Add(cellaTabella);
}
tabellaFoglioOre.Controls.Add(rigaTabella);
indiceRiga++;
}
tabellaFoglioOre.Border = 1;
tabellaFoglioOre.BorderColor = "Silver";
tabellaFoglioOre.CellSpacing = 0;
this.FoglioOre.Controls.Add(tabellaFoglioOre);
Da qui non recupero + le textbox che ho sulla pagina, perche credo siano delle copie di quelle dentro gli array