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>
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}"...
Utiliser hyperlinkfield au lieu de :
<asp:hyperlinkfield datatextfield="NewsHeadline"
datanavigateurlfields="NewsID"
datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" />
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>
quelque chose comme ça va fonctionner comme une solution fantastique dans Visual Studio 2010.
- Créer un
GridView
dans L'onglet Designer de votre page Web en VS. - passez votre souris sur le
GridView
et cliquez sur la flèche qui apparaît en haut à droite. - allez à" choisir la Source de données "et sélectionnez" nouvelle source de données"..."
- créez la chaîne de connexion à votre base de données et choisissez la table NewsHeadline.
- Écrire la requête
SELECT News_Id, NewsHeadline FROM NewsHeadline
- 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 leDataSource
de votreGridView
. - 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 KEY
News_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.
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.