none
Link em coluna no gridview RRS feed

  • Pergunta

  • Como eu faço em C#(CodeBehind) para fazer com uma determinada coluna de um GridView seja um link para um path determinado em minha máquina?
    sexta-feira, 25 de maio de 2012 20:01

Respostas

  • Essa é fácil...

    No seu RowDataBound faça a atribuição para o índice da coluna desejada:

    e.Row.Cells[2].Style.Add("text-decoration", "underline");

    Certo?

    Resolveu? Marque a resposta ;)
    Dúvidas? Poste aqui!


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    • Marcado como Resposta pnet segunda-feira, 28 de maio de 2012 19:48
    segunda-feira, 28 de maio de 2012 19:24

Todas as Respostas

  • Eu fiz isso, mas não colocou o sublinhado em baixo do texto e nem mudou para a cor azul e a cor do nome da coluna mudou para black. Abaixo o código:

    protected void yourGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
                   
    HyperLink hlControl = new HyperLink();
                    hlControl
    .Text = e.Row.Cells[2].Text; 
                    hlControl
    .NavigateUrl = "http://www.stackoverflow.com";
                    e
    .Row.Cells[2].Controls.Add(hlControl);
    }

    sexta-feira, 25 de maio de 2012 20:15
  • Na linha:
    hlControl.NavigateUrl..
    Se eu ponho assim:

    hlControl.NavigateUrl = "www.meusite.com"; O HyperLink funciona, porem se ponho assim:

    hlControl.NavigateUrl = minhavariavel.MeuPath.ToString(); O HyperLink não funciona.

    Porque isso acontece?

    sexta-feira, 25 de maio de 2012 20:59
  • Perdão, é que houve um erro na aplicação e a variável estava vindo nula. Já corrigi e agora só falta como sublinhar o HyperLink, mudar a cor dele e a cor da fonte do nome da coluna. Quando virou HyperLink, ea mudo de cor de white para black.
    sexta-feira, 25 de maio de 2012 21:50
  • Coloquei um path fixo para testes e a mensagem que veio foi:
    O Firefox não sabe como abrir este endereço.
    O protocolo "d" não está associado a nenhum aplicativo.

    O path completo é:

    D:\Apostilas\HTML.pdf

    sexta-feira, 25 de maio de 2012 22:10
  • fiz assim:
    file://D:\\Meu_Path\Meu_Arquivo.pdf e nada acontece.
    fiz também:
    file://D://Meu_Path//Meu_Arquivo.pdf e nada também.
    fiz também:
    file://D:/Meu_Path/Meu_Arquivo.pdf e nada também.
    fiz também:
    file://D:\Meu_Path\Meu_Arquivo.pdf assim dá erro de sequencia de escape não reconhecida.
    segunda-feira, 28 de maio de 2012 11:34
  • Fiz desse jeito, que um amigo meu me passou, mas abre direto. Deveria abrir apenas quando eu clicasse na coluna do GridView e quando abro a página já abre o arquivo. Até porque esse arquivo será passado via variável, então deveria criar algum evento para isso:
    abaixo o código, mas não sei se isso é o correto. Só sei que ele abre o path, mas ao abrir a página, já abre o arquivo:

            string arq = D:\\Meu_Path\\Meu_Arquivo.pdf;
            Response.Clear()
            Response.ContentType = application/pdf
            //Response.AddHeader(Content-Disposition, inline; filename= & Right(Now.Ticks, 6) & .pdf) - Não funciona
            //Response.AddHeader(Content-Length, arq.Length.ToString())-Não funciona
            Response.Flush()
            Response.WriteFile(arq.FullName) em lugar de FullName(Não funciona) eu fiz: arq.ToString();

    Desse jeito, abre, mas sem que eu clique no Grid, já abre direto.

    segunda-feira, 28 de maio de 2012 12:55
  • Coloca uma @ na frente!

    string path = @"c:\temp\xpto.pdf";

    Resolveu? Marque a resposta ;)
    Dúvidas? Poste aqui!



    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           


    segunda-feira, 28 de maio de 2012 12:55
  • O problema que esse evnto está no OnRowDataBound(). Logo, sempre que eu chamar o Grid, ele será executado e eu quero que ele seja executado quando eu clicar em uma determinada linha do Grid. Tentei criar um evento OnDoubleClick, mas não consegui. Como eu faço isso?
    segunda-feira, 28 de maio de 2012 14:37
  • Fiz de um jeito que tem que funcionar! Implementa ai direitinho que vai resolver:

    Exemplo de ASPX com GridView:

        <asp:GridView ID="gdvCli" runat="server" OnRowDataBound="gdvCli_RowDataBound">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkb" Text="Meulink" OnClick="DownloadFile" runat="server"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

    Exemplo de ASPX.CS:

        protected void gdvCli_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton lkb = (LinkButton)e.Row.Cells[0].FindControl("lnkb");
                lkb.CommandArgument = "teste.pdf";
    
            }
        }
    
        protected void DownloadFile(object sender, EventArgs e)
        {
            LinkButton lkb = (LinkButton)sender;
    
            string arq = @"C:\temp\" + lkb.CommandArgument;
    
            Response.Buffer = false; 
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-Disposition", "attachment; filename=NomeDoPDF.pdf"); 
            Response.TransmitFile(arq);
            Response.End();
        }

    Agora você só precisa personalizar esse código com suas suas devidas propriedades.

    Resolveu? Marque a resposta ;)
    Dúvidas? Poste aqui!


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    segunda-feira, 28 de maio de 2012 17:05
  • Fiz uma nova aspx e coloquei o código em questão no Page_Load, assim:

    string arq = Var_Do_Path + Var_Do_Arquivo;
    Response.Clear();
    Response.ContentType = "application/pdf";
    .....

    E na chamada dessa página passei os parâmetros para alimentar essa chamada. É que o Response, estava "apagando" meu html e aí dava tilt. Então quando eu clico no HyperLink do Grid, eu passo pela Url da página o parâmetro para carregar no banco(query) e trazer o arquivo correto. Agora mais uma pergunta, porque hyperlink não estã sublinhado? E não consigo mudar o nome da coluna, ela vem com o nome Nome e não Comunicado, conforme passei no Columns.Caption.

    segunda-feira, 28 de maio de 2012 18:11
  • Se estiver usando um TemplateField use o HeaderText e para sublinhar use Font-Underline="true" como no ex. abaixo:

                <asp:TemplateField HeaderText="Link">
                    <ItemTemplate>
                        <asp:LinkButton Font-Underline="true" ID="lnkb" Text="Meulink" OnClick="DownloadFile" runat="server"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>

    Resolveu? Marque a resposta ;)
    Dúvidas? Poste aqui!


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    segunda-feira, 28 de maio de 2012 18:37
  • Então, o problema que não é um botão, mas sim uma coluna do gridview. Por isso essa dificuldade toda. O link está em uma coluna do GridView e não num botão.
    segunda-feira, 28 de maio de 2012 18:53
  • Essa é fácil...

    No seu RowDataBound faça a atribuição para o índice da coluna desejada:

    e.Row.Cells[2].Style.Add("text-decoration", "underline");

    Certo?

    Resolveu? Marque a resposta ;)
    Dúvidas? Poste aqui!


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    • Marcado como Resposta pnet segunda-feira, 28 de maio de 2012 19:48
    segunda-feira, 28 de maio de 2012 19:24