Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/05/2010, 15:38
LOD_Fredy
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: realizar sumatoria de fechas

Edito: encontre la solucion, en parte el problema venia de otro parte, el numero de semanas, era 1, por lo que solo me mostraba 1 semana en la grafica pero ya lo solucione asignando a la variable nosemanas, el numero 53.

Aqui el codigo de todo el boton
Código:
    protected DataTable Semana(DataTable tabla, int año)
    {
        DataRow Row1; //Se crea un renglon de datos que servira para manejar los registros de la tabla
        int noregistros = tabla.Rows.Count; //se cuenta el numero de registros
        DateTime[] fecha = new DateTime[noregistros]; //se crean los arreglos para las fechas y cantidades de forma que puedan manejar mas libremente
        double[] cantidad = new double[noregistros];

        for (int i = 0; i < noregistros; i++)
        {
            Row1 = tabla.Rows[i];  //empieza a tomar los registros de la tabla del primero(0) hasta el ultimo (noregistros-1)
            fecha[i] = (DateTime)Row1[6]; //toma la fecha del registro correspondiente convertida en datetime para poder ser comparada como una fecha
            cantidad[i] = Convert.ToDouble(Row1[7]); //toma la cantidad del registro correspondiente convertida en numero de doble precision
        }                

        DateTime v1 = new DateTime(año, 01, 01); //se crea un dato datetime con la fecha del primer dia del año especificado para obtener el numero de semanas de ese año
        int nosemanas = 53;//System.Globalization.CultureInfo.CurrentUICulture.Calendar.GetWeekOfYear(v1, System.Globalization.CalendarWeekRule.FirstFullWeek, v1.DayOfWeek); //Esta instruccion toma el datetime antes mencionado y checa si
        DateTime[] semanas = new DateTime[nosemanas];
        double[] cantidades = new double[nosemanas];
        
        DateTime esdomingo = new DateTime(año,01,01);//"01/01/" + año.ToString());
        DateTime respaldo= new DateTime();
        respaldo=esdomingo;   
        int cont=1;

        while ("domingo" != respaldo.ToString("ddddd"))            
            respaldo = esdomingo.AddDays(cont++);
        cont=1;
        for (int i = 0; i < nosemanas; i++)
        {               
            while("domingo" != respaldo.ToString("ddddd"))
                respaldo=respaldo.AddDays(cont++);            
            semanas[i] = respaldo;//AQUI FALTA ENCONTRAR COMO OBTENER EL DIA DEL FIN DE SEMANA DE CADA SEMANA(DOMINGO)            
            cantidades[i] = 0;
            respaldo = respaldo.AddDays(7);            
        } 

        DataTable table1 = new DataTable("Tabla"); //se crea una tabla donde se guardaran los dias y la cantidad de IA para cada dia, la cual sera utilizada para generar la grafica
        table1.Clear(); //se limpia la tabla en caso de que tenga informacion
        table1.Columns.Add("semanas"); //se agrega una columna donde iran las fechas
        table1.Columns.Add("cantidades", typeof(float));
        string[] ssemana = new string[nosemanas];

        for (int i = 1; i <= nosemanas; i++)
            ssemana[i - 1] = "Semana " + i.ToString();
                
        DateTime ddomingo= new DateTime();        
        for (int i = 0; i < nosemanas; i++)
        {
            ddomingo = semanas[i].AddDays(-7);            
            for (int j = 0; j < noregistros; j++)
            {                          
                if (fecha[j] > ddomingo && fecha[j] <= semanas[i]) //aqui empieza a comparar fechas, si son iguales suma las cantidades de IA que contengan
                    cantidades[i] += cantidad[j]; //de esta forma solo quedaran fechas unicas desde el 01/01/año al 31/12/año con la
            }
        }

        for (int i = 0; i < nosemanas; i++)
        {
            DataRow row = table1.NewRow(); //se crea un nuevo renglon de datos para almacenar de 1 por 1 registro
            row[0] = ssemana[i]; //guardando la fecha (dia) en tipo cadena            
            row[1] = cantidades[i]; //la cantidad de IA correspondiente a esa fecha (dia)
            table1.Rows.Add(row); //e irlos guardando en la tabla que finalmente sera la que genere la grafica
        }

        return table1;    //se retorna la tabla para poder ser utilizada en el metodo que genera la grafica
    }
Falta comentarlo bien y acomodar el codigo para buscar reducirlo o mejorar la logica de programacion, mañana empiezo a ver eso y tambien me pongo a hacer lo otro que les mencione para ya casi tener la parte principal del proyecto.

Última edición por LOD_Fredy; 05/05/2010 a las 16:29