none
Como utilizar o LinkButton no Gridview? RRS feed

  • Pergunta

  • Boa dia!

    Como faço para utilizar o linkbutton para abrir arquivos que estão sendo coolcados para dentro de uma coleção List<>, o qual é o datasource da minha gridview.
    Abaixo está minha grid, e coloquei o linkbutton que está em "vermelho", o qual apresenta o campo 'name' na tela e deve pegar o campo url (que é o caminho do arquivo) para abri-lo.

    Se alguém puder me ajudar, agradeço!

    valeu!

     <asp:GridView ID="gvAnexos" AutoGenerateColumns="False"
                            AllowPaging="True" GridLines="Vertical"
                            CssClass="GridViewStyle" Width="100%" CellPadding="3"
                            onrowdeleting="gvAnexos_RowDeleting"
                            onrowediting="gvAnexos_RowEditing"
                            OnRowCommand="gvAnexos_RowCommand"
                            runat="server">
                            <RowStyle CssClass="RowStyle"/>
                            <SelectedRowStyle CssClass="SelectedRowStyle" />
                            <HeaderStyle CssClass="HeaderStyle" />
                            <AlternatingRowStyle CssClass="AltRowStyle" />
                           
                            <Columns>
                                <asp:TemplateField HeaderText="Tipo">
                                    <ItemTemplate>
                                        <asp:ImageButton ID="imbTipo" runat="server" ImageUrl='<%# GetImage(Eval("ShortCutOnly").ToString())%>' />
                                    </ItemTemplate>
                                </asp:TemplateField>
                               
                               <asp:TemplateField HeaderText="Arquivo">
                                    <ItemTemplate>
                                         <asp:LinkButton ID="lkbAbrirAnexo" runat="server" Text='<%# (Eval("name").ToString()%>'
                                                  CommandArgument='<%# DataBinder.Eval(Container.DataItem, "url")%>' CommandName="url">
                                         </asp:LinkButton>
                                    </ItemTemplate>
                                </asp:TemplateField>

                               
                                <asp:BoundField DataField="rating" HeaderText="Clas." SortExpression="rating">
                                </asp:BoundField>
                                <asp:BoundField DataField="filesize" HeaderText="Tamanho" SortExpression="filesize">
                                </asp:BoundField>
                                <asp:BoundField DataField="filedate" HeaderText="Data" SortExpression="filedate" DataFormatString="{0:dd/MM/yyyy}">
                                </asp:BoundField>
                                <asp:BoundField DataField="title" HeaderText="Titulo" SortExpression="title">
                                </asp:BoundField>
                                <asp:BoundField DataField="subject" HeaderText="Assunto" SortExpression="subject">
                                </asp:BoundField>
                                <asp:CommandField HeaderText="Opções" ButtonType="Image" DeleteImageUrl="Imagens/trash.gif"
                                    EditImageUrl="Imagens/alterar.gif" ShowEditButton="True" ShowDeleteButton="True" />
                            </Columns>
                        </asp:GridView>

    falleirok
    quarta-feira, 18 de fevereiro de 2009 14:05

Respostas

  • Valeu pela força!

    Mas quando tento usar o <href> dá erro! Na minha Grid vai estar escrito apenas o nome do arquivo, que vem da propriedade anexos.url, mas para abrir o arquivo preciso usar o anexos.url (que é o caminho do arquivo). Como faço isso? Conseguindo passar o url ou mesmo o rowindex da grid já me ajuda.
    Tentei assim:
    <asp:LinkButton ID="lkbAbrirAnexo" runat="server" Text='<%# Eval("name")%>' CommandArgument='<%# Eval("url")%>' CommandName="url"></asp:LinkButton>

    ou

    <asp:LinkButton ID="lkbAbrirAnexo" runat="server" Text='<%# Eval("name")%>' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "url"%>' CommandName="url"></asp:LinkButton>

    Os dois modos dá erro, e o tal do DataBinder nem sei o que faz!

    Só que não consigo pegar o valor URL, pois no campo Arquivo da grid vão estar os anexos.name.
    Tomara que eu tenha conseguido me explicar.

    Obrigado de novo!

    falleirok
    • Marcado como Resposta falleirok quinta-feira, 19 de fevereiro de 2009 21:06
    quarta-feira, 18 de fevereiro de 2009 17:34

Todas as Respostas

  • falleirok disse:

    Boa dia!

    Como faço para utilizar o linkbutton para abrir arquivos que estão sendo coolcados para dentro de uma coleção List<>, o qual é o datasource da minha gridview.
    Abaixo está minha grid, e coloquei o linkbutton que está em "vermelho", o qual apresenta o campo 'name' na tela e deve pegar o campo url (que é o caminho do arquivo) para abri-lo.

    Se alguém puder me ajudar, agradeço!

    valeu!

     <asp:GridView ID="gvAnexos" AutoGenerateColumns="False"
                            AllowPaging="True" GridLines="Vertical"
                            CssClass="GridViewStyle" Width="100%" CellPadding="3"
                            onrowdeleting="gvAnexos_RowDeleting"
                            onrowediting="gvAnexos_RowEditing"
                            OnRowCommand="gvAnexos_RowCommand"
                            runat="server">
                            <RowStyle CssClass="RowStyle"/>
                            <SelectedRowStyle CssClass="SelectedRowStyle" />
                            <HeaderStyle CssClass="HeaderStyle" />
                            <AlternatingRowStyle CssClass="AltRowStyle" />
                           
                            <Columns>
                                <asp:TemplateField HeaderText="Tipo">
                                    <ItemTemplate>
                                        <asp:ImageButton ID="imbTipo" runat="server" ImageUrl='<%# GetImage(Eval("ShortCutOnly").ToString())%>' />
                                    </ItemTemplate>
                                </asp:TemplateField>
                               
                               <asp:TemplateField HeaderText="Arquivo">
                                    <ItemTemplate>
                                         <asp:LinkButton ID="lkbAbrirAnexo" runat="server" Text='<%# (Eval("name").ToString()%>'
                                                  CommandArgument='<%# DataBinder.Eval(Container.DataItem, "url")%>' CommandName="url">
                                         </asp:LinkButton>
                                    </ItemTemplate>
                                </asp:TemplateField>

                               
                                <asp:BoundField DataField="rating" HeaderText="Clas." SortExpression="rating">
                                </asp:BoundField>
                                <asp:BoundField DataField="filesize" HeaderText="Tamanho" SortExpression="filesize">
                                </asp:BoundField>
                                <asp:BoundField DataField="filedate" HeaderText="Data" SortExpression="filedate" DataFormatString="{0:dd/MM/yyyy}">
                                </asp:BoundField>
                                <asp:BoundField DataField="title" HeaderText="Titulo" SortExpression="title">
                                </asp:BoundField>
                                <asp:BoundField DataField="subject" HeaderText="Assunto" SortExpression="subject">
                                </asp:BoundField>
                                <asp:CommandField HeaderText="Opções" ButtonType="Image" DeleteImageUrl="Imagens/trash.gif"
                                    EditImageUrl="Imagens/alterar.gif" ShowEditButton="True" ShowDeleteButton="True" />
                            </Columns>
                        </asp:GridView>


    falleirok


    Ola
    Eu recomendo utilizar uma tag href mesmo para direcionar para a url:

    <asp:GridView ID="gvAnexos" AutoGenerateColumns="False"
                            AllowPaging="True" GridLines="Vertical"
                            CssClass="GridViewStyle" Width="100%" CellPadding="3"
                            onrowdeleting="gvAnexos_RowDeleting"
                            onrowediting="gvAnexos_RowEditing"
                            OnRowCommand="gvAnexos_RowCommand"
                            runat="server">
                            <RowStyle CssClass="RowStyle"/>
                            <SelectedRowStyle CssClass="SelectedRowStyle" />
                            <HeaderStyle CssClass="HeaderStyle" />
                            <AlternatingRowStyle CssClass="AltRowStyle" />
                           
                            <Columns>
                                <asp:TemplateField HeaderText="Tipo">
                                    <ItemTemplate>
                                        <asp:ImageButton ID="imbTipo" runat="server" ImageUrl='<%# GetImage(Eval("ShortCutOnly").ToString())%>' />
                                    </ItemTemplate>
                                </asp:TemplateField>
                               
                               <asp:TemplateField HeaderText="Arquivo">
                                    <ItemTemplate>

                                        <a href='<%# Eval("url") %>' target="_blank"><%# Eval("name") %></a>
                                    </ItemTemplate>
                                </asp:TemplateField>

                               
                                <asp:BoundField DataField="rating" HeaderText="Clas." SortExpression="rating">
                                </asp:BoundField>
                                <asp:BoundField DataField="filesize" HeaderText="Tamanho" SortExpression="filesize">
                                </asp:BoundField>
                                <asp:BoundField DataField="filedate" HeaderText="Data" SortExpression="filedate" DataFormatString="{0:dd/MM/yyyy}">
                                </asp:BoundField>
                                <asp:BoundField DataField="title" HeaderText="Titulo" SortExpression="title">
                                </asp:BoundField>
                                <asp:BoundField DataField="subject" HeaderText="Assunto" SortExpression="subject">
                                </asp:BoundField>
                                <asp:CommandField HeaderText="Opções" ButtonType="Image" DeleteImageUrl="Imagens/trash.gif"
                                    EditImageUrl="Imagens/alterar.gif" ShowEditButton="True" ShowDeleteButton="True" />
                            </Columns>
                        </asp:GridView>

    []'s

    Valdek Santos Santana Junior.
    quarta-feira, 18 de fevereiro de 2009 16:02
  • Para trabalhar com o Link Button, você deve tratar o evento RowCommand do GridView.

    void GridView_RowCommand(object sender, RowCommandEventArgs e) 
        string url = e.CommandArgument as string
        Response.Redirect("url); 

    []'s

    Valdek Santos Santana Junior.
    quarta-feira, 18 de fevereiro de 2009 16:04
  • Perfeito!

    Mas não quero abrir uma nova página, quero abrir o arquivo que está na propriedade 'url' da minha classe de anexos.
    O campo headertext="Arquivo' recebe o campo 'name' do arquivo adiocionado à minha coleção de List<>, o qual é o datasource da gridview. Quero ao clicar no linkbutton do campo "Arquivo" passar a propriedade 'URL' que tem o caminho dos arquivos.
    Como faço para abrir um arquivo? se for .DOC, vai abrir o Word, .XLS, vai abrir o Excel, etc.

    Obrigado!

    falleirok
    quarta-feira, 18 de fevereiro de 2009 16:53
  • Ola.
    Desculpa, acho que não entendi direito (desculpe a correria)...
    Não entendi direito o desenrolar do HeaderText, classe, anexo etc mas:

    Se você criar uma url assim:
    <a href='<%# Eval("url") %>'>Download</a>
    onde Eval("url") = "CaminhoPasta/arquivoWord.docx" ou "CaminhoPasta/arquivoPDF.pdf"
    Quando você clicar, o navegador vai identificar qual é a extensão do arquivo e
    abrir com o programa correspondente. Sendo assim, você não precisa se
    preocupar quando a extensão for doc ou pdf.

    Eu recomendo utilizar o target="_blank" pois, se o usuário está em uma tela de
    consulta de documentos e tentar abrir o pdf errado, isso pode custar tempo
    para abrir o pdf e ver que não é o documento correto. Além disso, ele terá
    que clicar no botão Voltar do navegador e nem sempre os dados e os parametros
    de consulta ficarão por la.

    []'s


    Valdek Santos Santana Junior.
    quarta-feira, 18 de fevereiro de 2009 17:15
  • Valeu pela força!

    Mas quando tento usar o <href> dá erro! Na minha Grid vai estar escrito apenas o nome do arquivo, que vem da propriedade anexos.url, mas para abrir o arquivo preciso usar o anexos.url (que é o caminho do arquivo). Como faço isso? Conseguindo passar o url ou mesmo o rowindex da grid já me ajuda.
    Tentei assim:
    <asp:LinkButton ID="lkbAbrirAnexo" runat="server" Text='<%# Eval("name")%>' CommandArgument='<%# Eval("url")%>' CommandName="url"></asp:LinkButton>

    ou

    <asp:LinkButton ID="lkbAbrirAnexo" runat="server" Text='<%# Eval("name")%>' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "url"%>' CommandName="url"></asp:LinkButton>

    Os dois modos dá erro, e o tal do DataBinder nem sei o que faz!

    Só que não consigo pegar o valor URL, pois no campo Arquivo da grid vão estar os anexos.name.
    Tomara que eu tenha conseguido me explicar.

    Obrigado de novo!

    falleirok
    • Marcado como Resposta falleirok quinta-feira, 19 de fevereiro de 2009 21:06
    quarta-feira, 18 de fevereiro de 2009 17:34
  • Ops, qual versão de asp.net você está usando? 1.1, 2.0 >=?
    Posta o erro com href please.
    []'s

    Valdek Santos Santana Junior.
    quarta-feira, 18 de fevereiro de 2009 20:33