none
Colocar somente nome do arquivo no DataGridView? RRS feed

  • Pergunta

  • Estou realizando uma pesquisa em uma pasta e colocando os arquivos em um DataGridView, porém no Datagrid ele coloca todas as informações do arquivo.

    Gostaria de saber como mostrar no DataGrid somente o nome do arquivo.

    Segue código da pesquisa

        Public Sub LoadDataGrid()

            Dim pasta As New DirectoryInfo("\\DI-WEBSRV\foccus\webresultado")
            Dim arquivos As FileInfo() = pasta.GetFiles(txtAT.Text & "*", SearchOption.AllDirectories)
            Me.DataGridView1.DataSource = arquivos

        End Sub

    

    sexta-feira, 26 de julho de 2013 14:09

Todas as Respostas

  • Bom dia Gilmario,

    Você pode usar LINQ para filtrar e retornar apenas o nome dos teus arquivos.

    Ficaria da seguinte forma:

            Dim pasta As New DirectoryInfo("\\DI-WEBSRV\foccus\webresultado")
    
            Dim arquivos = From arq In pasta.GetFiles(txtAT.Text & "*", SearchOption.AllDirectories) Select arq.Name
    
            Me.DataGridView1.DataSource = arquivos

    Dessa forma você pode trazer qualquer propriedade que esteja disponível no objeto FileInfo do teu arquivo. :)

    Se a resposta for útil, não esqueça de marcar como resposta ;)

    Abraço


    sexta-feira, 26 de julho de 2013 14:22
  • Após colocar o código informado aconteceu o seguinte erro

    System.InvalidCastException was unhandled
      HResult=-2147467262
      Message=Não é possível converter um objeto do tipo 'WhereSelectArrayIterator`2[System.IO.FileInfo,System.String]' no tipo 'System.IO.FileInfo[]'.
      Source=PesquisaLaudoWeb
      StackTrace:
           em PesquisaLaudoWeb.Form1.LoadDataGrid() na C:\Users\Junior\Documents\Arquivos\Drive\Google Drive\Trabalho\Digimagem\Projetos\Sistemas\PesquisaLaudoWeb\PesquisaLaudoWeb\Form1.vb:linha 17
           em PesquisaLaudoWeb.Form1.btnProcurar_Click(Object sender, EventArgs e) na C:\Users\Junior\Documents\Arquivos\Drive\Google Drive\Trabalho\Digimagem\Projetos\Sistemas\PesquisaLaudoWeb\PesquisaLaudoWeb\Form1.vb:linha 38
           em System.Windows.Forms.Control.OnClick(EventArgs e)
           em System.Windows.Forms.Button.OnClick(EventArgs e)
           em System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           em System.Windows.Forms.Control.WndProc(Message& m)
           em System.Windows.Forms.ButtonBase.WndProc(Message& m)
           em System.Windows.Forms.Button.WndProc(Message& m)
           em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
           em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           em System.Windows.Forms.Application.Run(ApplicationContext context)
           em Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
           em Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
           em Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
           em PesquisaLaudoWeb.My.MyApplication.Main(String[] Args) na 17d14f5c-a337-4978-8281-53493378c1071.vb:linha 81
           em System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
           em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
           em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
           em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           em System.Threading.ThreadHelper.ThreadStart()
      InnerException: 

    Segue o erro direto na tela

    Não é possível converter um objeto do tipo 'WhereSelectArrayIterator`2[System.IO.FileInfo,System.String]' no tipo 'System.IO.FileInfo[]'.

    sexta-feira, 26 de julho de 2013 14:48
  • Como ficou seu código? 

    Esse erro acontece porque o retorno da sua consulta LINQ não é do tipo FileInfo, esse erro acontece quando você executa dessa forma:

    Dim arquivos As FileInfo() = From arq In pasta.GetFiles("*.txt", SearchOption.AllDirectories) Select arq.Name

    Para que o erro não aconteça, use desta forma (sem o As FileInfo()):

    Dim arquivos = From arq In pasta.GetFiles("*.txt", SearchOption.AllDirectories) Select arq.Name

    Assim, a sua variável arquivos vai assumir o tipo do retorno da sua consulta. 

    Se a resposta for útil, não esqueça de marcar como resposta ;)

    Abraço

    sexta-feira, 26 de julho de 2013 15:00
  • Alexandre Obrigado pelo apoio,

    Porém agora estou com outro problema;

    Deste modo o sistema não me traz nenhum registro.

    O que pode ser?

    Abraço

    sexta-feira, 26 de julho de 2013 15:10
  • Gilmario, desculpe, no último exemplo que postei acabei esquecendo de colocar o seu filtro original.. pode ser por isso que não está retornando registro.

    Com o filtro, fica assim:

            Dim pasta As New DirectoryInfo("\\DI-WEBSRV\foccus\webresultado")
    
            Dim arquivos = From arq In pasta.GetFiles(txtAT.Text & "*", SearchOption.AllDirectories) Select arq.Name
    
            Me.DataGridView1.DataSource = arquivos

    Abraço! 

    sexta-feira, 26 de julho de 2013 16:17
  • Realizei algumas modificações mas está bem parecido com o seu acima.

    Porém continua não trazendo registros.

    Estou enviando o código com o modo antigo em comentário.

    Public Sub LoadDataGrid()
            If cboAno.Text = "2013" Then
                localizacao = "\\DI-WEBSRV\foccus\webresultado"
            ElseIf cboAno.Text = "2012" Then
                localizacao = "\\DI-WEBSRV\foccus\webresultado\2012"
            ElseIf cboAno.Text = "2011" Then
                localizacao = "\\DI-WEBSRV\foccus\webresultado\2011"
            End If
    
            Dim pasta As New DirectoryInfo(localizacao)
            'Dim arquivos As FileInfo() = pasta.GetFiles("*" & txtAT.Text & "*", SearchOption.TopDirectoryOnly)
            Dim arquivos = From arq In pasta.GetFiles("*" & txtAT.Text & "*", SearchOption.TopDirectoryOnly) Select arq.Name
            Me.dgvBusca.DataSource = arquivos
    
        End Sub

    Segue imagem de como fica quando faço do modo antigo

    

    sexta-feira, 26 de julho de 2013 17:34
  • Bom dia Gilmaro,

    Pode ser algo relacionado com o seu filtro. Por exemplo, reparei que no primeiro exemplo que você postou está usando SearchOption.AllDirectories e no último exemplo está usando SearchOption.TopDirectoryOnly.

    Usando SearchOption.AllDirectories você pesquisa na pasta selecionada e em todas pastas que estão dentro da pasta que você selecionou enquanto na opção SearchOption.TopDirectoryOnly você pesquisa apenas na pasta selecionada.

    Abraço


    segunda-feira, 29 de julho de 2013 12:18
  • Boa Tarde Alexandre,

    Desculpa a demora.

    Estava resolvendo alguns outros problemas.

    Voltando ao assunto.

    Utilizo o mesmo filtro só modifico o código.

    Com o código onde puxa tudo funciona corretamente.

    Quando coloco o código para buscar somente o nome a pesquisa fica em branco não aparece nem o cabeçalho.

    Ainda estou procurando um meio de fazer esta solução.

    quinta-feira, 1 de agosto de 2013 19:06