c# - 如何将超链接添加到动态 gridview 列

标签 c# asp.net

我有一个问题希望有人能提供帮助。

我有一个动态的 Gridview。我需要在 gridview 列上有一个 hyperlink。这些超链接应打开一个弹出窗口以在点击时显示某些数据。

我通过动态模板字段尝试了这一点。但即使在绑定(bind)数据时,我也无法获得该列的超链接。我能够获取数据但不能获取超链接。

这是实现 ITemplateHyperLinkTemplate 类。

public class HyperLinkTemplate : ITemplate
{
    private string m_ColumnName;
    public string ColumnName
    {
        get { return m_ColumnName; }
        set { m_ColumnName = value; }
    }

    public HyperLinkTemplate()
    {
        //
        // TODO: Add constructor logic here
        //
    }
    public HyperLinkTemplate(string ColumnName)
    {
        this.ColumnName = ColumnName;

    }

    public void InstantiateIn(System.Web.UI.Control ThisColumn)
    {
        HyperLink HyperLinkItem = new HyperLink();
        HyperLinkItem.ID = "hl" + ColumnName;
        HyperLinkItem.DataBinding += HyperLinkItem_DataBinding;
        ThisColumn.Controls.Add(HyperLinkItem);

    }

    private void HyperLinkItem_DataBinding(object sender, EventArgs e)
    {
        HyperLink HyperLinkItem = (HyperLink)sender;
        GridViewRow CurrentRow = (GridViewRow)HyperLinkItem.NamingContainer;
        object CurrentDataItem = DataBinder.Eval(CurrentRow.DataItem, ColumnName);
        HyperLinkItem.Text = CurrentDataItem.ToString();
    }
} 

最佳答案

我不完全确定我是否理解您要完成的任务,但我认为您不必为此构建自己的模板类。

您的意思可能与我所说的“动态 GridView ”一词不同,但是如果您需要向 GridView 中的列的每一行添加一个超链接,并且如果您需要在代码中执行此操作- 后面,那么我建议处理 GridView 的 RowDataBound 事件并在事件处理程序中执行类似以下操作:

    protected void grdData_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink link = new HyperLink();
            link.Text = "This is a link!";
            link.NavigateUrl = "Navigate somewhere based on data: " + e.Row.DataItem;
            e.Row.Cells[ColumnIndex.Column1].Controls.Add(link);
        }
    }

关于c# - 如何将超链接添加到动态 gridview 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819381/

相关文章:

c# - 如何使用 Newtonsoft.JSON JObject 获得一致的日期时间值

asp.net - session 在一个站点上有效,但在同一台计算机上的另一个站点上无效

javascript - 通过 clientid 服务器端 asp.net 获取禁用的文本框值

c# - 为什么 asp.net 使用 GUID 列而不是 bigint

c# - ASP.NET 5 (vNext) - 获取配置设置

c# - RSA 加密 : moving code from js to C#

c# - 通过 C# 解析 csproj - 无法解析 ItemGroup

c# - 但是,虽然稍后将明文密码分配给密码,但该变量永远不会从内存中清除

ASP.NET MVC EF 调用带输出参数的 MySQL 存储过程

C# 语法解释