none
Al cargar Nuevamente los Datos RRS feed

  • Pregunta

  • Hola a todos 
    Tengo un incoveniente a la hora de actualizar unos datos para ser mas explicito podre el codigo primero y despues les explicare mi inconveniente

    Este metodo es para llegar las cajas de texto con los registro de la base de datos

     

     protected void CargarDatos()
            {
                var a = new MetodosActualizacion();
                try
                {
                    foreach (Aspirante asp in a.CargarAspirantes(int.Parse(Request["Id"].ToString())))
                    {
                        txtcodigo.Text = asp.Codigo;
                        txtnombreCons.Text = asp.Nombres;
                        txtapellidosCons.Text = asp.Apellidos;
                        txtcedulaCons.Text = asp.Cedula;
                        txtemailCons.Text = asp.Email;
                        DateTime fecha = DateTime.Parse(asp.FechaNacimiento);
                        int años = DateTime.Now.Year - fecha.Year;
                        txtfechanaCons.Text = años.ToString();
                        txtcargoCons.Text = asp.Cargo;
                        txtsalarioCons.Text = asp.Salario;
                        txthojavidaCons.Text = asp.HojaVida;
                        lblPruebasPsicologicas.Text = asp.Psicologicas;
                        txtObsPruebasPsicologicas.Text = asp.ObPsicologicas;
                        lblResultadoPruebas.Text = asp.urlResultado;
                        txtperfilCons.Text = asp.Perfil;
                        txtprocesoCons.Text = asp.Proceso;
                        txtprocesoAnterior.Text = asp.Proceso;
                        txtObservacionesCons.Text = asp.Observaciones;
                        //txtResulEntrevista.Text = asp.Resultado;
                        txtObsResul.Text = asp.ObservacionResul;
                        DateTime dt = DateTime.Parse(asp.FechaNacimiento);
                        txtdiaCons.SelectedIndex = txtdiaCons.Items.IndexOf(txtdiaCons.Items.FindByValue("" + dt.Day + ""));
                        if (dt.Month <= 9)
                        {
                            txtmesCons.SelectedIndex = txtmesCons.Items.IndexOf(txtmesCons.Items.FindByValue("0" + dt.Month + ""));
                        }
                        else
                        {
                            txtmesCons.SelectedIndex = txtmesCons.Items.IndexOf(txtmesCons.Items.FindByValue("" + dt.Month + ""));
                        }
                        txtañoCons.SelectedIndex = txtañoCons.Items.IndexOf(txtañoCons.Items.FindByValue("" + dt.Year + ""));
                    }

                }
                catch (Exception ex)
                {
                    Response.Redirect("FalloServidor.aspx");
                }
            }

    La funcion que esta en el foreach es esta

    public List<Aspirante> CargarAspirantes(int idAspirante)
            {
                con.Conectar();
                List<Aspirante> asp = new List<Aspirante>();
                using (con.cmd = new MySqlCommand())
                {
                    sentencia = "Select * from aspirantes where idAspirante = '" + idAspirante + "'";
                    con.cmd.Connection = con.con;
                    con.cmd.CommandText = sentencia;
                    //con.cmd.ExecuteNonQuery();

                    con.dr = con.cmd.ExecuteReader();

                    while (con.dr.Read())
                    {
                        asp.Add
                            (
                                new Aspirante
                                   {
                                       Codigo = con.dr[0].ToString(),
                                       FechaRegistro = con.dr[1].ToString(),
                                       Nombres = con.dr[2].ToString(),
                                       Apellidos = con.dr[3].ToString(),
                                       Cedula = con.dr[4].ToString(),
                                       Email = con.dr[5].ToString(),
                                       FechaNacimiento = con.dr[6].ToString(),
                                       Cargo = con.dr[7].ToString(),
                                       Salario = con.dr[8].ToString(),
                                       HojaVida = con.dr[9].ToString(),
                                       Psicologicas = con.dr[10].ToString(),
                                       ObPsicologicas = con.dr[11].ToString(),
                                       urlResultado = con.dr[12].ToString(),
                                       ObservacionResul = con.dr[13].ToString(),
                                       Perfil = con.dr[14].ToString(),
                                       Proceso = con.dr[15].ToString(),
                                       Observaciones = con.dr[16].ToString()
                                   }
                            );
                    }
                }
                con.Desconectar();
                return asp;
            }

    Muchahos mi inconvenientes es que cuando entro y actualizo un registro necesito que actualice y se quede en la misma pagina pero que vuelva a cargar y muestre los cambios ya hechos
    pero me aparece un error en el foreach diciendome que tengo que instanciar pero la verdad no se como puedo hacer hay 
    les agradezco por la atencion y ojala me puedan ayudar

    Saludos


    miércoles, 27 de mayo de 2015 15:57

Respuestas

  • Tengo una duda, el error te sale al insertar el nuevo aspirante? O al mostrar la pagina actualizada.

    Debo suponer que es lo segundo, si es así el problema es en el Page_Load(). Debe haber algun momento en el que al actualizar tu pagina se inicializan en vacío los textbox.

    Prueba guardando los datos en un session, cosa que lo puedes reutilizar en cualquier momento independiente de si cambias de pagina o no. 

    https://msdn.microsoft.com/es-es/library/87069683%28v=vs.80%29.aspx

    Tal vez esto te sirva.

    miércoles, 27 de mayo de 2015 20:03

Todas las respuestas

  • hola

    porque retornas una lista si se supone que por id deberias solo obtener un unica entidad

    deberia ser

    public Aspirante CargarAspirantes(int idAspirante){...

    una sola entidad

    con el reader usarias

                   if(con.dr.Read())
                    {
                           return new Aspirante()
                                   {
                                       Codigo = con.dr[0].ToString(),
                                     ...
                                   }
                            );

    usas un if con el reader


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 27 de mayo de 2015 17:34
  • Gracias, pero aun asi si lo cambio
    me sigue apareciendo error el Foreach
    miércoles, 27 de mayo de 2015 19:14
  • Pruebalo asi,

    while (con.dr.Read())
                    {

    Aspirante a = new Aspirante();

    a.Codigo = con.dr[0].ToString(),

                    a.FechaRegistro = con.dr[1].ToString(),
                    a.Nombres = con.dr[2].ToString(),
                                      a. Apellidos = con.dr[3].ToString(),
                                       a.Cedula = con.dr[4].ToString(),
                                       a.Email = con.dr[5].ToString(),
                                       a.FechaNacimiento = con.dr[6].ToString(),
                                       a.Cargo = con.dr[7].ToString(),
                                       a.Salario = con.dr[8].ToString(),
                                       a.HojaVida = con.dr[9].ToString(),
                                       a.Psicologicas = con.dr[10].ToString(),
                                       a.ObPsicologicas = con.dr[11].ToString(),
                                       a.urlResultado = con.dr[12].ToString(),
                                       a.ObservacionResul = con.dr[13].ToString(),
                                       a.Perfil = con.dr[14].ToString(),
                                       a.Proceso = con.dr[15].ToString(),
                                       a.Observaciones = con.dr[16].ToString()
                        asp.Add(a );
                    }

    Supongo que tu clase Aspirante debe ser virtual por eso no puedes instanciarla asi.

    Saludos.

    miércoles, 27 de mayo de 2015 19:23
  • A que te refieres con virtual no te entiendo
    la clase Aspirantes estan todos los campos con los metodos set y get
    miércoles, 27 de mayo de 2015 19:30
  • Funcionó la forma que te grafiqué?

    Es como declatas tu clase.

    Public virtual class {

    }

    miércoles, 27 de mayo de 2015 19:35
  • No, Mira que no funciono tampoco
    miércoles, 27 de mayo de 2015 19:56
  • Tengo una duda, el error te sale al insertar el nuevo aspirante? O al mostrar la pagina actualizada.

    Debo suponer que es lo segundo, si es así el problema es en el Page_Load(). Debe haber algun momento en el que al actualizar tu pagina se inicializan en vacío los textbox.

    Prueba guardando los datos en un session, cosa que lo puedes reutilizar en cualquier momento independiente de si cambias de pagina o no. 

    https://msdn.microsoft.com/es-es/library/87069683%28v=vs.80%29.aspx

    Tal vez esto te sirva.

    miércoles, 27 de mayo de 2015 20:03
  • Primero no se inserta se actualiza, tengo un grid y hay un linkButtom y me redirecciona al webform que se llama en este caso ConsultarCandidato.aspx

    hay edito lo que quiero editar y al darle actualizar es donde me sale el error, pero si me actualiza.
    si lo redirecciono a otro webform que no sea ese no sale el error

    miércoles, 27 de mayo de 2015 20:15
  • En mi opinión el problema está en el Page_Load de tu pagina ConsultarCandidato.aspx al cargar de nuevo la pagina intenta llenar de nuevo tus controles con datos que ya no tiene.

    Inicializa los controles en vacios.

    Ejm: Textbox.text = "";

    Si te pinta en blanco, deberias manejar tus datos en en el metodo Page_Load.

    miércoles, 27 de mayo de 2015 20:31
  • ya lo habia intentando habia creado un metodo y lo puse en el Page_load() para que se borraran y se volvieran a llenar pero tampoco sirvio

    miércoles, 27 de mayo de 2015 20:39