如何在ASP.NET中的GridView中创建链接

11

我正在尝试创建一个带有网格视图的网页。这个网格视图应该有像下面这样的链接

http://localhost/Test.aspx?code=123
当用户在网格视图中单击某一行的链接时,它将打开一个空白页并显示一些结果。
这是我如何将数据绑定到网格视图的方式,但我不知道如何设置链接。
protected void Page_Load(object sender, EventArgs e)
{
    string firma_no = logoFrmNr.ToString().PadLeft(3, '0');
    string active_period = logoFrmPeriod.PadLeft(2, '0');

    SqlConnection conn = new SqlConnection(conStr);
    string selectSql = @"SELECT 
                                LOGICALREF,
                                CODE , 
                                DEFINITION_ ,
                                FROM 
                                LG_CLFLINE";

    SqlCommand cmd = new SqlCommand(selectSql, conn);
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    GridView1.DataSource = dt;
    GridView1.DataBind();

    conn.Close();
}

这里是标记

<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
</asp:GridView>

如何从 CODE 列创建链接?


1
请展示您的标记代码! - Pilgerstorfer Franz
1
请参考:https://dev59.com/G3VD5IYBdhLWcg3wL4cASqlConnection和SqlCommand是非托管类。您的代码可能会导致难以识别的问题。 - NotMe
5个回答

12

有一个窍门。Hyperlinkcolumn不起作用,因为您无法格式化链接。 您需要使用boundfield并格式化文本。 就像这样

<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
    <Columns>
        <asp:BoundField DataField="Code" HtmlEncode="False" DataFormatString="<a target='_blank' href='Test.aspx?code={0}'>Link Text Goes here</a>" />
    </Columns>
</asp:GridView>

如果需要指定编辑和插入模板,您可以使用TemplateField。


我应该在哪里添加这段代码?请告诉我在哪里放置这段代码? - Arif YILMAZ
@Smeegs - 你可以在 TemplateField 中使用 HyperLink 控件,并格式化 URL 进行导航,详见我的回答。 - Karl Anderson
我知道,我在我的回答中提到了这一点。但是,除非你正在处理编辑和插入模板。那么为了得到相同的结果而进行这样的操作就有些过度了。 - Smeegs
@Smeegs - 完全不同意 TemplateField 只有在编辑或插入模板时才是过度设计,它非常有用于处理数据绑定事件 (OnRowBound),这样你可以通过 ID 查找控件而不是依赖单元格索引,因为 BoundField 没有 ID 属性。 - Karl Anderson
@KarlAnderson 这真的取决于您想如何使用该列。我完全同意您的例子。在那种情况下,TemplateField 不是过度设计,而是完全必要的。但是,在这种情况下,发帖人只想呈现超链接。为了请求的功能,相比于格式化字符串创建整个模板是过度设计。 - Smeegs
显示剩余4条评论

11

将以下代码添加到您网格视图标记中的Columns定义中:

<asp:TemplateField HeaderText="Hyperlink">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" 
            NavigateUrl='<%# Eval("CODE", @"http://localhost/Test.aspx?code={0}") %>' 
            Text='link to code'>
        </asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

3
对我来说,这就像是一些与IT技术有关的东西。
<asp:DataGrid id="MyDataGrid" 
           GridLines="Both"
           AutoGenerateColumns="false"
           runat="server">

         <HeaderStyle BackColor="#aaaadd"/>

         <Columns>

            <asp:HyperLinkColumn
                 HeaderText="Select an Item"
                 DataNavigateUrlField="code"
                 DataNavigateUrlFormatString="http://localhost/Test.aspx?code={0}"
                 Target="_blank"/>

         </Columns>

      </asp:DataGrid>

令人惊讶的是,DataNavigateUrlFormatString 并不像那样工作。我希望它能这样做,但它用于格式化数值。http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hyperlinkfield.datanavigateurlformatstring(v=vs.110).aspx - Smeegs
我的错,我在想其他事情。 - Smeegs

2

1
请提供一个工作示例(例如:包括代码)- 根据FAQ,不允许仅链接答案。 - Pilgerstorfer Franz

0

HyperLinkField可以使用

    <asp:GridView ID="MyGrid" runat="server">  
    <Columns>
    <asp:HyperLinkField DataNavigateUrlFields="Link" DataNavigateUrlFormatString="/{0}" DataTextField="Location" HeaderText="Location" SortExpression="Link" />
    </Columns>
    </asp:GridView>
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接