none
ListView - Como adicionar conteúdo em uma coluna específica? RRS feed

  • Pergunta

  • Olá a todos, estou desenvolvendo um programa para renomear arquivos, e a parte onde estou tendo problemas é a que eu tenho que adicionar conteúdo em colunas específicas do controle ListView.

    Na primeira parte está tudo funcionando corretamente; eu disponibilizo ao usuário um FolderBrowserDialog para escolher a pasta com os arquivos, em seguida eu adiciono o nome dos arquivos na primeira coluna do controle. Mas depois eu preciso adicionar a extensão do arquivo na 2ª coluna do ListView, e é isto que eu não estou conseguindo fazer.

    Então, alguém sabe como eu faço para adicionar conteúdo as outras colunas do controle?

    (Meu código:)

    private void btn_SelectFolder_Click(object sender, EventArgs e)
    {
        if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
        {
            ListFiles(folderBrowserDialog.SelectedPath);
        }
    }
    
    private void ListFiles(string path)
    {
        string[] files = Directory.GetFiles(path, "*");
    
        foreach (string item in files)
        {
            AddFileName(item);
            // AGORA EU TERIA QUE CHAMAR O MÉTODO
            // QUE ADICIONA A EXTENSÃO DO ARQUIVO
            // NA SEGUNDA COLUNA DO ListView
        }
    }
    
    private void AddFileName(string file)
    {
        FileInfo fileName = new FileInfo(file);
    
        ltv_Files.Items.Add(fileName.Name);
    }

     

    domingo, 2 de outubro de 2016 15:26

Respostas

  • Quando voce for criar o ListViewItem, instancie e passe como parametro o array de informações nas posições que voce precisa, algo parecido como:

     this.listView1.Items.Add(new ListViewItem(new[] {"NOME","EXTENSAO","TAMAMNHO","LOCAL"}));

    Obs: conforme o codigo que te passei, essas strings posicionadas no array, vão ser gerada de acordo com for() quando ele estiver sendo executado. MANTENHA essas posições do array IGUAL ÀS colunas que voce criou coluna 0(NOME), coluna 1(EXTENSAO), coluna 2(TAMANHO) e coluna 3(LOCAL)

    as funções que voce obtem o nome dos arquivos, tamanho, extensão e local devem ser colocadas igual o codigo:

       for (int i = 0; i <= arquivos.Length - 1; i++)
                {
                    this.listView1.Items.Add(new ListViewItem(new[] {System.IO.Path.GetFileNameWithoutExtension(arquivos[i]),System.IO.Path.GetExtension(arquivos[i])}));
                }

    Claro que esse é apenas uma amostra, voce deve adapta-lo.



    Eduardo Bicudo Junior





    • Editado Eduardo xUni segunda-feira, 3 de outubro de 2016 15:06
    • Marcado como Resposta Cliffinho segunda-feira, 3 de outubro de 2016 15:11
    segunda-feira, 3 de outubro de 2016 14:46

Todas as Respostas

  • Utilize o metodo GetFileNameWithoutExtension() e o GetExtension() do namespace System.IO, com o for voce vai adicionando os itens um a um no ListView acoplado à uma classe ListViewItem que recebe como parametro um array que corresponde às posições das colunas do controle ListView, adapte isso:

     private string[] arquivos = { "explorer.exe", "regedit.exe", "wininit.exe" };
    
            public Form1()
            {
                InitializeComponent();
    
                this.listView1.View = System.Windows.Forms.View.Details;
    
                this.listView1.Columns.Add("Nome do arquivo", 200, System.Windows.Forms.HorizontalAlignment.Left);
                this.listView1.Columns.Add("Extensao", 200, System.Windows.Forms.HorizontalAlignment.Left);
                
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i <= arquivos.Length - 1; i++)
                {
                    this.listView1.Items.Add(new ListViewItem(new[] {System.IO.Path.GetFileNameWithoutExtension(arquivos[i]),System.IO.Path.GetExtension(arquivos[i])}));
                }
            }



    Eduardo Bicudo Junior


    domingo, 2 de outubro de 2016 17:28
  • Certo Eduardo, mas no meu caso, eu já criei todas as colunas em tempo de desing, eu só quero adicionar o conteúdo nelas em tempo de execução.

    O que eu tenho no momento:

    Como eu disse, em relação ao comportamento da aplicação já está tudo ok, planejei e já fiz testes com outros controles. O problema mesmo é colocar a informação na coluna certa...

    segunda-feira, 3 de outubro de 2016 13:57
  • Quando voce for criar o ListViewItem, instancie e passe como parametro o array de informações nas posições que voce precisa, algo parecido como:

     this.listView1.Items.Add(new ListViewItem(new[] {"NOME","EXTENSAO","TAMAMNHO","LOCAL"}));

    Obs: conforme o codigo que te passei, essas strings posicionadas no array, vão ser gerada de acordo com for() quando ele estiver sendo executado. MANTENHA essas posições do array IGUAL ÀS colunas que voce criou coluna 0(NOME), coluna 1(EXTENSAO), coluna 2(TAMANHO) e coluna 3(LOCAL)

    as funções que voce obtem o nome dos arquivos, tamanho, extensão e local devem ser colocadas igual o codigo:

       for (int i = 0; i <= arquivos.Length - 1; i++)
                {
                    this.listView1.Items.Add(new ListViewItem(new[] {System.IO.Path.GetFileNameWithoutExtension(arquivos[i]),System.IO.Path.GetExtension(arquivos[i])}));
                }

    Claro que esse é apenas uma amostra, voce deve adapta-lo.



    Eduardo Bicudo Junior





    • Editado Eduardo xUni segunda-feira, 3 de outubro de 2016 15:06
    • Marcado como Resposta Cliffinho segunda-feira, 3 de outubro de 2016 15:11
    segunda-feira, 3 de outubro de 2016 14:46
  • Valeu Eduardo, ficou do jeito que eu precisava!!

    Agora é só fazer algumas adaptações e vai ficar no jeito :)

    Valeu!

    segunda-feira, 3 de outubro de 2016 15:19
  • Disponha! :)

    Eduardo Bicudo Junior

    segunda-feira, 3 de outubro de 2016 17:01