2010-04-22 2 views
2

Je veux que les en-têtes de ma grille soient des hyperliens, sans le "SortExpression" ... J'ai cherché sur le net, mais je n'ai pas été très efficace.Comment créer les en-têtes gridview aux liens?

Quelqu'un a la solution? Par exemple: en cliquant sur l'en-tête d'une grille simple, le site accède à une page Web. C'est possible?

Merci d'avance!

Répondre

3

Avez-vous essayé modèle Gridview tête comme ...

<asp:GridView runat="server" ID="grd"> 
     <Columns> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        <asp:HyperLink runat="server" NavigateUrl="YourURL"> </asp:HyperLink> 
       </HeaderTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
+0

Oui! Je vous remercie! Seule chose: assurez-vous d'insérer l'élément "Texte", car cela devient le lien réel ... – Joris

0

Maintenant, j'ai eu cette gridview, et je dois les en-têtes pour être cliquable, après quoi un début d'événement (quelque chose comme OnClickHeader = « header_ClickEvent »?) Bien sûr, il y a un élément SortExpression, qui permet de trier la grille, mais je veux être en mesure de démarrer n'importe quel événement, comme lorsque vous cliquez sur un bouton.

Je n'ai pas trouvé de solution dans l'asp: BoundField ni asp: TemplateField ... Je pensais qu'un lien hypertexte pouvait résoudre le problème, mais c'était un peu prématuré.

Le Gridview:

<asp:GridView CssClass="gridview" ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Student_key" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" PagerSettings-Visible="false" PageSize="14"> 

            <HeaderStyle CssClass="headerstyle" /> 
            <RowStyle CssClass="rowstyle"/> 
            <AlternatingRowStyle CssClass="altrowstyle" /> 
            <Columns> 
             <asp:BoundField DataField="Studentnumber" HeaderText="Studentnummer" > 
              <HeaderStyle CssClass="header100" /> 
             </asp:BoundField> 
             <asp:BoundField DataField="Prefix" HeaderText="Voorletters" > 
              <HeaderStyle CssClass="header75" /> 
             </asp:BoundField> 
             <asp:BoundField DataField="prename" HeaderText="Voornaam" SortExpression="Voornaam"> 
              <HeaderStyle CssClass="header75" /> 
             </asp:BoundField> 
             <asp:BoundField DataField="nickname" HeaderText="Roepnaam" > 
              <HeaderStyle CssClass="header100" /> 
             </asp:BoundField> 
             <asp:BoundField DataField="insertion" HeaderText="Tussenvoegsel" > 
              <HeaderStyle CssClass="header100" /> 
             </asp:BoundField> 
             <asp:BoundField DataField="surname" HeaderText="Achternaam"> 
              <HeaderStyle CssClass="header100" /> 
             </asp:BoundField> 
             <asp:CommandField SelectText="show results" ShowSelectButton="True" > 
              <HeaderStyle CssClass="header100" /> 
             </asp:CommandField> 

            </Columns> 
            <EmptyDataTemplate >There are no results shown, please try again.</EmptyDataTemplate> 

           </asp:GridView> 
0

J'utilisé une méthode qui pourrait être un peu non conventionnel, mais cela fonctionne. Dans mon cas, je voulais utiliser les contrôles BoundField standard dans ma vue grid plutôt que d'utiliser un champ template avec HeaderTemplate et ItemTemplate. J'ai utilisé un simple gridview basé sur une source de données SQL qui ressemble à ceci.

<asp:GridView 
    ID="gvTopXByContest" 
    runat="server" 
    AutoGenerateColumns="False" 
    DataSourceID="dsTopXByContest" 
    AllowSorting="true" 
    OnSorting="gvTopXByContest_OnSorting" > 
    <Columns> 
     <asp:BoundField DataField="txtOnlineUserName" HeaderText="Fan Name & Rank"     SortExpression="txtOnlineUserName" ItemStyle-Width="155px"></asp:BoundField> 
     <asp:BoundField DataField="fltTotalPoints" HeaderText="Points" SortExpression="fltTotalPoints" ItemStyle-Width="40px"></asp:BoundField> 
     <asp:BoundField DataField="curWon" HeaderText="Won" SortExpression="curWon" ItemStyle-Width="40px"></asp:BoundField> 
</Columns> 
</asp:GridView> 

J'ai ensuite utilisé le code qui se déclenche sur l'événement OnSorting du gridview pour faire mes réoriente

Protected Sub gvTopXByContest_OnSorting(sender As Object, e As GridViewSortEventArgs) 

    If e.SortExpression <> DirectCast(sender, GridView).SortExpression Then 
     If e.SortExpression = "txtOnlineUserName" Then 
      Response.Redirect(URL to redirect to goes here) 
     ElseIf e.SortExpression = "fltTotalPoints" Then 
      Response.Redirect(URL to redirect to goes here) 
     Else 
      'I could have used another ElseIf here but since there are only 3 columns Else works 
      Response.Redirect(URL to redirect to goes here) 
     End If 

End Sub