web-dev-qa-db-fra.com

Ajout d'une colonne de lien à ASP.NET GridView

Je souhaite afficher une liste de titres d'actualité cliquables. Jusqu'à présent, je peux obtenir qu'il imprime une liste de titres parce que j'ai fait glisser et déposé la table NewsHeadline en mode concepteur dans VS 2010. Comment pensez-vous que je devrais rendre les éléments de la liste cliquables? J'ai cherché un attribut d'URL mais je ne l'ai pas vu. Dois-je 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>
22
astronought

Vous devez modifier le type de colonne d'une colonne BoundColumn à une colonne Hyperlink.

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

En plus d'effectuer cette modification, vous devez vous assurer que vous sélectionnez l'URL ou quelque chose que vous pouvez utiliser pour créer le lien vers l'article de presse. Dans l'exemple ci-dessus, je suppose que l'URL est quelque chose que vous pouvez récupérer à partir de votre source SQL. S'il s'agit d'un ID, tapez simplement le reste de l'URL comme ceci ... "~/MyNewsPage.aspx? NewsID = {0}" ...

33
RSolberg

Utilisez hyperlinkfield à la place:

<asp:hyperlinkfield datatextfield="NewsHeadline"
        datanavigateurlfields="NewsID"
        datanavigateurlformatstring="~\newsdetails.aspx?Id={0}"  />
9
Canavar

Vous devez utiliser un champ de lien hypertexte au lieu d'un BoundField, 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
Scott Kirkland

Quelque chose comme ça fonctionnera comme une solution fantastique dans Visual Studio 2010.

  1. Créez un GridView dans l'onglet Designer de votre page Web dans VS.
  2. Passez votre souris sur GridView et cliquez sur la flèche qui apparaît en haut à droite.
  3. Allez dans "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. Écrivez la requête SELECT News_Id, NewsHeadline FROM NewsHeadline
  6. Terminez la configuration. Maintenant, du code devrait être généré dans l'onglet Source. Cela créera également un SqlDataSource qui est maintenant le DataSource de votre GridView.
  7. Accédez à l'emplacement du code pour votre GridView dans l'onglet Source et remplacez-le 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 vous êtes prêt. Cela créera une liste de tous les titres sous forme de liens hypertexte avec un lien unique généré dynamiquement vers le newsdetails.aspx compliments de page de la chaîne de requête que nous avons construite en utilisant le PRIMARY KEYNews_Id correspondant à chaque entrée NewsHeadline dans la table NewsHeadline.

Ensuite, lorsque vous chargez le newsdetails.aspx page que vous utilisez: Request.QueryString["News_Id"] pour obtenir le News_Id valeur de l'URL et utilisez-la pour interroger la base de données pour obtenir les détails sur le NewsHeadline spécifique sur lequel vous avez cliqué. Vous pouvez ensuite afficher le résultat de cette requête sur la page Web.

3
Derek W

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 serveur personnalisé qui implémente un GridView suggéré dans le SO post "Rendre une ligne entière cliquable dans une vue de grille" .

Consultez la question que j'ai postée sur comment implémenter un contrôle serveur personnalisé C # sur l'implémentation.

Juste une autre option.

2
Eddie