ok, RootK.
Yo lo he hecho de la siguiente forma. En primer lugar declaro una variable para almacenar los colores de los diferentes dias
public System.Drawing.Color [][] colores;
Al cargar la pagina reservo memoria para la matriz y almaceno los colores en el vector llamando a una funcion colorea. Declaro la matriz de 13x32 para poder acceder al dia como [4][31] por ejemplo.
colores = new System.Drawing.Color[13][];
for(int i=0;i<13;i++)
colores[i] = new System.Drawing.Color[32];
if(Application["Calendario_color"] == null)
this.colorea();
else
colores = (System.Drawing.Color[][]) Application["Calendario_color"];
En mi funcion colorea lo que hago es crear tres matices en las que almaceno la disponibilidad y luego en funcion a la disponibilidad almaceno el color en el vector de colores.
bool [][] ocp;
bool [][] libre;
bool [][] medias;
ocp = new bool[13][];
libre = new bool[13][];
medias = new bool[13][];
for(int i=0; i<13;i++)
{
ocp[i] = new bool[32];
libre[i]= new bool[32];
medias[i] = new bool[32];
}
for(int j=1;j<32;j++)
{
if (j<=9)
dia = "2005/07/0" + j;
else
dia = "2005/07/" + j;
ocp[7][j] = exchange.WebDavOCUPADO(dia,rec,carp);
libre[7][j] = exchange.WebDavLIBRE(dia,rec,carp);
if(!ocp[7][j] && !libre[7][j])
medias[7][j] = true;
if(ocp[7][j])
colores[7][j] = System.Drawing.Color.Red;
if(libre[7][j])
colores[7][j] = System.Drawing.Color.Bisque;
if(medias[7][j])
colores[7][j] = System.Drawing.Color.Blue;
}
//Creo una variable de aplicacion
this.Application.Add("Calendario_color",colores);
Como podeis ver solo esta hecho para el mes de Julio, pero eso es porque aun estoy haciendo alguna prueba y porque me queda optimizar el codigo que hace las consultas (asi las pruebas no se me hacen eternas
).
Ahora ya solo queda introducir el codigo para cambiar los colores en el evento
Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
El codigo es el siguiente:
CalendarDay d = ((DayRenderEventArgs)e).Day;
TableCell c = ((DayRenderEventArgs)e).Cell;
if (d.IsOtherMonth)
{
c.Controls.Clear();
}
else
{
try
{
System.Drawing.Color color = colores[d.Date.Month][d.Date.Day];
c.BackColor = color;
}
catch (Exception exc)
{
Response.Write(exc.ToString());
}
}
Espero que os sirva de ayuda. Sino pillais algo, lo preguntais