如何在动态的网格视图列中添加超链接

3

我有一个问题,希望有人可以帮忙。

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

我尝试使用动态模板字段来实现这一点。但是即使绑定了数据,我也无法获取列的超链接。我能够获取数据,但无法获取超链接。

这是实现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();
    }
} 
1个回答

9
我不确定我完全理解你想要实现的内容,但我认为你不需要为此构建自己的模板类。也许你使用“动态网格视图”这个术语时意思与我所想的不同,但如果你需要在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);
        }
    }

太好了,我按照你说的创建了超链接。但现在我需要在点击超链接时弹出一个弹窗。需要向弹窗屏幕传递一个参数。有什么想法吗? - Avi
抱歉回复晚了。有几种方法可以实现。我认为最简单的方法是使用JavaScript创建另一个窗口。您可以创建一个JavaScript函数,例如以下内容,并在查询字符串中传递带有参数的URL: function createWindow(url) { var newWindow = window.open(url, "newWindow", "toolbar=yes,scrollbars=yes,width=650,height=500"); }另一种选择是使用Microsoft的Ajax Control Toolkit,其中包括一些不错的弹出功能。我的经验表明,如果保持简单,它并不难使用。 - Dr. Wily's Apprentice
我有一个.csv文件需要在超链接点击时打开...你能帮我解决这个问题吗?谢谢。 - shruti
@shruti 首先要确定客户端/浏览器如何访问服务器上的 .csv 文件(即客户端将使用哪个 URL 访问文件)。.csv 文件是静态文件吗?如果是,您可以考虑将实际的 .csv 文件放在您的网站内,并将适当的 URL 分配为超链接的目标 URL。如果 .csv 文件是由服务器动态生成的,则可以使用自定义 ASP.NET 处理程序将 .csv 内容直接写入响应流中。搜索网站以寻找类似的问题,但如果没有帮助,您可以将其作为新问题提出。 - Dr. Wily's Apprentice
你好 @Avi,能否有人帮忙解决这个问题?我已经跟进了几天,但仍然没有得到正确的答案。 - Mahendra

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