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

Ahora el codigo para sumar los IA (Ingenieros de Aplicacion) por mes.

Código:
protected DataTable Mes(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 asigna a noregistro el numero de registros que contiene la tabla
        DateTime[] fecha = new DateTime[noregistros]; //se crean los arreglos para las fechas y cantidades de forma que se 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
        }

        
        int nomeses = 13;
        DateTime []meses = new DateTime[nomeses]; 
        double[] cantidades = new double[nomeses-1]; 

        DateTime mes = new DateTime(año, 01, 01);                     

        meses[0] = mes;
        for(int i=1;i<nomeses;i++)        
            meses[i]=mes.AddMonths(i);
        mes = new DateTime(año, 12, 31);
        meses[12] = mes;

        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("meses"); 
        table1.Columns.Add("cantidades", typeof(float));
        string[] smeses = new string[nomeses-1]; 
        string srespaldo = "";
        int inc = 0;

        foreach (string rmes in CultureInfo.CurrentCulture.DateTimeFormat.MonthNames)
        {
            if(rmes!="")
            smeses[inc] = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(rmes);
            inc++;
        }        

        for(int i=0;i<nomeses-1;i++)            
            for (int j = 0; j < noregistros; j++) 
            {
                if (fecha[j] >= meses[i] && fecha[j] <= meses[i+1]) 
                    cantidades[i] += cantidad[j];
            }        

        for (int i = 0; i < nomeses-1; i++)
        {
            DataRow row = table1.NewRow();             
            row[0] = smeses[i]; 
            row[1] = cantidades[i]; 
            table1.Rows.Add(row); 
        }

        return table1;
    }
como veran, tiene mucha similitud con el de semanas aunque este esta mas pequeño, este codigo me hace pensar en la posibilidad de reducir el otro codigo ya que creo que use muchas cosas innecesarias pero bueno, no soy un programador estrella.