将链接列添加到ASP.NET GridView

时间:2009-12-04 23:05:48

标签: asp.net gridview hyperlink

我想输出可点击的新闻标题列表。到目前为止,我可以打印出标题列表,因为我在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>

5 个答案:

答案 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中可以作为一个很好的解决方案。

  1. 在VS。
  2. 的网页的Designer标签中创建GridView
  3. 将鼠标悬停在GridView上,然后点击右上角显示的箭头。
  4. 转到“选择数据源”并选择“新数据源...”
  5. 创建数据库的连接字符串,然后选择NewsHeadline表。
  6. 撰写查询SELECT News_Id, NewsHeadline FROM NewsHeadline
  7. 完成设置。现在应该在Source选项卡中生成一些代码。这也会创建一个SqlDataSource,现在是DataSource的{​​{1}}。
  8. 转到“源”标签中GridView的代码所在位置,并替换为以下代码。
  9. 代码:

    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上发布的关于实施该问题的问题。

只是另一种选择。