繁体   English   中英

GridView动态添加超链接

[英]Dynamically add HyperLink in GridView

我有两种类型的代码:第一种:

               <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:HyperLink runat="server" Text="Скачать объект" NavigateUrl='<%#"objects/" + Eval("Идентификатор") %>'></asp:HyperLink>
                    </ItemTemplate>    
                </asp:TemplateField>
               </Columns>

工作正常。 但是 TemplateField 每次都显示。

第二

            TemplateField templField = new TemplateField();
            HyperLink hypLink = new HyperLink();
            hypLink.NavigateUrl = "<%#\"objects/\" + Eval(\"Идентификатор\") %>";
            hypLink.Text = "Скачать объект";
            templField.InsertItemTemplate = (ITemplate)hypLink;
            tableResults.Columns.Add(templField);

错误不起作用:无法将“System.Web.UI.WebControls.HyperLink”类型的对象转换为“System.Web.UI.ITemplate”类型。 为什么第 1 次添加 HyperLink,第 2 次没有?

这可能有助于开始:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    { 
        var hyperlinkField = new TemplateField();
        hyperlinkField.ItemTemplate = new HyperlinkColumn();
        tableResults.Columns.Add(linkField);
    }
}


class HyperlinkColumn : ITemplate
{
    public void InstantiateIn(System.Web.UI.Control container)
    {
        HyperLink hypLink = new HyperLink()
        container.Controls.Add(link);
    }
}

请注意,您不能从InstantiateIn设置NavigateUrlText 在那里您只需创建控件。 您将根据行的DataItemRowDataBound对其进行数据绑定。

但是

尽管您可以向数据绑定控件动态添加字段,但强烈建议静态声明字段,然后根据需要显示或隐藏字段。 静态声明所有字段会减少父数据绑定控件的视图状态的大小。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.templatefield.templatefield.aspx

templField.InsertItemTemplate需要一个ITemplate对象,因为超链接不扩展此接口。

在您的第一个声明性示例中,超链接是ItemTemplate的主机,它扩展了此接口ITemplate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM