我想输出可点击的新闻标题列表。到目前为止,我可以打印出标题列表,因为我在VS 2010的设计器视图中拖放了NewsHeadline表。您认为我应该如何使列表元素可点击?我找了一个URL属性,但我没有看到它。我需要包装一个<一个人吗?
<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>
答案 0 :(得分:30)
您需要将列类型从BoundColumn更改为超链接列。
<asp:hyperlinkfield headertext="NewsHeadline"
datatextfield="NewsHeadline"
datanavigateurlfield="NewsURL"
datanavigateurlformatstring="http://{0}" />
除了进行此更改之外,您还需要确保选择URL或可用于创建新闻文章链接的内容。在上面的示例中,我假设您可以从SQL源中获取URL。如果它是一个ID,只需输入其余的网址就像这样......“〜/ MyNewsPage.aspx?NewsID = {0}”......
答案 1 :(得分:9)
改为使用hyperlinkfield:
<asp:hyperlinkfield datatextfield="NewsHeadline"
datanavigateurlfields="NewsID"
datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" />
答案 2 :(得分:3)
您需要使用超链接字段而不是BoundField,如下所示:
<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 :(得分:3)
像这样的东西在Visual Studio 2010中可以作为一个很好的解决方案。
GridView
GridView
上,然后点击右上角显示的箭头。SELECT News_Id, NewsHeadline FROM NewsHeadline
SqlDataSource
,现在是DataSource
的{{1}}。GridView
的代码所在位置,并替换为以下代码。代码:
GridView
你们都准备好了。这将创建一个包含超链接的所有标题的列表,其中包含动态生成的唯一链接,该链接指向我们使用与<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>
newsdetails.aspx
对应的PRIMARY KEY
News_Id
生成的查询字符串的NewsHeadline
页面补充NewsHeadline表中的条目。
然后,当您加载newsdetails.aspx
页面时,使用:Request.QueryString["News_Id"]
从URL获取News_Id
值,并使用它来查询数据库以获取有关特定{{1}的详细信息被点击的。然后,您可以在网页上显示该查询的结果。
答案 4 :(得分:2)
HyperLinkField将像其他人指出的那样运作良好。但是,如果您希望整个行可单击,您可以使用自定义服务器控件来实现SO帖子"Making an entire row clickable in a gridview"中建议的GridView。
查看我在how to implement a C# custom server control上发布的关于实施该问题的问题。
只是另一种选择。