Erro ao em ListView

04/07/2013

0

Oi pessoal, estou com um probleminha em um método para povoar um ListView:

private void CarregaListView()
        {
            Dados objDados = new Dados();

            List<CrudBasico.Dados.Clientes> listaClientes = new List<Dados.Clientes>();
            listaClientes = objDados.Consultar();
            ListViewItem objListViewItem = new ListViewItem();
            
            foreach (var itemLista in listaClientes)
            {
                objListViewItem.Text = itemLista.IdCliente.ToString();
                objListViewItem.Text = itemLista.Nome;
                objListViewItem.Text = itemLista.Endereco;
                objListViewItem.Text = itemLista.Telefone;
                objListViewItem.Text = itemLista.Sexo;

                if (itemLista.Ativo)
                    objListViewItem.SubItems.Add("Sim");
                else
                    objListViewItem.SubItems.Add("Não");

                objListViewItem.SubItems.Add(itemLista.DataCadastro.ToShortTimeString());
                lsvClientes.Items.Add(objListViewItem);
            }


O erro que ele retorna = "Cannot add or insert the item 'F' in more than one place. You must first remove it from its current location or clone it.
Parameter name: item";

Acontece na penultima linha :
lsvClientes.Items.Add(objListViewItem);
Raniel Gomes

Raniel Gomes

Responder

Posts

04/07/2013

Raniel Gomes

Encontrei o erro na hora de add os subitems:
                objListViewItem.Text = Convert.ToString(itemLista.IdCliente);
                objListViewItem.SubItems.Add(itemLista.Nome);
                objListViewItem.SubItems.Add(itemLista.Endereco);
                objListViewItem.SubItems.Add(itemLista.Telefone);
                objListViewItem.SubItems.Add(itemLista.Sexo);

                if (itemLista.Ativo)
                    objListViewItem.SubItems.Add("Sim");
                else
                    objListViewItem.SubItems.Add("Não");

                objListViewItem.SubItems.Add(itemLista.DataCadastro.ToShortTimeString());
                lsvClientes.Items.Add(objListViewItem);


Mais agora dá outro erro: Cannot add or insert the item '16' in more than one place. You must first remove it from its current location or clone it.
Parameter name: item
Responder

04/07/2013

Raniel Gomes

Resolvi galera meu código ficou assim:

private void CarregaListView()
        {
            Dados objDados = new Dados();

            List<CrudBasico.Dados.Clientes> listaClientes = new List<Dados.Clientes>();
            listaClientes = objDados.Consultar();
            ListViewItem objListViewItem = new ListViewItem();
            
            foreach (var itemLista in listaClientes)
            {
                objListViewItem.Text = itemLista.IdCliente.ToString();
                objListViewItem.SubItems.Add(itemLista.Nome);
                objListViewItem.SubItems.Add(itemLista.Endereco);
                objListViewItem.SubItems.Add(itemLista.Telefone);
                objListViewItem.SubItems.Add(itemLista.Sexo);

                if (itemLista.Ativo)
                    objListViewItem.SubItems.Add("Sim");
                else
                    objListViewItem.SubItems.Add("Não");

                objListViewItem.SubItems.Add(itemLista.DataCadastro.ToShortDateString());
                lsvClientes.Items.Add(objListViewItem);
            }
          
        }
Responder

04/07/2013

Raniel Gomes

Olá galera meu erro volto, quando eu tenho apenas um campo passa blz mais quando eu add outro ai surge o pro:

Minha Classe de dados

Aqui segue o código do meu método e sua chamada no Formload:

 private void Consulta02_Load(object sender, EventArgs e)
        {
            CarregaListView();
        }

        private void CarregaListView()
        {
            Dados objDados = new Dados();

            List<CrudBasico.Dados.Clientes> listaClientes = new List<Dados.Clientes>();
            listaClientes = objDados.Consultar();
            ListViewItem objListViewItem = new ListViewItem();
            
            foreach (var itemLista in listaClientes)
            {
                objListViewItem.Text = itemLista.IdCliente.ToString();
                objListViewItem.SubItems.Add(itemLista.Nome);
                objListViewItem.SubItems.Add(itemLista.Endereco);
                objListViewItem.SubItems.Add(itemLista.Telefone);
                objListViewItem.SubItems.Add(itemLista.Sexo);

                if (itemLista.Ativo)
                    objListViewItem.SubItems.Add("Sim");
                else
                    objListViewItem.SubItems.Add("Não");

                objListViewItem.SubItems.Add(itemLista.DataCadastro.ToShortDateString());
                try
                {
                    lsvClientes.Items.Add(objListViewItem);
                }
                catch(Exception e)
                {
                    MessageBox.Show("Houve um erro "+e.Message);
                }
                }


Fonte dá minha classe Dados:

string de consulta =
public const string strSelect = "SELECT IdCliente,Nome,Endereco,Telefone,Sexo,Ativo,DataCadastro FROM clientes";


Minha classe clientes:
public class Clientes
        {
            public int IdCliente { get; set; }
            public string Nome { get; set; }
            public string Endereco { get; set; }
            public string Telefone { get; set; }
            public string Sexo { get; set; }
            public bool Ativo { get; set; }
            public DateTime DataCadastro { get; set; }
        }


Por fim meu código para povoar Listiview:

 //Listar dados em um GridView
        public List<Clientes> Consultar()
            {
                List<Clientes> lstClientes = new List<Clientes>();
                
             using (MySqlConnection objConexao = new MySqlConnection (strConexao))
              {
                using (MySqlCommand objCommand = new MySqlCommand(strSelect, objConexao))
                {
                    objConexao.Open();

                    MySqlDataReader objDataReader = objCommand.ExecuteReader();

                    if (objDataReader.HasRows)
                    {
                        while (objDataReader.Read())
                        {
                            Clientes objCliente = new Clientes();

                            objCliente.IdCliente = Convert.ToInt32(objDataReader["IdCliente"].ToString());
                            objCliente.Nome = objDataReader["Nome"].ToString();
                            objCliente.Endereco = objDataReader["Endereco"].ToString();
                            objCliente.Telefone = objDataReader["Telefone"].ToString();
                            objCliente.Sexo = objDataReader["Sexo"].ToString();

                            if (objDataReader["Ativo"].ToString().Equals("0"))
                                objCliente.Ativo = false;
                            else
                                objCliente.Ativo = true;

                            objCliente.DataCadastro = Convert.ToDateTime(objDataReader["DataCadastro"].ToString());
                            lstClientes.Add(objCliente); 
                        }
                        objDataReader.Close();
                    }

                    objConexao.Close();
                }
             }
                return lstClientes;
            }


O erro que retorna é o seguinte: Cannot add or insert the item '22' in more than one place. You must first remove it from its current location or clone it.
Parameter name: item

Obs: Sempre mostra o ultimo campo e só isso.
Responder

06/07/2013

Joel Rodrigues

Este problema foi sanado em outro tópico, certo?
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar