none
Llenar un listview (de otro form) con datos de la Base de datos RRS feed

  • Pregunta

  • Bueno tengo un form llamado ventas y otro form que se llaama recuperar folio

    cada que realizo una venta se guarda un folio, entonces en ese frmventa puse un boton que me abre el frmbrecuperarfolio 

    tiene un textbox y un boton que dice aceptar

    en ese textbox pongo el folio por el cual voy a filtrar la consulta y llenar un datareader, todo bien.

    el problema es como lleno ese listview del frmventas con los datos que tiene el datareader? 

    Gracias

    Puse un listview en el frmrecuperar numeros y coloqué este codigo en el boton aceptar y si me llena el listview con los datos, pero quiero que me llene el otro listview del otro formulario

    string qry = "";

                    string cadenaconexion = ConfigurationManager.AppSettings.Get("cadenaconexion");

                    SqlConnection sqlCNX = new SqlConnection(cadenaconexion);
                    SqlCommand sqlCMD = new SqlCommand();

                    qry = "SELECT numero,primera,D1,segunda,D2,tercera,D3,id_cliente from ventas where folio='"+this.txtfolioboleto.Text+"'";

                  

                 
                    sqlCMD.CommandText = qry;
                    sqlCMD.CommandType = System.Data.CommandType.Text;


                 
                    sqlCMD.Connection = sqlCNX;
                
                    sqlCNX.Open();
                
                    SqlDataReader sqlDR = null;

                 
                    sqlDR = sqlCMD.ExecuteReader();

                    if (sqlDR.HasRows == true)
                    {


                        while (sqlDR.Read())
                        {

                            ListViewItem item = new ListViewItem(sqlDR["numero"].ToString());
                            item.SubItems.Add(sqlDR["primera"].ToString());

                          this.listView1.Items.Add(item);







                        }



                    }
              
     
    • Editado Utsukushi1 jueves, 7 de julio de 2016 23:41
    jueves, 7 de julio de 2016 23:29

Respuestas

  • Utsukushi1,

    Es claro que el formulario Ventas debe obtener el valor que el usuario ingresa en el formulario RecuperarFolio. Una forma de obtener el valor del formulario hijo es la siguiente:

    private void btnRecuperarNumero_Click(object sender, EventArgs e)
            {
                frmRecuperarFolio frmHijo = new frmRecuperarFolio();
    
                if (frmHijo.ShowDialog() == DialogResult.OK)
                {
                    CargarListView(frmHijo.NumeroFolio) 
                }
            }

    Nota que posterior a cargar el formulario RecuperarFolio (de manera modal) el flujo del programa espera a que la ventana de dialogo se cierre, si la ventana se cierra tras presionar el botón [Aceptar] se ejecutará el método CargarListView() con el valor recuperado. El formulario RecuperarFolio debe implementar lo siguiente:

    public partial class frmRecuperarFolio : Form
        {
            public frmRecuperarFolio()
            {
                InitializeComponent();
            }
    
            public string NumeroFolio { get; set; }        
    
            private void btnAceptar_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.OK;
    	    NumeroFolio = txtNumeroFolio.Text;	
            }
    
            private void Cancelar_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.Cancel;
            }
        }

    En el formulario RecuperarFolio nota que la propiedad NumeroFolio se carga con el valor de la caja de texto, ese valor es que obtiene el método CargarListView() que mencione en el bloque de código anterior. Y bueno, el método CargarListView() tendrá la siguiente forma:

    public void CargarListView(string NumeroFolio)
    {
    	using (SqlConnection cn = new SqlConnection("<Colocar cadena de conexión>")
                {
                    string consultaSql = "SELECT Campo1, Campo2, Campo3 FROM MiTabla WHERE (NumeroFolio = @NumeroFolio)";
    
                    SqlCommand cmd = new SqlCommand(consultaSql, cn);
    
                    cmd.Parameters.AddWithValue("@NumeroFolio", NumeroFolio)
    
                    cn.Open();
    
                    SqlDataReader dr = cmd.ExecuteReader();
    
                    while (dr.Read())
                    {
                        string[] fila = new string[] { dr.GetInt32(0).ToString(), dr.GetString(1), dr.GetInt32(2).ToString() };
    
                        ListViewItem item = new ListViewItem(fila);
    
                        ListView1.Items.Add(item);
                    }
                }
    }

    Te recomiendo que revises el código y depures en caso haya algún error de sintaxis, no tengo como validar el código.

    • Marcado como respuesta José De Alva miércoles, 13 de julio de 2016 17:36
    viernes, 8 de julio de 2016 0:08

Todas las respuestas

  • Hola Utsukushi1,

    Primero, cambia la propiedad Modifiers de tu ListView1 a Public, para poder acceder desde el formulario frmbrecuperarfolio.

    Luego, solo te queda hacer la consulta en el evento click del botón.

     private void btnAceptar_Click(object sender, EventArgs e)
            {
                try
                {
                    using (SqlConnection con = new SqlConnection(
                                    ConfigurationManager.AppSettings.Get("cadenaconexion")))
                    {
                        con.Open();
                        string sql = @"SELECT numero, primera, D1, segunda, D2,
                                       tercera, D3, id_cliente from ventas where folio = @folio";
    
                        SqlCommand cmd = new SqlCommand(sql, con);
                        cmd.Parameters.AddWithValue("@folio", txtfolioboleto.Text);
    
                        SqlDataReader lector = cmd.ExecuteReader();
    
                        //Obtengo la instancia actual del frmventa
                        frmventa fve = Application.OpenForms.OfType<frmventa>().SingleOrDefault();
    
                        if (lector.HasRows)
                        {
                            while (lector.Read())
                            {
                                //Si no es nulo (es porque encontró)
                                if(fve != null)
                                {
                                    ListViewItem item = new ListViewItem(lector["numero"].ToString());
                                    item.SubItems.Add(lector["primera"].ToString());
                                    item.SubItems.Add(lector["D1"].ToString());
                                    item.SubItems.Add(lector["segunda"].ToString());
                                    item.SubItems.Add(lector["D2"].ToString());
                                    item.SubItems.Add(lector["tercera"].ToString());
                                    item.SubItems.Add(lector["D3"].ToString());
                                    item.SubItems.Add(lector["id_cliente"].ToString());
    
                                    fve.listView1.Items.Add(item);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    Me olvidaba, agregar el using para no tener problemas.

    using System.Linq;

    Prueba haciendo esto, y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    viernes, 8 de julio de 2016 0:04
  • Utsukushi1,

    Es claro que el formulario Ventas debe obtener el valor que el usuario ingresa en el formulario RecuperarFolio. Una forma de obtener el valor del formulario hijo es la siguiente:

    private void btnRecuperarNumero_Click(object sender, EventArgs e)
            {
                frmRecuperarFolio frmHijo = new frmRecuperarFolio();
    
                if (frmHijo.ShowDialog() == DialogResult.OK)
                {
                    CargarListView(frmHijo.NumeroFolio) 
                }
            }

    Nota que posterior a cargar el formulario RecuperarFolio (de manera modal) el flujo del programa espera a que la ventana de dialogo se cierre, si la ventana se cierra tras presionar el botón [Aceptar] se ejecutará el método CargarListView() con el valor recuperado. El formulario RecuperarFolio debe implementar lo siguiente:

    public partial class frmRecuperarFolio : Form
        {
            public frmRecuperarFolio()
            {
                InitializeComponent();
            }
    
            public string NumeroFolio { get; set; }        
    
            private void btnAceptar_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.OK;
    	    NumeroFolio = txtNumeroFolio.Text;	
            }
    
            private void Cancelar_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.Cancel;
            }
        }

    En el formulario RecuperarFolio nota que la propiedad NumeroFolio se carga con el valor de la caja de texto, ese valor es que obtiene el método CargarListView() que mencione en el bloque de código anterior. Y bueno, el método CargarListView() tendrá la siguiente forma:

    public void CargarListView(string NumeroFolio)
    {
    	using (SqlConnection cn = new SqlConnection("<Colocar cadena de conexión>")
                {
                    string consultaSql = "SELECT Campo1, Campo2, Campo3 FROM MiTabla WHERE (NumeroFolio = @NumeroFolio)";
    
                    SqlCommand cmd = new SqlCommand(consultaSql, cn);
    
                    cmd.Parameters.AddWithValue("@NumeroFolio", NumeroFolio)
    
                    cn.Open();
    
                    SqlDataReader dr = cmd.ExecuteReader();
    
                    while (dr.Read())
                    {
                        string[] fila = new string[] { dr.GetInt32(0).ToString(), dr.GetString(1), dr.GetInt32(2).ToString() };
    
                        ListViewItem item = new ListViewItem(fila);
    
                        ListView1.Items.Add(item);
                    }
                }
    }

    Te recomiendo que revises el código y depures en caso haya algún error de sintaxis, no tengo como validar el código.

    • Marcado como respuesta José De Alva miércoles, 13 de julio de 2016 17:36
    viernes, 8 de julio de 2016 0:08
  • Muchas gracias, funciona perfectamente :)
    viernes, 8 de julio de 2016 17:58