[英]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.