none
Mostrar contenido de textbox en wpf RRS feed

  • Pregunta

  • Hola, soy nuevo en .Net y pues estoy realizando una practica con conexión a un DB, donde hago lo basico que es guardar, mostrar y mostrar por Id 

    también eh creado 4 textbox y 1 boton dinámicos (hijos) en un wrappanel, donde cada vez que yo quiera buscar un usuario por su ID me muestra sus datos en los respectivos Textbox.

    ahora el boton lo utilizo para que me muestre en un messagebox todo los datos  que tiene una respectiva fila de textbox.

    el problema es que solo puedo hacer que me muestre la primera fila de datos cuando le doy click al boton de la primera fila pero no pillo como me muestre los otros datos de las otras filas de textbox.

    espero puedan ver mi problema y echarme una manito. 

     

    using System.Linq;

    using System.Text;

    using System.Windows;

    using System.Windows.Controls;

    using System.Windows.Data;

    using System.Windows.Documents;

    using System.Windows.Input;

    using System.Windows.Media;

    using System.Windows.Media.Imaging;

    using System.Windows.Navigation;

    using System.Windows.Shapes;

    using System.Windows.Forms;

    using System.Windows.Forms.Integration;

    using System.Data;

    using System.Data.Sql;

    using System.Data.SqlClient;

     

     

    namespace WpfApplication1

    {

        /// <summary>

        /// Lógica de interacción para Window1.xaml

        /// </summary>

        public partial class Window1 : Window

        {

            public Window1()

            {

                InitializeComponent();

            }

     

     

            private void button2_Click(object sender, RoutedEventArgs e)

            {

                SqlConnection con = new SqlConnection();

                con.ConnectionString = @"Data Source = EDWIN-PC; Initial Catalog = DBPracticaII; Integrated Security = True";

                string sql = "select * from registro";

                SqlDataAdapter adaptador = new SqlDataAdapter(sql, con);

                DataTable dt = new DataTable();

                adaptador.Fill(dt);

                DataGridView dg1 = new DataGridView();

                dg1 = this.wfh.Child as DataGridView;

                dg1.DataSource = dt;

                dg1.Refresh();

     

     

            }

     

            private void button1_Click(object sender, RoutedEventArgs e)

            {

                SqlConnection con = new SqlConnection();

     

                con.ConnectionString = @"Data Source = EDWIN-PC; Initial Catalog = DBPracticaII; Integrated Security = True";

                con.Open();

                string sql = "insert into registro values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"',"+textBox4.Text+",'10-10-2010')";

     

                 SqlCommand commad=new SqlCommand (sql,con);

               commad.ExecuteNonQuery();

     

     

            }

     

            private void button3_Click(object sender, RoutedEventArgs e)

            {

     

                add();

     

                SqlConnection con = new SqlConnection();

                con.ConnectionString = @"Data Source = EDWIN-PC; Initial Catalog = DBPracticaII; Integrated Security = True";

     

                string sql = "select Idregistro, Nombre, Apellidos,Direccion,Telefono from registro where(Idregistro = '" + txtbuscar.Text + "')";

                SqlDataAdapter adaptador = new SqlDataAdapter(sql, con);

                DataTable dt = new DataTable();

                adaptador.Fill(dt);

                DataGridView dg1 = new DataGridView();

                dg1 = this.wfh.Child as DataGridView;

                dg1.DataSource = dt;

                dg1.Refresh();

     

            }

     

          private void add()

            {

                SqlConnection con = new SqlConnection();

                con.ConnectionString = @"Data Source = EDWIN-PC; Initial Catalog = DBPracticaII; Integrated Security = True";

                string sql = "select Idregistro, Nombre, Apellidos,Direccion,Telefono from registro where(Idregistro = '" + txtbuscar.Text + "')";

                SqlDataAdapter adaptador = new SqlDataAdapter(sql, con);

                DataTable dt = new DataTable();

                adaptador.Fill(dt);

     

     

                System.Windows.Controls.TextBox txt = new System.Windows.Controls.TextBox();

                System.Windows.Controls.TextBox txt2 = new System.Windows.Controls.TextBox();

                System.Windows.Controls.TextBox txt3 = new System.Windows.Controls.TextBox();

                System.Windows.Controls.TextBox txt4 = new System.Windows.Controls.TextBox();

                System.Windows.Controls.Button btn = new System.Windows.Controls.Button();

     

                txt.Height = 29;

                txt2.Height = 29;

                txt3.Height = 29;

                txt4.Height = 29;

                txt.Width = 150;

                txt2.Width = 150;

                txt3.Width = 150;

                txt4.Width = 150;

                btn.Width = 110;

                btn.Content = "Mostrar Fila" ;

                try

                {

                    txt.Text = dt.Rows[0][1].ToString();

                    txt2.Text = dt.Rows[0][2].ToString();

                    txt3.Text = dt.Rows[0][3].ToString();

                    txt4.Text = dt.Rows[0][4].ToString();

     

     

                wp.Children.Add(txt);

                wp.Children.Add(txt2);

                wp.Children.Add(txt3);

                wp.Children.Add(txt4);

                wp.Children.Add(btn);

     

     

                }

                catch

                {

                    System.Windows.MessageBox.Show("El Codigo de registro que ingreso no existe");

                }

     

     

     

            }

     

            private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)

            {

     

            }

    //Mostrar datos que estan en los textbox creados 

            private void jugar(object sender, RoutedEventArgs e)

            {

     

     

     

     

                    System.Windows.Controls.TextBox x = wp.Children[0]  as System.Windows.Controls.TextBox;

                    System.Windows.Controls.TextBox y = wp.Children[1] as System.Windows.Controls.TextBox;

                    System.Windows.Controls.TextBox z = wp.Children[2] as System.Windows.Controls.TextBox;

                    System.Windows.Controls.TextBox a = wp.Children[3] as System.Windows.Controls.TextBox;

     

     

                    System.Windows.MessageBox.Show("NOMBRE: " + x.Text + " APELLIDOS: " + y.Text + " DIRECCION: "

    + z.Text + " TELEFONO: " + a.Text);

                    //"NOMBRE: " + txt.Text +" APELLIDOS: "+txt2.Text

     

            }

     

     

            }

     

     

        }

     

     

     

     

    lunes, 25 de abril de 2011 5:55

Respuestas

  • Hola Serial.

    Antes que nada una pequeña critica constructiva:

    Uff, lo has complicado mucho haciendo uso de una programacion que hace mucho tiempo que no veo. Aunque todos hemos empezado con estos codigos.

    Esto se puede hacer de forma mucho mas sencilla e intuitiva con algun otro control y otra tecnologia de acceso a datos, ya que ademas de facilitar algunas tareas, ofrece mayor seguridad dado que en todas tus consultas se puede realizar inyeccion SQL y tener pleno acceso a la BBDD, ademas de no optimizar las conexiones que se usan.

     

    Bueno, una vez explicado el problema del codigo y si quieres seguir con el mismo sistema, te comento el que falla:

    1.- en todas las filas de texboxes necesitas algun tipo de identificador unico que identifique la fila que quieres mostrar en la mensaje, para no crear un control oculto ni ninguna otra cosa rara, se puede hacer uso de la propiedad Name de cualquier control, en este caso, yo escogeria el boton para insertar en el algun tipo de indice que identifique esa fila, es posible que te valga IdRegistro si es que es una clave unica, de modo que al boton se pone:

    btn.Name = txtbuscar.Text;

     

    2.- al boton le falta añadirle el evento para llamar a 'Jugar', no se como lo llamas actualmente, pero deberias de hacer algo asi con el boton:

     

    button1.Click +=new RoutedEventHandler(jugar);
    

     

     

    3.- Como el boton tiene en el Name con el identificador unico, se puede buscar el boton mediante wp.FindName("identificador o fila"), con lo cual se puede saber el indice del boton y obtener los 4 textboxes que se han insertado antes que el, de modo que ya tendriamos el texto de los textBoxes para establecerlos en el mensaje.

     

    existen otras alternativas como establecer en los texboxes los nombres txt_identificador y luego filtrar para obtener el que corresponda, en fin, aqui cualquier cosa donde apollarse es valida. La idea principal es crear algun tipo de identificador para las filas.

    Ya contaras como te va.

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Propuesto como respuesta CorsarioVasco miércoles, 27 de abril de 2011 6:12
    • Marcado como respuesta SERIAL223 viernes, 29 de abril de 2011 18:27
    martes, 26 de abril de 2011 17:47
  • Hola Serial.

    Se puede hacer cualquier efecto en XP, el sistema operativo es independiente del Framework y se puede hacer cualquier tipo de efecto.

    Si puedes, cierra este post y abre otro con lo del efecto si tienes problemas para implementarlo.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta SERIAL223 viernes, 29 de abril de 2011 18:27
    miércoles, 27 de abril de 2011 15:38

Todas las respuestas

  • Hola Serial.

    Antes que nada una pequeña critica constructiva:

    Uff, lo has complicado mucho haciendo uso de una programacion que hace mucho tiempo que no veo. Aunque todos hemos empezado con estos codigos.

    Esto se puede hacer de forma mucho mas sencilla e intuitiva con algun otro control y otra tecnologia de acceso a datos, ya que ademas de facilitar algunas tareas, ofrece mayor seguridad dado que en todas tus consultas se puede realizar inyeccion SQL y tener pleno acceso a la BBDD, ademas de no optimizar las conexiones que se usan.

     

    Bueno, una vez explicado el problema del codigo y si quieres seguir con el mismo sistema, te comento el que falla:

    1.- en todas las filas de texboxes necesitas algun tipo de identificador unico que identifique la fila que quieres mostrar en la mensaje, para no crear un control oculto ni ninguna otra cosa rara, se puede hacer uso de la propiedad Name de cualquier control, en este caso, yo escogeria el boton para insertar en el algun tipo de indice que identifique esa fila, es posible que te valga IdRegistro si es que es una clave unica, de modo que al boton se pone:

    btn.Name = txtbuscar.Text;

     

    2.- al boton le falta añadirle el evento para llamar a 'Jugar', no se como lo llamas actualmente, pero deberias de hacer algo asi con el boton:

     

    button1.Click +=new RoutedEventHandler(jugar);
    

     

     

    3.- Como el boton tiene en el Name con el identificador unico, se puede buscar el boton mediante wp.FindName("identificador o fila"), con lo cual se puede saber el indice del boton y obtener los 4 textboxes que se han insertado antes que el, de modo que ya tendriamos el texto de los textBoxes para establecerlos en el mensaje.

     

    existen otras alternativas como establecer en los texboxes los nombres txt_identificador y luego filtrar para obtener el que corresponda, en fin, aqui cualquier cosa donde apollarse es valida. La idea principal es crear algun tipo de identificador para las filas.

    Ya contaras como te va.

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Propuesto como respuesta CorsarioVasco miércoles, 27 de abril de 2011 6:12
    • Marcado como respuesta SERIAL223 viernes, 29 de abril de 2011 18:27
    martes, 26 de abril de 2011 17:47
  • Gracias. Hasta que logre mostrar los mensajes de cada fila :) muchas gracias por la ayuda me sirvió y pude presentar mi practico sin problemas y te agradezco la critica constructiva :D. una pregunta es posible hacer el efecto vidrio en las ventanas de wpf y mostrarlo en xp, bueno eh visto unas en vista pero no en xp ¿?. Nuevamente gracias...:D
    miércoles, 27 de abril de 2011 15:05
  • Si las respuestas son de utilidad es bueno para los Foros que las marques como tal así mismo como marcar las respuestas.
    Ingphillip's Prog
    New Post System.Reflection

    No uses el copy-page, No es nada sano ni recomendable....

    miércoles, 27 de abril de 2011 15:23
  • Hola Serial.

    Se puede hacer cualquier efecto en XP, el sistema operativo es independiente del Framework y se puede hacer cualquier tipo de efecto.

    Si puedes, cierra este post y abre otro con lo del efecto si tienes problemas para implementarlo.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta SERIAL223 viernes, 29 de abril de 2011 18:27
    miércoles, 27 de abril de 2011 15:38