/// <summary>
        /// Ejecuta una consulta para obtener las curvas y carga un DataTable con los resultados
        /// </summary>
        /// <param name="a">Objeto con la consulta</param>
        /// <returns></returns>
        private DataTable DataTableFactoresFromDataBase(ObjetoActualizacionFactores a)
        {
            DataTable data = new DataTable(a.Nombre.ToString());

            foreach (string header in a.Headers)
            {
                data.Columns.Add(header);
            }
            Invoke(new Action <string>(EnviarMensaje), "Actualizando factores " + a.Nombre);
            SqlCommand command = new SqlCommand(a.Query, _connection);

            command.CommandTimeout = 300;
            SqlDataReader r = command.ExecuteReader();

            while (r.Read())
            {
                object[] o = new object[r.FieldCount];
                for (int i = 0; i < r.FieldCount; i++)
                {
                    o[i] = r[i];
                }
                data.Rows.Add(o);
            }
            r.Close();
            return(data);
        }
 /// <summary>
 /// actualiza desde BD los factores de desvación de probabilidad de escenarios
 /// Acción desencadenada al hacer click en botton Actualizar en tabpage factores escenarios
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void ActualizarFactores(object sender, EventArgs e)
 {
     if (_connection.State == ConnectionState.Open)
     {
         this.Cursor = Cursors.WaitCursor;
         DateTime ini = DateTime.Now;
         if (objectListView2.CheckedObjects != null)
         {
             foreach (object o in objectListView2.CheckedObjects)
             {
                 ObjetoActualizacionFactores a = (ObjetoActualizacionFactores)o;
                 AgregarTableFactores(a);
             }
             CargarDataTableEnVisorFactores(null, new EventArgs());
         }
         DateTime termino  = DateTime.Now;
         int      duracion = Convert.ToInt16((termino - ini).TotalSeconds);
         EnviarMensaje("Actualización terminada en " + duracion + " segundos.");
         this.Cursor = Cursors.Default;
     }
     else
     {
         EnviarMensaje("Error en la conexión a la base de datos.");
     }
 }
 /// <summary>
 /// Agrega un DaTaTable al DataSet de factores con información desde BD
 /// </summary>
 /// <param name="a"></param>
 private void AgregarTableFactores(ObjetoActualizacionFactores a)
 {
     if (_factores_actualizados.Tables.Contains(a.Nombre.ToString()))
     {
         _factores_actualizados.Tables.Remove(a.Nombre.ToString());
     }
     _factores_actualizados.Tables.Add(DataTableFactoresFromDataBase(a));
 }
 /// <summary>
 /// Quita las tablas chequeadas
 /// Acción ejecutada al hacer click sobre el botón Limpiar en tabpage factores escenarios
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void LimpiarChecksFactores(object sender, EventArgs e)
 {
     if (objectListView2.CheckedObjects != null)
     {
         foreach (object o in objectListView2.CheckedObjects)
         {
             ObjetoActualizacionFactores a = (ObjetoActualizacionFactores)o;
             if (_factores_actualizados.Tables.Contains(a.Nombre.ToString()))
             {
                 _factores_actualizados.Tables.Remove(a.Nombre.ToString());
             }
         }
     }
     CargarDataTableEnVisorFactores(null, new EventArgs());
 }
 /// <summary>
 /// Carga un factor de BD seleccionado en el DataListView de factores
 /// Acción desencadenada al hacer click una de los factores del OLV factores
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void CargarDataTableEnVisorFactores(object sender, EventArgs e)
 {
     this.Cursor = Cursors.WaitCursor;
     this.dataListView1.Visible = true;
     if (objectListView2.GetSelectedObject() != null)
     {
         ObjetoActualizacionFactores a = (ObjetoActualizacionFactores)objectListView2.GetSelectedObject();
         ConfigurarDataObjectList(dataListView1, 1, a.Headers);
         if (_factores_actualizados.Tables.Contains(a.Nombre.ToString()))
         {
             dataListView1.DataSource = _factores_actualizados.Tables[a.Nombre.ToString()];
         }
         dataListView1.Refresh();
     }
     this.Cursor = Cursors.Default;
 }
 /// <summary>
 /// Carga ascpectGetters y ascpectPutters en OLV factores
 /// </summary>
 private void SetDelegatesOLVFactores()
 {
     objectListView2.AllColumns[0].AspectGetter = delegate(object o)
     {
         ObjetoActualizacionFactores aux = (ObjetoActualizacionFactores)o;
         return(aux.Nombre);
     };
     objectListView2.AllColumns[1].AspectGetter = delegate(object o)
     {
         ObjetoActualizacionFactores aux = (ObjetoActualizacionFactores)o;
         return(aux.AgnoIni);
     };
     objectListView2.AllColumns[1].AspectPutter = delegate(object goal, object value)
     {
         ObjetoActualizacionFactores aux = (ObjetoActualizacionFactores)goal;
         int valor = Utilidades.EsEnteroPositivo(value.ToString()) ? ((int)value) : aux.AgnoIni;
         aux.AgnoIni = (valor >= 2000 && valor <= DateTime.Now.Year) ? valor : aux.AgnoIni;
     };
 }