Array
(
)

Erro ao em ListView

Raniel Nogueira
   - 04 jul 2013

Oi pessoal, estou com um probleminha em um método para povoar um ListView:
#Código

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 : #Código
lsvClientes.Items.Add(objListViewItem);

Raniel Nogueira
   - 04 jul 2013

Encontrei o erro na hora de add os subitems:
#Código

                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

Raniel Nogueira
   - 04 jul 2013

Resolvi galera meu código ficou assim:

#Código

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);
            }
          
        }

Raniel Nogueira
   - 04 jul 2013

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:

#Código

 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 = #Código
public const string strSelect = "SELECT IdCliente,Nome,Endereco,Telefone,Sexo,Ativo,DataCadastro FROM clientes";


Minha classe clientes:
#Código
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:

#Código
 //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.

Joel Rodrigues
   - 06 jul 2013

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