Inquiridor
Colocar somente nome do arquivo no DataGridView?

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
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
- Sugerido como Resposta Alexandre Rapaki sexta-feira, 26 de julho de 2013 14:22
- Editado Alexandre Rapaki sexta-feira, 26 de julho de 2013 14:27 edit
-
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[]'.
-
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
-
-
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!
-
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
-
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
- Editado Alexandre Rapaki segunda-feira, 29 de julho de 2013 12:20 edit
-
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.