[英]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
设置NavigateUrl
或Text
。 在那里您只需创建控件。 您将根据行的DataItem
在RowDataBound
对其进行数据绑定。
但是:
尽管您可以向数据绑定控件动态添加字段,但强烈建议静态声明字段,然后根据需要显示或隐藏字段。 静态声明所有字段会减少父数据绑定控件的视图状态的大小。
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.