Ajouter une colonne de lien à ASP.NET GridView

je veux sortir une liste de titres de nouvelles qui sont cliquables. Jusqu'à présent, je peux l'obtenir pour imprimer une liste de titres parce que j'ai traîné et laissé tomber la table NewsHeadline dans la vue de concepteur dans VS 2010. Comment pensez-vous que je devrais rendre les éléments de la liste cliquable? J'ai cherché un attribut URL mais je ne l'ai pas vu. Ai-je besoin d'envelopper dans un < a href ?

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1" 
        EmptyDataText="There are no data records to display.">
        <Columns>
            <asp:BoundField DataField="NewsHeadline" HeaderText="NewsHeadline" 
                SortExpression="NewsHeadline" />
        </Columns>
    </asp:GridView>

  <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
        ProviderName="<%$ ConnectionStrings:ConnectionString1.ProviderName %>" 
        SelectCommand="SELECT [NewsHeadline] FROM [NewsTable]"></asp:SqlDataSource>
   </form>
18
demandé sur Canavar 2009-12-05 02:05:48

5 réponses

vous devez changer le type de colonne D'une colonne liée à une colonne D'hyperlien.

   <asp:hyperlinkfield headertext="NewsHeadline"
      datatextfield="NewsHeadline"
      datanavigateurlfield="NewsURL" 
      datanavigateurlformatstring="http://{0}" />

En plus de cette modification, vous devez assurez-vous que vous sélectionnez l'URL ou quelque chose que vous pouvez utiliser pour créer le lien vers l'article de nouvelles. Dans l'exemple ci-dessus, je suppose que L'URL est quelque chose que vous pouvez saisir depuis votre source SQL. Si c'est un ID, tapez simplement le reste de l'url comme ceci... "~/MyNewsPage.aspx?NewsID={0}"...

29
répondu RSolberg 2009-12-04 23:15:03

Utiliser hyperlinkfield au lieu de :

<asp:hyperlinkfield datatextfield="NewsHeadline"
        datanavigateurlfields="NewsID"
        datanavigateurlformatstring="~\newsdetails.aspx?Id={0}"  />
9
répondu Canavar 2009-12-04 23:12:54

vous devez utiliser un champ hypertexte au lieu d'un champ lié, comme ceci:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" 
    EmptyDataText="There are no data records to display.">
    <Columns>
        <asp:HyperLinkField HeaderText="NewsHeadline" SortExpression="NewsHeadline" DataTextField="NewsHeadline" NavigateUrl="..." />
    </Columns>

3
répondu Scott Kirkland 2009-12-04 23:11:31

quelque chose comme ça va fonctionner comme une solution fantastique dans Visual Studio 2010.

  1. Créer un GridView dans L'onglet Designer de votre page Web en VS.
  2. passez votre souris sur le GridView et cliquez sur la flèche qui apparaît en haut à droite.
  3. allez à" choisir la Source de données "et sélectionnez" nouvelle source de données"..."
  4. créez la chaîne de connexion à votre base de données et choisissez la table NewsHeadline.
  5. Écrire la requête SELECT News_Id, NewsHeadline FROM NewsHeadline
  6. finissez la configuration. Maintenant, du code devrait être généré dans l'onglet Source. Cela permettra également de créer un SqlDataSource qui est maintenant le DataSource de votre GridView.
  7. Aller à l'endroit où le code est pour votre GridView dans L'onglet Source et remplacer par le code suivant.

Code:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="Id" DataSourceID="SqlDataSource1">
    <Columns>
    <asp:HyperLinkField
            DataNavigateUrlFields="News_Id"
            DataNavigateUrlFormatString="~\newsdetails.aspx?News_Id={0}"
            DataTextField="NewsHeadline"
            HeaderText="News HeadLines"
            SortExpression="NewsHeadline" />
    </Columns>
</asp:GridView>

et tout est prêt. Cela créera une liste de tous les titres sous forme d'hyperliens avec un lien unique généré dynamiquement vers le newsdetails.aspx page compliments de la chaîne de requête que nous avons construit en utilisant le PRIMARY KEYNews_Id correspondant à chaque NewsHeadline entrée dans la table NewsHeadline.

puis quand vous chargez le newsdetails.aspx la page que vous utilisez: Request.QueryString["News_Id"] pour obtenir l' News_Id valeur de L'URL et l'utiliser pour interroger la base de données pour les détails sur leNewsHeadline cela a été cliqué. Vous pouvez ensuite afficher le résultat de cette requête dans la page web.

3
répondu Derek W 2013-04-17 21:43:26

L'HyperLinkField fonctionnera très bien comme d'autres l'ont souligné. Mais, si vous voulez que la ligne entière soit cliquable, vous pouvez utiliser un contrôle de serveur personnalisé qui implémente un GridView suggéré dans le SO post "Faire une ligne entière cliquable dans un gridview".

consulter la question que j'ai posté sur comment implémenter un contrôle c # custom server sur la mise en œuvre.

juste une autre option.

2
répondu Eddie 2017-05-23 12:02:35