Jump to content
joaocarlos07

Adicionar items listview de BD

Recommended Posts

joaocarlos07

Boa noite na minha aplicação gostava de poder adicionar items da BD a minha listview , a listview tem 3 colunas (#,descrição, preço)

fiz o seguinte codigo mas da um erro

//abre ligacao
            liga.Open();
            //pesquisa na BD 
            SqlCeCommand cmd = new SqlCeCommand("SELECT nome FROM vendas ", liga);
            SqlCeDataReader dr = cmd.ExecuteReader();
            //percorre o sqldatareader para obter os dados
            while (dr.Read())
            {
                listView1.Items.Add(dr["nome"],descricao);
                



            }
            liga.Close();

O erro é : " No overload for method 'Add' takes '2' arguments "

Se alguém me poder ajuda , um muito obrigado


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
nl_fonseca

Boas,

tens que por assim...

listView1.Items.Add(dr["nome"].Tostring());

pois tens que tratar o metodo add como uma string

mas se quiseres por os atributos todos tens que por assim:

            SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM vendas ", liga); //para seleccionar os atributos da tabela toda

                listView1.Items.Add(dr["nome"]. Tostring() + dr["descricao"]. Tostring());

:)

Share this post


Link to post
Share on other sites
joaocarlos07

Boa noite ja tinha feito o codigo e ja me funciona , deixo aqui o codigo, so que agora eu fiz a mesma coisa para me aparecer o preço so que em vez de me aparecer na segunda coluna eu queria que aparecesse na terceira alguem sabe como por na terceira ? o codigo que fiz aparece-me tudo na segunda :

  //ligacao ao SQL

        static string oi = "Data Source=SDMMC Storage Card/SQL/geral.sdf; Password = 123456 ";
        SqlCeConnection liga = new SqlCeConnection(oi);

        private void caixaregistadora_Load(object sender, EventArgs e)
        {
            //abre ligacao
            liga.Open();
            //pesquisa na BD 
            SqlCeCommand cmd = new SqlCeCommand("SELECT nome FROM vendas ", liga);
            SqlCeDataReader dr = cmd.ExecuteReader();
            //percorre o sqldatareader para obter os dados
             
            while (dr.Read())
            {
                label3.Text = Convert.ToString(dr["nome"]);
                //ler nome
               ListViewItem item = new ListViewItem();
               // item.Text = Convert.ToString((dr["nome"]));
                item.SubItems.Add(Convert.ToString(dr["nome"]));
                listView1.Items.Add(item);
            }

            //select para determinar preço do produto 
            SqlCeCommand cmd2 = new SqlCeCommand(" SELECT preco FROM produtos WHERE nome = '" + label3.Text  + "' ", liga);
            SqlCeDataReader dr2 = cmd2.ExecuteReader();
            //ler os dados 
            while (dr2.Read())
            {
                ListViewItem item2 = new ListViewItem();
                item2.SubItems.Add(Convert.ToString(dr2["preco"]));
                
                listView1.Items.Add(item2);
            }


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
joaocarlos07

Fiz o seguinte codigo e acho que ja vai dar cada campo vai aparecer na sua coluna e na mesma linha , so vou poder testar logo a noite mas fica aqui o codigo

 //abre ligacao
            liga.Open();
            //pesquisa na BD 
            SqlCeCommand cmd = new SqlCeCommand("SELECT nome FROM vendas ", liga);
            SqlCeDataReader dr = cmd.ExecuteReader();

            //Cirar um array de 3 colunas 
            string[] lista = new string[3];

            //percorre o sqldatareader para obter os dados
            while (dr.Read())
            {
                //Coluna da quantidade 
                lista[0] = "1";
                //aparecer nome do produto na label
                label3.Text = Convert.ToString(dr["nome"]);
                //coluna descricao
                lista[1] = Convert.ToString(dr["nome"]);
  
            }

            //select para determinar preço do produto 
            SqlCeCommand cmd2 = new SqlCeCommand(" SELECT preco FROM produtos WHERE nome = '" + label3.Text  + "' ", liga);
            SqlCeDataReader dr2 = cmd2.ExecuteReader();
            //ler os dados 
            while (dr2.Read())
            {
                //preco do produto
                lista[2] = Convert.ToString(dr2["preco"]);
        
            }
            //adicionar os dados a listview
            ListViewItem lvi = new ListViewItem(lista);
            listView1.Items.Add(lvi);

            liga.Close();

          

        } 


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
nando4

Boas eu também estou a tentar usar um listview para apresentar os produtos que tenho na bd mas da erro na parte em que percorro o SqlDataReader para obter os dados da bd. Aqui vai o código que estou a usar:

//ligacao a BD
            string ligacao_str = "server=Armando-PC" + @"\" + "SQLEXPRESS;Database=teste;User Id=sa;Password=123456";
            SqlConnection liga = new SqlConnection(ligacao_str);

            liga.Open();

            string[] lista = new string[4];

            SqlCommand cmd = new SqlCommand("SELECT * FROM productos", liga);
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                lista[1] = dr["id_produto"].ToString();

                lista[2] = dr["nome"].ToString();

                lista[3] = dr["preco_compra"].ToString();

                lista[4] = dr["preco_venda"].ToString();
            }

            ListViewItem lvi = new ListViewItem(lista);
            listView1.Items.Add(lvi);

            liga.Close();

Eu penso que o erro seja por eu estar a usar um array para guardar varias strings numa so posição do array (por exemplo numa posição guardo varios nomes).

Se alguem poder ajudar agradeço

Cumps

Share this post


Link to post
Share on other sites
joaocarlos07

Ja resolvi o problema vou deixar aqui o codigo que fiz :

 
            //abre ligacao
            liga.Open();
            //pesquisa na BD 
            SqlCeCommand cmd = new SqlCeCommand("SELECT [nome],[preco] FROM [vendas] ", liga);
            SqlCeDataReader dr = cmd.ExecuteReader();

            //preenche o cabeçalho do listview com os nomes dos campos
            for (int i = 0; i < dr.FieldCount; i++)
            {
                ColumnHeader ch = new ColumnHeader();
                ch.Text = dr.GetName(i);
                listView1.Columns.Add(ch);

            }

            //define um item listview
            ListViewItem item; 

            //percorre o sqldatareader para obter os dados
            while (dr.Read())
            {
                item = new ListViewItem();
                item.Text = dr.GetValue(0).ToString();
                //preenche o listview com itens
                for (int i = 1; i < dr.FieldCount; i++)
                {
                    item.SubItems.Add(dr.GetValue(i).ToString());
                }
                listView1.Items.Add(item);

                //aparecer nome do produto na label
                label3.Text = Convert.ToString(dr["nome"]);
                        
            }

            liga.Close(); 


Um Abraço,João Carlos Pinto

Share this post


Link to post
Share on other sites
nando4

Continua a nao dar (pelo menos como eu quero) na coluna id preenche com os ids dos productos, ate aqui tudo bem, mas na coluna dos nomes volta a por os ids e na coluna preço de compra poe os nomes.

//ligacao a BD
            string ligacao_str = "server=Armando-PC" + @"\" + "SQLEXPRESS;Database=teste;User Id=sa;Password=123456";
            SqlConnection liga = new SqlConnection(ligacao_str);

            //abre ligacao
            liga.Open();
            //pesquisa na BD
            SqlCommand cmd = new SqlCommand("SELECT [id_producto],[nome],[preco_venda],[preco_compra] FROM [productos] ", liga);
            SqlDataReader dr = cmd.ExecuteReader();

            //preenche o cabeçalho do listview com os nomes dos campos
            for (int i = 0; i < dr.FieldCount; i++)
            {
                ColumnHeader ch = new ColumnHeader();
                ch.Text = dr.GetName(i);
                listView1.Columns.Add(ch);

            }

            //define um item listview
            ListViewItem item;

            //percorre o sqldatareader para obter os dados
            while (dr.Read())
            {
                item = new ListViewItem();
                item.Text = dr.GetValue(0).ToString();
                //preenche o listview com itens
                for (int i = 1; i < dr.FieldCount; i++)
                {
                    item.SubItems.Add(dr.GetValue(i).ToString());
                }
                listView1.Items.Add(item);

            }

            liga.Close(); 

As colunas que eu tenho n listview sao: id, nome, preço de compra e preço de venda

Cumps

Share this post


Link to post
Share on other sites
nando4

Já esta resolvido, esquecime de trocar o nome da função no form load porque criei uma nova.

Obrigado pela a ajuda

Cumps

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.