Foros del Web » Programando para Internet » ASPX (.net) »

Calendario en tres colores

Estas en el tema de Calendario en tres colores en el foro de ASPX (.net) en Foros del Web. Buenas.... estoy con un programa de reservas y necesito pintar los dias de un calendario de tres colores, segun disponibilidad. Es decir, tengo tres funciones ...
  #1 (permalink)  
Antiguo 26/07/2005, 04:18
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
Calendario en tres colores

Buenas.... estoy con un programa de reservas y necesito pintar los dias de un calendario de tres colores, segun disponibilidad. Es decir, tengo tres funciones que me devuelvern true o false y cada una de ellas me indica una disponibilidad diferente. La cuaestion esq ue tengo que consultar para todos los dias de un mes y pintar ese dia en funciona a ls disponibilidad...
¿Para esto puedo utilizar el Objeto Calendar o debo crearme yo un tupo Calendario especial?, ¿Alguna idea?

Gracias mundo....
  #2 (permalink)  
Antiguo 26/07/2005, 05:07
 
Fecha de Ingreso: octubre-2004
Mensajes: 211
Antigüedad: 19 años, 6 meses
Puntos: 2
pienso que vas a tener que currarte un control, ya que si no te he entendido mal lo que necesitas es pintar un dia en concreto de un color diferente al resto.

Al menos en Winforms esa posibilidad no la hay, hay la posibilidad de cambiar todos los colores de todos los dias pero no de uno en concreto.

Animo es divertido.
  #3 (permalink)  
Antiguo 26/07/2005, 05:11
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
ok. Ya me lo parecia. Me podrias decir por donde empiezo o dar algun consejo??
Gracias
  #4 (permalink)  
Antiguo 26/07/2005, 05:24
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Yo tuve que hacer algo parecido para una pagina web realizada en html y javascript a traves de Velazquez Visual, lo que hice fue buscar el codigo de un calendario en javascript y luego adecuarlo a lo que queria.

Empieza buscando el codigo fuente de un calendario en vb.net y luego trasteas con el, con condicionles y demas.
  #5 (permalink)  
Antiguo 26/07/2005, 05:26
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
ok, gracias. Ya vere como me apaño....salu2
  #6 (permalink)  
Antiguo 26/07/2005, 12:35
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 4 meses
Puntos: 1
Hola en una ocación me toco hacer algo asi en web aplication y me guie del material que aparece en el enlace

http://www.mikepope.com/blog/AddComment.aspx?blogid=999

Espero te sirva

  #7 (permalink)  
Antiguo 26/07/2005, 14:49
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Estoy de acuerdo con el link de Sayra (que milagro amiga.. jeje)

Todo radica en el evento DayRender del calendario
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #8 (permalink)  
Antiguo 27/07/2005, 01:15
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
ok gracias, parece que me sera util.
  #9 (permalink)  
Antiguo 27/07/2005, 01:22
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
mmmm, sabriais indicamerme algo que este en C#? Gracias
  #10 (permalink)  
Antiguo 27/07/2005, 02:16
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
Veamos.. no entiendo muy bien el codigo del enlace y estoy haciendo alguna pruebas. Si hago

this.calendario.SelectedDayStyle.BackColor = System.Drawing.Color.Bisque;
this.calendario.SelectedDates.SelectRange(new DateTime(2005,7,18), new DateTime(2005,7,20));
this.calendario.SelectedDates.SelectRange(new DateTime(2005,7,1),new DateTime(2005,7,15));

Me cambia el color solo del ultimo rango. Sin embargo si pongo el codigo:

this.calendario.SelectedDates.Add(new DateTime(2005,7,18));
this.calendario.SelectedDayStyle.BackColor = System.Drawing.Color.Bisque;
this.calendario.SelectedDates.Add(new DateTime(2005,7,25));
this.calendario.SelectedDayStyle.BackColor = System.Drawing.Color.BlueViolet;

Entonces me pinta todos los dias en color BlueViolet. Mi pregunta es..¿hay alguna forma de una vez coloreados en el calendario unos dias, quitarlos del 'select' (Hacer que el calendario no los reconozca) y seleccionar otros y pintarlos?... NO se si esto sera posible..
  #11 (permalink)  
Antiguo 27/07/2005, 06:14
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
Ya lo consegi... gracias a ambos
  #12 (permalink)  
Antiguo 27/07/2005, 08:21
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Sería bueno que poubliques la forma en que lo hiciste para que los demas tambien lo sepan..

Salu2
  #13 (permalink)  
Antiguo 28/07/2005, 01:29
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
De acuerdo

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
  #14 (permalink)  
Antiguo 28/07/2005, 07:52
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta

Todo el código que va delante de Calendar1_DayRender dónde va exactamente?? Soy novata en todo esto y necesito que me ayuden!!

Última edición por oriopitufa; 28/07/2005 a las 07:54 Razón: me he equivocado al citar
  #15 (permalink)  
Antiguo 29/07/2005, 10:10
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
La primera parte, se pone al cargar la pagina (Load_page creo). La segunda parrafada yo la tengo en una función llamada colorea(), asi puedo llamarla cuando quiera...
Mejor??
  #16 (permalink)  
Antiguo 29/07/2005, 14:06
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
OK, muchas gracias, ahora tengo mas clara la cosa.
  #17 (permalink)  
Antiguo 01/08/2005, 05:21
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Hola amigos,
estoy intentando introducir un calendario en una página web realizada mediante .NET, pero no consigo cambiar el color a unos días concretos!!
He probado tanto lo que ha puesto Jat_ibo como lo del enlace web de Sayra, pero no consigo que me coloree los días??
Tengo que definir un nuevo control que herede del Calendar que hay disponible o cambiar algún valor de las propiedades o cómo hay que hacerlo??
Alguien me podría ayudar??

Última edición por oriopitufa; 01/08/2005 a las 05:27
  #18 (permalink)  
Antiguo 01/08/2005, 06:41
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 4 meses
Puntos: 1
Pues se me ocurren dos soluciones

1.- Defines en esa página web un nuevo calendario y la parte superior del codigo donde aparece el inherit le dice que herede las propiedades del otro.

2.- Defines una clase colorear calendar, en tu pagina web colocar un calendario y llamas a la clase.

Yo use mucho la primera opcion porque me compli mucho intentando hacer la clase. Pero de seguro root se le ocurre una mejor .(El es muy bueno para eso)
  #19 (permalink)  
Antiguo 01/08/2005, 07:08
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0

Dices que cree una nueva clase, por ejemplo calendario, y que le indique que hereda de la clase Calendar, y que dentro de esa clase implemente una función colorea que será la encargada de colorear los dias??
Eso es lo que me quieres decir??
  #20 (permalink)  
Antiguo 01/08/2005, 11:44
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 4 meses
Puntos: 1
No, si tu tiene tu clase que colorea fechas en el calendario, no es necesario que crees otra. En la aplicación web con el nuevo calendario que tienes llamas ha esa clase que ya construiste.
  #21 (permalink)  
Antiguo 21/08/2005, 10:49
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
oriopitufa, a ver si te entiendo... Tienes que colorear unos dias concretos del calendario, pero sabes cuales son??
1. Si lo sabes puedes utilizar mi codigo pintando solo el dia correspondiente.
2. Si no los sabes, deberas obtenerlos de alguna manera (yo utilizo las funciones WebDavLIBRE(...))

Yo no probe lo de crear el control, pero me parecio mas complicado que la funcion que utilizo yo. Dices que me funcion no te va, que te falla? A lo mejor te puedo ayudar a modificarla...aunque si prefieres crear un control... comenta, cuando lo soluciones como lo hicieste, a mi me valdria de ayuda....

No se si te sirvio xa algo lo que te dije, espero que si....
Saludos
  #22 (permalink)  
Antiguo 31/08/2005, 11:58
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
La verdad es que este tema lo he dejado un poco de lado. Mañana mismo lo vuelvo a retomar y ya te comentaré Jat_ibo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:29.