Duda listview c#

SiKoPaTa

Perdonad mi desconocimiento, tengo el siguiente codigo:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using MySql.Data.MySqlClient;

namespace Bar
{
    public partial class frmBuscaProducto : Form
    {
        public frmBuscaProducto()
        
{ InitializeComponent(); } //Inicio del Listview lvProductos public class Mostrar { public int Consulta(string con, ListView Lista, string query) { MySqlConnection conexion; MySqlCommand comand; MySqlDataReader leer; ListViewItem lista; string[] strColumnas; object[] objColumnas; int nRegs = 0; int nColumnas = 0; int n = 0; try { conexion = new MySqlConnection(con); conexion.Open(); } catch (Exception ex) { MessageBox.Show(ex.Message); return nRegs; } try { comand = new MySqlCommand(query, conexion); leer = comand.ExecuteReader(); } catch (Exception ex) { MessageBox.Show(ex.Message); conexion.Close(); return nRegs; } nColumnas = leer.FieldCount; objColumnas = new object[leer.FieldCount]; Lista.Items.Clear(); Lista.FullRowSelect = true; Lista.View = View.Details; //colocar los nombres de columnas for (n = 0; n < nColumnas; n++) { Lista.Columns.Add(leer.GetName(n)); } //mostrar los datos if (leer.HasRows) { strColumnas = new string[nColumnas]; nRegs = 0; while (leer.Read()) { nRegs++; for (n = 0; n < nColumnas; n++) { if (!leer.IsDBNull(n)) { strColumnas[n] = leer.GetValue(n).ToString(); } } lista = new ListViewItem(strColumnas); Lista.Items.Insert(nRegs - 1, lista); } } //ajustar anchos de columnas /*for (n = 0; n < Lista.Columns.Count; n++) { Lista.Columns[n].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); } */ return nRegs; } } private void btnCargar_Click(object sender, EventArgs e) { string datos="server=127.0.0.1;uid=admin;pwd=administrador;database=bar"; string query = "SELECT nome, precio, cantidad FROM producto"; Mostrar obj = new Mostrar(); obj.Consulta(datos,lvProductos,query); } private void button1_Click(object sender, EventArgs e) { this.Close(); } } }

Lo que hace es una conexión con mi db y rellena las tablas con la informacion de nome, precio y cantidad.
El problema reside en que cada vez que hago click sobre el boton Cargar crea nuevas columnas con mas información y me gustaría que simplemente actualizase las columnas existentes de la primera consulta.

Muchas gracias.

Soltrac

Tu problema está aquí

Lista.Items.Clear();
Lista.FullRowSelect = true;
Lista.View = View.Details;

//colocar los nombres de columnas
for (n = 0; n < nColumnas; n++)
{
     Lista.Columns.Add(leer.GetName(n)); <------------
}

Cada vez que llamas a ese método estás añadiendo las columnas. Añade las columnas solo 1 vez.

SiKoPaTa

La solucion es hacerlo desde el load del frm

       private void frmBuscaProducto_Load(object sender, EventArgs e)

gracias.

4 meses después
J

probe este mismo bloque de codigo y no me dio ni un problema ni usando ese pequeño codigo en l load ni en el boton

JuAn4k4

Tienes dos listas : lista y Lista

yo tiraria de MVC en lugar de ASP

limpias los Items, pero no las columnas.

J

lo que puedes acer es colocar esto en el load:

         string datos="server=127.0.0.1;uid=admin;pwd=administrador;database=bar";
        string query = "SELECT nome, precio, cantidad FROM producto";
        Mostrar obj = new Mostrar();       
        obj.Consulta(datos,lvProductos,query);

y en el boton pon esto:

        lvProductos.Clear();
        string datos = "server=localhost;uid=root;pwd=jramos;database=sistema";
        string query = "SELECT * FROM productos";

        Mostrar obj = new Mostrar();

        obj.Consulta(datos, lvProductos, query);
J

o aslo asi:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

    string datos = "server=localhost;uid=root;pwd=jramos;database=sistema";
    string query = "SELECT * FROM productos";

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        Mostrar obj = new Mostrar();
        obj.Consulta(datos, listView1, query);
    }
    public class Mostrar
    {

    public int Consulta(string con, ListView Lista, string query)
        {

            MySqlConnection conexion;
            MySqlCommand comand;
            MySqlDataReader leer;
            ListViewItem lista;
            string[] strColumnas;
            object[] objColumnas;
            int nRegs = 0;
            int nColumnas = 0;
            int n = 0;

            try
            {
                conexion = new MySqlConnection(con);
                conexion.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

                return nRegs;
            }
            try
            {
                comand = new MySqlCommand(query, conexion);
                leer = comand.ExecuteReader();

            }
            catch (Exception ex)
            {


                MessageBox.Show(ex.Message);


                conexion.Close();
                return nRegs;
            }

            nColumnas = leer.FieldCount;
            objColumnas = new object[leer.FieldCount];

            Lista.Items.Clear();
            Lista.FullRowSelect = true;
            Lista.View = View.Details;

            //colocar los nombres de columnas
            for (n = 0; n < nColumnas; n++)
            {
                Lista.Columns.Add(leer.GetName(n));
            }


            //mostrar los datos
            if (leer.HasRows)
            {
                strColumnas = new string[nColumnas];
                nRegs = 0;

                while (leer.Read())
                {

                    nRegs++;
                    for (n = 0; n < nColumnas; n++)
                    {
                        if (!leer.IsDBNull(n))
                        {
                            strColumnas[n] = leer.GetValue(n).ToString();
                        }

                    }
                    //ajustar anchos de columnas
                    for (n = 0; n < Lista.Columns.Count; n++)
                    {

                        Lista.Columns[n].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);

                    }
                    

                    lista = new ListViewItem(strColumnas);
                    Lista.Items.Insert(nRegs - 1, lista);
                }

            }

            return nRegs;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {

        listView1.Clear();
       

        Mostrar obj = new Mostrar();

        obj.Consulta(datos, listView1, query);
        
    }
}

}

Usuarios habituales