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>
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}" ...
Utilisez hyperlinkfield à la place:
<asp:hyperlinkfield datatextfield="NewsHeadline"
datanavigateurlfields="NewsID"
datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" />
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>
Quelque chose comme ça fonctionnera comme une solution fantastique dans Visual Studio 2010.
GridView
dans l'onglet Designer de votre page Web dans VS.GridView
et cliquez sur la flèche qui apparaît en haut à droite.SELECT News_Id, NewsHeadline FROM NewsHeadline
SqlDataSource
qui est maintenant le DataSource
de votre GridView
.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 KEY
News_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.
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.