[Dúvida] ListView trabalhando com Objetos (C#)

8 respostas
N

Olá, galerinha do fórum!

Tudo beleza?

Estou eu fazendo uma aplicação em C#, e gostaria de usar uma List View…

O único problema é que não estou conseguindo trabalhar diretamente com Objetos.

Vamos a um exemplo:

Minha ListView tem duas colunas, uma coluna chamada “Nome” e outra chamada “Descrição”.

Para preenchê-la, faço da seguinte forma, atualmente:

private void PreencherListView(List<Talento> talentos) {

         ListViewItem item;

         foreach (Talento talento in talentos) {

            item = new ListViewItem(talento.Nome);
            item.SubItems.Add(talento.Descricao);

            talentosListView.Items.Add(item);
         }
         
      }

Há algum modo de eu trabalhar diretamente com os objetos, “jogando-os” na ListView e ela fazer o controle de divisão (digo, colocar o nome na primeira coluna e a descrição na segunda coluna, para cada objeto)?

Fico no aguardo!

Abraços!!

8 Respostas

V

Já tentou associa-la a um ObjectDataSource?

Geralmente, basta criar um método que faz o get de uma lista da classe que deseja exibir numa classe qualquer, e associar o ObjectDataSource do ListView a esse método. As demais configurações você pode fazer visualmente.

Caso esse método não seja estático, você também terá que sobrescrever o evento objectCreating do datasource, para indicar a ele sobre qual instância ele deve trabalhar. Por exemplo:

protected void dsTalentos_ObjectCreating(object sender, ObjectDataSourceEventArgs e) { //Indica que o método que obtém a lista deve ser chamado no objeto grupoTalentos e.ObjectInstance = grupoTalentos; }

N

Ainda não entendi muito bem, Vini…

Poderia dar um exemplo de uso do ObjectDataSource?

Não entendi como o ListView reconhecerá que, na coluna 1, ele deverá colocar valores referentes ao campo Nome do objeto, e na coluna 2, colocar valores referentes ao campo Descrição do objeto, sacou?!

[]s

A

Acho que é isso que vc quer

ListView listView1 = new ListView();

    // Set the view to show details.
    listView1.View = View.Details;
    // Allow the user to edit item text.
    listView1.LabelEdit = true;
    // Allow the user to rearrange columns.
    listView1.AllowColumnReorder = true;
    // Display check boxes.
    listView1.CheckBoxes = true;
    // Select the item and subitems when selection is made.
    listView1.FullRowSelect = true;
    // Display grid lines.
    listView1.GridLines = true;
    // Sort the items in the list in ascending order.
    listView1.Sorting = SortOrder.Ascending;
                
    // Create three items and three sets of subitems for each item.
    ListViewItem item1 = new ListViewItem("item1",0);
    // Place a check mark next to the item.
    item1.Checked = true;
    item1.SubItems.Add("1");
    item1.SubItems.Add("2");
    item1.SubItems.Add("3");
    ListViewItem item2 = new ListViewItem("item2",1);
    item2.SubItems.Add("4");
    item2.SubItems.Add("5");
    item2.SubItems.Add("6");
    ListViewItem item3 = new ListViewItem("item3",0);
    // Place a check mark next to the item.
    item3.Checked = true;
    item3.SubItems.Add("7");
    item3.SubItems.Add("8");
    item3.SubItems.Add("9");
N

@Ovelha

Na verdade, não é bem isso…
Isso eu consegui fazer…

foreach (Talento talento in talentos) {

    item = new ListViewItem(talento.Nome);
    item.SubItems.Add(talento.Descricao);

    talentosListView.Items.Add(item);
}

Aqui, estou “desmembrando” o meu objeto talento, colocando campo por campo no ListViewItem, e adicionando este último na minha ListView. Isso dá certo.

O problema é que, quando eu for requisitar esse objeto da ListView, ele vem desmembrado, necessitando que eu construa o objeto todo novamente…

Eu quero algo como:

talentosListView.Add(talento);

E que, com isso, ele reconheça na ListView que, na coluna 1, vai aparecer o talento.Nome; na coluna 2, o talento.Descricao, e assim por diante.

E que, na hora de requisitar um objeto da ListView, ele já venha montado.

Entendeu o que eu quero?

Outra coisa: tem como colocar coluna invisível no ListView? Não achei como…

[]s

V

Comece criando um método que obtenha a lista do seu objeto. Depois, adicione um ObjectDataSource no seu form, vincule-o a ListView.
E aí, siga os passos que ele indicar para você. Acredite, é mais fácil do que vc imagina. E não precisa de uma linha de código sequer.

N

@Vini

Pois é… Parece que esse ObjectDataSource é para quando estamos usando ASP.Net, correto?

Com meu projeto Windows Form não consegui vizualizar este objeto…
Tem outro objeto parecido ou há uma maneira de instalar um componente para ter acesso a ele com Windows Form??

[]s

V

Tem razão, como vc não falou, assumi erroneamente se tratar de uma aplicação web, com asp.net e C#.

N

@Vini

Desculpe pela falta de atenção…

Em Win Forms, há como fazer algo parecido?

Criado 27 de janeiro de 2010
Ultima resposta 28 de jan. de 2010
Respostas 8
Participantes 3