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ódigolsvClientes.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ódigopublic 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?