none
refrescar datos de un textbox a otro mediante sql server RRS feed

  • Pregunta

  • saludos,

    tengo un formulario en el cual tengo 2 textbox y un boton,tambien tengo una tabla en sql el cual contiene id,nombre,la podemos llamar datos esa tabla, al momento de ejecutar el formulario en el textbox 1 me muestra el id que tiene la tabla, eso quiere decir que ya tengo las conexiones y todo bien, lo que quiero hacer es que cuando introdusca un nombre en el texbox 2, me actualize el id del textbox 1 automaticamente y me lo muestre al momento de pulsar el boton, como seria ese metodo?


    joel

    domingo, 27 de diciembre de 2020 18:41

Respuestas

  • Hola

    Acá te paso el código. Como ejemplo usé un List<Persona> que cargo manualmente en el Load. Podes probar mi ejemplo y luego adaptarlo a tu programa, que usa una base de datos.

    Fijate bien en los comentarios. Por ejemplo, lo de guardar el nuevo nombre en la tabla, y obtener el Id del nuevo registro insertado. Eso no lo pongo porque no se como es la tabla, pero con SqlCommand se hace fácil. 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace WindowsFormsAppBuscarIdPorNombre
    {
        public partial class Form1 : Form
        {
            private List<Persona> lista;
            
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // Yo aquí simulo la obtención de los datos con List de tipo Persona
                // Vos los obtenes de la tabla y tu List o DataTable será con tu propia clase
                lista = new List<Persona>();
                lista.Add(new Persona(1, "Juan Pérez"));
                lista.Add(new Persona(2, "Pedro Gómez"));
                lista.Add(new Persona(3, "Santiago López"));
                lista.Add(new Persona(4, "Raúl Suárez"));
                lista.Add(new Persona(5, "José Rodríguez"));
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int indice, nuevoId;
                if ((indice = ObtenerIndicePorClave(lista, textBox2.Text)) == -1)
                {
                    if (MessageBox.Show("El nombre ingresado no está en la lista. ¿Desea añadirlo?", "Aviso", MessageBoxButtons.YesNo)
                        == DialogResult.Yes)
                    {
                        // Aquí tenes que agregar el nuevo nombre a la tabla, con un SqlCommand me parece lo mejor
                        // Si podes obtener el Id del nuevo registro, no hace falta cargar los datos de nuevo
                        // Yo aquí simulo la obtención de ese Id con lo siguiente
                        nuevoId = lista[lista.Count - 1].Id + 1;
                        // pero vos tenes que obtenerlo de la tabla para no cometer un error
                        lista.Add(new Persona(nuevoId, textBox2.Text));
                        textBox1.Text = lista[lista.Count - 1].Id.ToString();
                    }
                    else
                    {
                        textBox2.Text = "";
                        textBox1.Text = "";
                    }
                }
                else
                {
                    textBox1.Text = lista[indice].Id.ToString();
                }
            }
    
            private int ObtenerIndicePorClave(List<Persona> lista, string nombre) 
            {
                Persona obj = lista.Find(item => item.Nombre == nombre);
                return lista.IndexOf(obj);
            }
        }
    }
    

    Y la clase Persona, que seguro vos tenes ya la tuya propia, y adapta lo anterior con esa clase tuya

    namespace WindowsFormsAppBuscarIdPorNombre
    {
        public class Persona
        {
            public int Id { get; set; }
            public string Nombre { get; set; }
    
            public Persona(int Id, string Nombre) 
            {
                this.Id = Id;
                this.Nombre = Nombre;
            }
        }
    }
    

    Espero que te sea útil. Si te queda alguna duda, acá estoy.

    Saludos

    • Marcado como respuesta joel201022 lunes, 28 de diciembre de 2020 17:44
    lunes, 28 de diciembre de 2020 9:45

Todas las respuestas

  • Hola Joel

    En lugar del TextBox 2, te conviene poner un ComboBox enlazado a los datos, así no tenes que escribir el nombre sino directamente seleccionarlo de la lista. Y en el método del evento SelectionChangeCommitted pones que actualice el TextBox 1 que sera con el SelectedValue del ComboBox.

    // Suponemos que cargas los datos en un DataTable table
    // Así enlazas los datos al ComboBox
    comboBox1.DataSource = table;
    comboBox1.ValueMember = "Id";
    comboBox1.DisplayMember = "Nombre";
    
    
    // Esto ocurre cuando cambias la selección, se actualiza el Id en el textBox1
    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        textBox1.Text = comboBox1.SelectedValue.ToString();
    }
    

    Saludos

    Pablo

    lunes, 28 de diciembre de 2020 0:32
  • saludos pablo, 

    si eso lo comprendo lo que dices, pero lo que quiero lograr es un formulario de ingresos de datos como una factura que cuando uno llena el formulario de clientes por ejemplo, el ID o numero de referencia se actualiza automaticamente para uno poder agregar otro, espero me hayas entendido.



    joel

    lunes, 28 de diciembre de 2020 1:29
  • Si, te entiendo desde el principio. Pero lo que no me explicaste es por qué no te sirve mi respuesta, si cuando cambias el nombre en el ComboBox también se actualiza el Id con el código que te pasé (¿Lo probaste?). ¿Aún preferís que sea un TextBox y no un ComboBox? ¿Y si escribis un nombre que no está en la tabla qué tendría que hacer?

    lunes, 28 de diciembre de 2020 3:32
  • bueno, si el nombre no esta en la tabla deberia de agregarse, pero ya te voy entendiendo lo que quieres decir pero lo que pasa es que con el codigo que pusiste tengo que buscar el nombre en el combobox y ese no seria el fin, lo que si quiero es escribir el nombre que voy a añadir luego que se agrege a la tabla de sql y que se refresque el id en el formulario

    joel

    lunes, 28 de diciembre de 2020 3:49
  • Hola

    Acá te paso el código. Como ejemplo usé un List<Persona> que cargo manualmente en el Load. Podes probar mi ejemplo y luego adaptarlo a tu programa, que usa una base de datos.

    Fijate bien en los comentarios. Por ejemplo, lo de guardar el nuevo nombre en la tabla, y obtener el Id del nuevo registro insertado. Eso no lo pongo porque no se como es la tabla, pero con SqlCommand se hace fácil. 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace WindowsFormsAppBuscarIdPorNombre
    {
        public partial class Form1 : Form
        {
            private List<Persona> lista;
            
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // Yo aquí simulo la obtención de los datos con List de tipo Persona
                // Vos los obtenes de la tabla y tu List o DataTable será con tu propia clase
                lista = new List<Persona>();
                lista.Add(new Persona(1, "Juan Pérez"));
                lista.Add(new Persona(2, "Pedro Gómez"));
                lista.Add(new Persona(3, "Santiago López"));
                lista.Add(new Persona(4, "Raúl Suárez"));
                lista.Add(new Persona(5, "José Rodríguez"));
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int indice, nuevoId;
                if ((indice = ObtenerIndicePorClave(lista, textBox2.Text)) == -1)
                {
                    if (MessageBox.Show("El nombre ingresado no está en la lista. ¿Desea añadirlo?", "Aviso", MessageBoxButtons.YesNo)
                        == DialogResult.Yes)
                    {
                        // Aquí tenes que agregar el nuevo nombre a la tabla, con un SqlCommand me parece lo mejor
                        // Si podes obtener el Id del nuevo registro, no hace falta cargar los datos de nuevo
                        // Yo aquí simulo la obtención de ese Id con lo siguiente
                        nuevoId = lista[lista.Count - 1].Id + 1;
                        // pero vos tenes que obtenerlo de la tabla para no cometer un error
                        lista.Add(new Persona(nuevoId, textBox2.Text));
                        textBox1.Text = lista[lista.Count - 1].Id.ToString();
                    }
                    else
                    {
                        textBox2.Text = "";
                        textBox1.Text = "";
                    }
                }
                else
                {
                    textBox1.Text = lista[indice].Id.ToString();
                }
            }
    
            private int ObtenerIndicePorClave(List<Persona> lista, string nombre) 
            {
                Persona obj = lista.Find(item => item.Nombre == nombre);
                return lista.IndexOf(obj);
            }
        }
    }
    

    Y la clase Persona, que seguro vos tenes ya la tuya propia, y adapta lo anterior con esa clase tuya

    namespace WindowsFormsAppBuscarIdPorNombre
    {
        public class Persona
        {
            public int Id { get; set; }
            public string Nombre { get; set; }
    
            public Persona(int Id, string Nombre) 
            {
                this.Id = Id;
                this.Nombre = Nombre;
            }
        }
    }
    

    Espero que te sea útil. Si te queda alguna duda, acá estoy.

    Saludos

    • Marcado como respuesta joel201022 lunes, 28 de diciembre de 2020 17:44
    lunes, 28 de diciembre de 2020 9:45
  • Hola Joel,

    ¿Alguna novedad sobre la consulta realizada?

    Espero su respuesta.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 28 de diciembre de 2020 15:33
    Moderador
  • saludos eric,

    todo bien, ya logre hacer lo que queria gracias


    joel

    lunes, 28 de diciembre de 2020 17:41
  • gracias,

    pero logre hacerlo con otro metodo mas corto, en el cual consiste en hacer el select y en ese select decirle que el campo id sea +1 luego llamar el dataset y luego decirle que me lea la tabla del sql para luego decirle que me arroje el dato en el textbox, ya con eso al momento de pulsar el boton me arroja el dato


    joel

    lunes, 28 de diciembre de 2020 17:44
  • Cuidado! Que no siempre el Id del nuevo registro insertado es igual al del último + 1. Por ejemplo, si se eliminaron registros, será mayor porque los Id de registros eliminados no se repiten. Hay una forma de obtener el próximo Id de una tabla en lenguaje T-SQL, que no lo recuerdo, pero lo podes googlear. Aunque si cargas de nuevo la tabla con SELECT luego de agregar el registro, no hace falta ... que para mi lo que no hace falta es cargar la tabla de nuevo. 
    lunes, 28 de diciembre de 2020 23:42