viernes, 29 de agosto de 2008

Control de calendario: construcción dinámica de la tabla.

Utilizaremos una tabla de 6 filas y 7 columnas
La variable de tipo fecha indice, recorre todos los días del mes, diasemini contiene el día de la semana del primer día del mes para controlar en qué columna de la primera fila empezamos a pintar los días. Comenzar y final de tipo boolean marcarán el comienzo y el fin de los días que se pintan en la tabla.

<%
    DateTime indice = fini;
    cFechas dfechas = new cFechas();
    int diasemini = (int)fini.DayOfWeek;
    bool comenzar = false;
    bool final = false;
    if (diasemini == 0)
    {
        diasemini = 7;
    }
%>
    <h1><%Response.Write(this.DropDownList1.SelectedItem.ToString()+" de "+this.DropDownList2.SelectedItem.ToString()); %></h1>
    <table cellpadding="2px" cellspacing="0px" >
    <tr align='center'><td>Lunes</td><td>Martes</td><td>Miércoles</td><td>Jueves</td><td>Viernes</td><td>Sábado</td><td>Domingo</td></tr>
<%
    for (int fila = 1; fila <= 6; fila++)
    {
%>
        <tr valign='top'>
<%
        for (int col = 1; col <= 7; col++)
        {

            Response.Write("<td style='border: 1px solid #000000; font-size: small; vertical-align: top; text-transform: lowercase; width: "+ancho+"; height: 50px; ");
            if (!final)
            {
                if (!comenzar)
                {
                    if (col == diasemini)
                        comenzar = true;
                    else
                        Response.Write("'>");
                }
                if (comenzar)
                {
                    Response.Write(" background-color: #DE9600; color: #A50031;'>");
                    if (!url.Equals("nada"))
                        Response.Write("<a href='"+ url + "?fecha="+indice.ToShortDateString()+"' target='_blank'>");
%>
                    <div style='text-align:right; font-size:x-large; font-weight:bold'><% Response.Write(indice.Day.ToString());%>
                    </div>
<%
                    if (!url.Equals("nada"))
                        Response.Write("</a>");
                    int diasem = (int)indice.DayOfWeek;
                    if (diasem == 0) diasem = 7;
                    //                    System.Data.DataTable datos = dfechas.ocupado(indice);
                    System.Data.DataTable datos = datos_fecha_agrupa(indice);

                    Response.Write("<table width='"+ ancho+"'>");

                    if (datos!=null && datos.Rows.Count>0)
                    {
                        foreach (System.Data.DataRow dfila in datos.Rows)
                        {
                            Response.Write("<tr>");
                            int i=0;
                            foreach (System.Data.DataColumn dcolumna in datos.Columns)
                            {
                                if (agrupar && i == 1)
                                {
                                    Response.Write("<td align='right'>");
                                }
                                else
                                {
                                    Response.Write("<td>");
                                }
                                Response.Write(dfila.ItemArray[i].ToString());
                                Response.Write("</td>");
                                i++;
                            }
                            Response.Write("</tr>");
                        }
                    }
                    Response.Write("</table>");
                    if (indice.CompareTo(ffin) >= 0) final = true;
                    indice = indice.AddDays(1);
                }
            }
            else
                Response.Write("'>");
                
            Response.Write("</td>");
        }      
        Response.Write("</tr>");
    }
    Response.Write("</table>");

        
%>

No hay comentarios: