De la misma manera que construimos la tabla del calendario, dentro da cada una de las celdas, montaremos otra tabla con los datos datos del DataTable, pero filtrando únicamente los correspondientes a la fecha que estamos tratando:
System.Data.DataTable datos = datos_fecha_agrupa(indice);
la variable indice es la que itera por las fechas del mes, y la función datos_fecha_agrupa devuelve un DataTable con los datos a mostrar:
// Devuelve un datatable con los datos a mostrar para cada fecha.
//
// La primera columna es la fecha.
//
// Si agrupar es true agrupa por la segunda columna y totaliza por la tercera.
//
// El origen de datos debe estar ordenado por la columna a agrupar.
public DataTable datos_fecha_agrupa(DateTime fecha)
{
string artAnt = "";
double cantAcum = 0;
bool primero = true;
object[] valores = new object[2];
if (datosglobal == null)
return null;
DataTable datos = datosglobal;
if (datos.Rows.Count == 0)
return null; // Si no hay datos, no hace nada
if (agrupar)
{
Int32 total = 0;
Int32 totalAnt = 0;
DataTable salida = new DataTable();
salida.Columns.Add("Artículo", System.Type.GetType("System.String"));
salida.Columns.Add("Cantidad", System.Type.GetType("System.Double"));
foreach (DataRow fila in datos.Rows)
{
if (Convert.ToDateTime(fila.ItemArray[0]).Equals(fecha))
{
string art = fila.ItemArray[1].ToString();
double cantidad= (double)fila.ItemArray[2];
if (disponible)
{
total = (Int32)fila.ItemArray[3];
}
if (art.Equals(artAnt))
{
cantAcum += cantidad;
}
else
{
if (primero)
{
primero = false;
}
else
{
valores[0] = (object)artAnt;
if (disponible)
valores[1] = (object)(totalAnt - cantAcum);
else
valores[1] = (object)cantAcum;
salida.Rows.Add(valores);
}
artAnt = art;
cantAcum = cantidad;
if (disponible)
totalAnt = total;
}
}
}
if (!primero)
{
valores[0] = (object)artAnt;
if (disponible)
valores[1] = (object)(totalAnt - cantAcum);
else
valores[1] = (object)cantAcum;
salida.Rows.Add(valores);
}
return salida;
}
else
{
int campos=datos.Columns.Count-1;
DataTable salida2 = new DataTable();
foreach (System.Data.DataColumn dcolumna in datos.Columns)
{
if(!dcolumna.ColumnName.Equals("Fecha"))
salida2.Columns.Add(dcolumna.ColumnName, dcolumna.DataType);
}
foreach (System.Data.DataRow dfila in datos.Rows)
{
object[] val=new object[campos];
if (Convert.ToDateTime(dfila.ItemArray[0]).Equals(fecha))
{
for(int i=1;i<=campos;i++)
val[i-1]=dfila.ItemArray[i];
salida2.Rows.Add(val);
}
}
return salida2;
}
}
martes, 16 de septiembre de 2008
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario