[英]Dynamically create item template hyperlink field in gridview ASP.NET
我試圖動態創建一個模板字段,該字段具有包含超鏈接字段的項目模板。 嘗試在后端asp.net代碼中重新創建以下代碼:
<asp:TemplateField HeaderText="Total" SortExpression="TotalCases" ItemStyle-HorizontalAlign ="Center" ControlStyle-ForeColor="Black">
<ItemTemplate>
<asp:HyperLink ID="TotalCases" Target="_blank" runat="server" Text='<%# Eval("TotalCases") %>' />
</ItemTemplate>
</asp:TemplateField>
我創建了一個名為totalcases的新模板字段,現在我試圖將項目模板作為超鏈接字段獲取,這就是我遇到的問題
TemplateField TotalCases = new TemplateField();
TotalCases.HeaderText = "Total";
TotalCases.SortExpression = "TotalCases";
TotalCases.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
TotalCases.ControlStyle.ForeColor = System.Drawing.Color.Black;
TotalCases.ItemTemplate = new HyperLink(); //THIS DOESNT WORK
clientgv.Columns.Add(TotalCases);
錯誤:無法將類型System.Web.UI.WebControls.Hyperlink轉換為System.Web.UI.Template。 存在顯式轉換。
我正在嘗試獲取在rowdatabound方法中分配的超鏈接URL,但它找不到該超鏈接,並且在調試時返回為null
HyperLink hltc = (HyperLink)e.Row.FindControl("TotalCases");
看下面的代碼。
TemplateField customField = new TemplateField();
customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "FirstName", ControlType.HyperLink);
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "First Name", ControlType.Label);
gv.Columns.Add(customField);
public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private ControlType controlType;
private string columnName;
public GridViewTemplate(DataControlRowType type, string colname, ControlType contType)
{
templateType = type;
columnName = colname;
controlType = contType;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = "<b>" + columnName + "</b>";
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
WebControl firstName = null;
switch (controlType)
{
case ControlType.Label:
firstName = new Label();
break;
case ControlType.HyperLink:
firstName = new HyperLink();
break;
default:
break;
}
firstName.DataBinding += new EventHandler(this.FirstName_DataBinding);
container.Controls.Add(firstName);
break;
}
}
private void FirstName_DataBinding(Object sender, EventArgs e)
{
GridViewRow row = null;
switch (controlType)
{
case ControlType.Label:
Label l = (Label)sender;
row = (GridViewRow)l.NamingContainer;
l.Text = DataBinder.Eval(row.DataItem, "FirstName").ToString();
break;
case ControlType.HyperLink:
HyperLink l2 = (HyperLink)sender;
row = (GridViewRow)l2.NamingContainer;
l2.Text = DataBinder.Eval(row.DataItem, "FirstName").ToString();
l2.NavigateUrl = "https://www.google.com";
break;
}
}
}
public enum ControlType
{
Label = 1,
HyperLink = 2
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.