none
Busquedas mediante textbox y resultado en gridview(Windows form) RRS feed

  • Pregunta

  • Hola como están?

    Bueno mi duda es que tengo un formulario con un textbox que se llena mientras voy escribiendo,bien,mas abajo tengo un botón,lo que quiero es que al presionar el botón esto me abra otro form o ventana con los detalles de ese ítem seleccionado.

    pueden ser en TextBox o en labels

    jueves, 14 de abril de 2016 16:41

Respuestas

  • Hola,

    Pues básicamente es tomar el valor, y hacer una consulta en la base de datos, almacenarlos en un DataTable y mostrarlos en los textBox correspondientes, tienes que verificar que no te retorne más de una fila, ya que te generará conflictos.

    Aquí un ejemplo :

    > FORM 1

      public DataTable consultarDatos(string dato)
            {
                SqlConnection con;
                SqlDataAdapter comando;
                DataTable dt;
    
                con = new SqlConnection("MiCadenaDeConexion");
    
                string consulta = String.Format("SELECT CAMPO1, CAMPO2 FROM MITABLA WHERE ID = '{0}'", dato);
                comando = new SqlDataAdapter(consulta, con);
    
                dt = new DataTable();
    
                try
                {
                    //Cargamos el DataTable con el resultado
                    comando.Fill(dt);
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Se produjo un error : " + ex.Message);
                    dt = null;
                }
    
                return dt;
            }

    Creo un método con un parámetro, el cual será el valor tomado del TextBox a consultar, y en el evento Click del botón envías como parámetro el DataTable que nos retorna.

     private void btnConsultar_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2(consultarDatos(txtFitro.Text));
                frm2.ShowDialog();
            }

    > FORM 2

    En el constructor agrego el parámetro de tipo DataTable y lo almaceno en un DataTable para poderlo usar en ese formulario.

          //Declaro
            DataTable dt;
    
            public Form2(DataTable dtRecibido)
            {
                InitializeComponent();
    
                //Almaceno el DataTable recibido en un DT
                dt = dtRecibido;
            }

       public void cargarDatos()
            {
                //Si no es nulo
                if (dt != null)
                {
                    switch (dt.Rows.Count)
                    {
                        case 0:
                            MessageBox.Show("No se encontraron resultados."); break;
                        case 1:
                            {
                                textBox1.Text = Convert.ToString(dt.Rows[0]["CAMPO1"]);
                                textBox2.Text = Convert.ToString(dt.Rows[0]["CAMPO2"]);
                                break;
                            }
                        default:
                            MessageBox.Show("Se encontraron " + dt.Rows.Count + " registros."); break;
                    }
                }
            }

    Este es solo una validación, si estás seguro que siempre te retornará una fila puedes hacerlo directamente.

    Llamo al método cuando cargue el formulario para mostrar los datos.

        private void Form2_Load(object sender, EventArgs e)
            {
                cargarDatos();
            }

    Resultado :

    Espero te ayude.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 14 de abril de 2016 18:43

Todas las respuestas

  • Hola,

    Primeramente especificar el lenguaje, C# o VB.Net.

    [-] .... abajo tengo un botón,lo que quiero es que al presionar el botón esto me abra otro form o ventana con los detalles de ese ítem seleccionado.

    Básicamente es crear una nueva instancia del Form en el evento Click del botón y mostrarlo con un .Show() o un diálogo (.ShowDialog()), pero los detalles del texto ingresado, de donde los vas a tomar? Usas base de datos, explica esa parte.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 14 de abril de 2016 16:49
  • Estoy usando C#.en visual studio 2013 y sql server 2012.

    en realidad lo de .showDialog() también lo tengo,porque me funciona cuando presiono el botón.

    y si,uso BD.

    como explique arriba el TextBox que se llena automáticamente mientras escribo obtiene los datos de Una BD


    QUIERO TOMAR LOS DETALLES DE LA BASE DE DATOS.
    SEGUN EL ITEM QUE YO DIGITE O SELECCIONE
    jueves, 14 de abril de 2016 17:06
  • Hola,

    Pues básicamente es tomar el valor, y hacer una consulta en la base de datos, almacenarlos en un DataTable y mostrarlos en los textBox correspondientes, tienes que verificar que no te retorne más de una fila, ya que te generará conflictos.

    Aquí un ejemplo :

    > FORM 1

      public DataTable consultarDatos(string dato)
            {
                SqlConnection con;
                SqlDataAdapter comando;
                DataTable dt;
    
                con = new SqlConnection("MiCadenaDeConexion");
    
                string consulta = String.Format("SELECT CAMPO1, CAMPO2 FROM MITABLA WHERE ID = '{0}'", dato);
                comando = new SqlDataAdapter(consulta, con);
    
                dt = new DataTable();
    
                try
                {
                    //Cargamos el DataTable con el resultado
                    comando.Fill(dt);
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Se produjo un error : " + ex.Message);
                    dt = null;
                }
    
                return dt;
            }

    Creo un método con un parámetro, el cual será el valor tomado del TextBox a consultar, y en el evento Click del botón envías como parámetro el DataTable que nos retorna.

     private void btnConsultar_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2(consultarDatos(txtFitro.Text));
                frm2.ShowDialog();
            }

    > FORM 2

    En el constructor agrego el parámetro de tipo DataTable y lo almaceno en un DataTable para poderlo usar en ese formulario.

          //Declaro
            DataTable dt;
    
            public Form2(DataTable dtRecibido)
            {
                InitializeComponent();
    
                //Almaceno el DataTable recibido en un DT
                dt = dtRecibido;
            }

       public void cargarDatos()
            {
                //Si no es nulo
                if (dt != null)
                {
                    switch (dt.Rows.Count)
                    {
                        case 0:
                            MessageBox.Show("No se encontraron resultados."); break;
                        case 1:
                            {
                                textBox1.Text = Convert.ToString(dt.Rows[0]["CAMPO1"]);
                                textBox2.Text = Convert.ToString(dt.Rows[0]["CAMPO2"]);
                                break;
                            }
                        default:
                            MessageBox.Show("Se encontraron " + dt.Rows.Count + " registros."); break;
                    }
                }
            }

    Este es solo una validación, si estás seguro que siempre te retornará una fila puedes hacerlo directamente.

    Llamo al método cuando cargue el formulario para mostrar los datos.

        private void Form2_Load(object sender, EventArgs e)
            {
                cargarDatos();
            }

    Resultado :

    Espero te ayude.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 14 de abril de 2016 18:43
  • Hey man Muchas gracias gracias gracias. No sabes lo que tuve que buscar en muchas paginas algo como esto.

    Claro tuve batallar mucho para poderlo poner correctamente colocado, pero gracias. Me ha sido muy útil.

    Ahí va un punto!!!

    Ahora lo que tengo que hacer es trabajar duro para terminar mi proyecto. Por cierto es para escuelas publicas.

    gracias gracias gracias gracias gracias gracias

    Dios te bendiga!!!Siempre

    jueves, 14 de abril de 2016 20:29
  • Ya hice todo y me salió bien, pero y si yo quiero que también me consulte una foto junto con los datos.?
    domingo, 8 de mayo de 2016 22:15
  • Hola,

    Como almacenas la imagen en tu BD ?, usas un campo de tipo image o guardas la ruta de la imagen?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 9 de mayo de 2016 3:09
  • Bueno también lo solucione.!!!Todo resuelto

    Guardo mis imágenes en un campo Image, pero tengo otro problema y es que cuando voy a actualizar los datos me tira un error de que "el tiempo del servidor caduco ",pero si quito el campo foto de mi código me guarda los datos bien.

    miércoles, 11 de mayo de 2016 4:48
  • Hola,

    Como estás haciendo una actualización supongo que usas el SQLCommand.

    Puedes cambiar su propiedad CommandTimeOut

               //Donde 5 * 60seg = 300 (5 minutos)
                cmd.CommandTimeout = 300;

    Con esto le damos más tiempo para procesar, el valor por defecto es 30seg, ya tu le asignas el tiempo que creas conveniente.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 11 de mayo de 2016 14:41