PROBLEMAS COM LISTINDEX DO LISTBOX
Tenho um rotina que gera arquivos de acordo com parametros informados.
Criei um Listbox e carreguei com um diretorio dos arquivos gerados,
ate ai tudo bem, ocorre que quando seleciono um item e clico no botão para baixar este arquivo, o listindex não reconhece o item selecionado ou se atribui um valor ao index , ele nao muda.
[ô]função para baixar o arquivo selecionado (botão)
Protected Sub btnBaixar_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBaixar.Click
If lsbArquivos.SelectedIndex <> -1 Then
Dim pasta As New System.IO.DirectoryInfo(mydocpath)
Dim arquivo As New FileInfo(pasta.FullName + [Ô]\[Ô] + lsbArquivos.SelectedValue)
[ô]Limpa o conteúdo de saÃda atual do buffer
Response.Clear()
[ô]Adiciona um cabeçalho que especifica o nome default para a caixa de diálogos Salvar Como...
Response.ContentType = [Ô]application/octet-stream[Ô]
Response.AddHeader([Ô]Content-Disposition[Ô], [Ô]attachment; filename=[Ô][Ô][Ô] & arquivo.Name & [Ô][Ô][Ô][Ô])
[ô]Adiciona ao cabeçalho o tamanho do arquivo para que o browser possa exibir o progresso do download
Response.AddHeader([Ô]Content-Length[Ô], arquivo.Length.ToString())
Response.Flush()
Response.WriteFile(arquivo.FullName)
End If
End Sub
Criei um Listbox e carreguei com um diretorio dos arquivos gerados,
ate ai tudo bem, ocorre que quando seleciono um item e clico no botão para baixar este arquivo, o listindex não reconhece o item selecionado ou se atribui um valor ao index , ele nao muda.
[ô]função para baixar o arquivo selecionado (botão)
Protected Sub btnBaixar_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBaixar.Click
If lsbArquivos.SelectedIndex <> -1 Then
Dim pasta As New System.IO.DirectoryInfo(mydocpath)
Dim arquivo As New FileInfo(pasta.FullName + [Ô]\[Ô] + lsbArquivos.SelectedValue)
[ô]Limpa o conteúdo de saÃda atual do buffer
Response.Clear()
[ô]Adiciona um cabeçalho que especifica o nome default para a caixa de diálogos Salvar Como...
Response.ContentType = [Ô]application/octet-stream[Ô]
Response.AddHeader([Ô]Content-Disposition[Ô], [Ô]attachment; filename=[Ô][Ô][Ô] & arquivo.Name & [Ô][Ô][Ô][Ô])
[ô]Adiciona ao cabeçalho o tamanho do arquivo para que o browser possa exibir o progresso do download
Response.AddHeader([Ô]Content-Length[Ô], arquivo.Length.ToString())
Response.Flush()
Response.WriteFile(arquivo.FullName)
End If
End Sub
O que é o [Ô]Response[Ô]?
Response:
Serve para enviar a saida de um objeto para cliente
http://msdn.microsoft.com/en-us/library/ms525405(v=vs.90).aspx
Serve para enviar a saida de um objeto para cliente
http://msdn.microsoft.com/en-us/library/ms525405(v=vs.90).aspx
Ah, sim, entendi.
Vc tem que colocar a propriedade [Ô]AutoPostBack[Ô] como [Ô]True[Ô] nessa dropdown. Mas já vou dando a dica, é melhor vc salvar o arquivo em uma pasta temporária e passar o link no response, ou encaminhar para o caminho com o Response.Redirect
Do modo como está fazendo, pode ter problemas de incompatibilidade, dependendo do browser e OS de quem está usando.
Vc tem que colocar a propriedade [Ô]AutoPostBack[Ô] como [Ô]True[Ô] nessa dropdown. Mas já vou dando a dica, é melhor vc salvar o arquivo em uma pasta temporária e passar o link no response, ou encaminhar para o caminho com o Response.Redirect
Do modo como está fazendo, pode ter problemas de incompatibilidade, dependendo do browser e OS de quem está usando.
Ja tentei com AutopostBack= True, o problema é que não sei porque ele não seta o item selecionado no listbox,
Coloquei no mesmo form outro listbox, carreguei com alguns itens, qdo debugava o listbox1 nao seleciona e o listbox2 seleciona, limpei o listbox2 e carreguei o conteudo do listbox1, ai nenhum dos dois selecionava.
Coloquei no mesmo form outro listbox, carreguei com alguns itens, qdo debugava o listbox1 nao seleciona e o listbox2 seleciona, limpei o listbox2 e carreguei o conteudo do listbox1, ai nenhum dos dois selecionava.
Rotina para carregar listbox:
Dim pasta As New System.IO.DirectoryInfo(mydocpath)
Dim listaArquivos As FileInfo() = pasta.GetFiles()
lsbArquivos.Items.Clear()
lsbArquivos.DataSource = listaArquivos
lsbArquivos.DataBind()
Dim pasta As New System.IO.DirectoryInfo(mydocpath)
Dim listaArquivos As FileInfo() = pasta.GetFiles()
lsbArquivos.Items.Clear()
lsbArquivos.DataSource = listaArquivos
lsbArquivos.DataBind()
Não seta o Ãtem? Tipo, vc seleciona um Ãtem e o valor dele não é o que é o valor do Ãtem? Isso?
Isso
Verifica se no evento Page_Load não está limpando e preenchendo o combo de novo... O que é o mais provável.
Sim no Evento Page_Load chamo a rotina anteriomente descrita para carregar o ListBox.
Como não estou utilizando AutopostBack= True, eu penso que o evento só será chamado no carregamento da Pagina.
Como não estou utilizando AutopostBack= True, eu penso que o evento só será chamado no carregamento da Pagina.
Cara pelo que eu entend você quer juntar o caminho com o nome da pasta ou arquivo que o usuário escolher na ListBox, correto?
Tenta trocar esta linha:
Acontece que, se o item já estiver selecionado, ou seja, não for -1, o programa reconhece qual o texto relacionado ao item.
Tenta trocar esta linha:
Dim arquivo As New FileInfo(pasta.FullName + [txt-color=#e80000][Ô]\[Ô][/txt-color] + lsbArquivos.SelectedValue)
por esta:Dim arquivo As New FileInfo(pasta.FullName + [txt-color=#e80000][Ô]\[Ô][/txt-color] + lsbArquivos.Text)
Acontece que, se o item já estiver selecionado, ou seja, não for -1, o programa reconhece qual o texto relacionado ao item.
Tópico encerrado , respostas não são mais permitidas