【问题标题】:how to create a link in gridview in asp.net如何在asp.net的gridview中创建链接
【发布时间】:2013-11-05 20:49:41
【问题描述】:

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

http://localhost/Test.aspx?code=123

当用户在gridview中点击某一行的链接时,它会打开一个空白页面并显示一些结果。

这是我如何将数据绑定到gridview,但我不知道如何设置链接

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 列中建立链接?

【问题讨论】:

标签: c# asp.net gridview linkbutton


【解决方案1】:

这有一个技巧。超链接列不起作用,因为您无法格式化链接。您想使用绑定字段并格式化文本。像这样

<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>

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

【讨论】:

  • 我应该在哪里添加这段代码?请告诉我应该把这段代码放在哪里?
  • @Smeegs - 您可以在 TemplateField 内使用 HyperLink 控件并格式化 URL 以进行导航,请参阅我的答案。
  • 我知道,我在回答中提到了这一点。但是,除非您正在处理编辑和插入模板。要获得相同的结果,这太过分了。
  • @Smeegs - 完全不同意 TemplateField 是矫枉过正,除非您正在编辑或插入模板,它对于处理数据绑定事件 (OnRowBound) 非常有用,因此您可以通过 ID 查找控件而不是依赖单元格索引,因为 BoundFields 没有 ID 属性。
  • @KarlAnderson 这真的取决于你想如何使用该列。我完全同意你的例子。在那种情况下TemplateField 并不过分,这是完全必要的。但是,在这种情况下,发布者只想渲染一个超链接。对于请求的功能,与格式化字符串相比,创建整个模板是多余的。
【解决方案2】:

将此添加到您的网格视图标记中的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】:

    对我来说是这样的

    <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 并不是这样工作的。我希望它这样做,但它用于格式化数值。 msdn.microsoft.com/en-us/library/…
    • 我的错误。我在想别的事。
    【解决方案4】:

    您应该能够在标记中使用 HyperLinkColumn。

    HyperlinkColumn Documentation

    【讨论】:

    • 请提供一个工作示例(例如:包括代码) - 从常见问题解答中不允许仅链接答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多