簡體   English   中英

在gridview ASP.NET中動態創建項目模板超鏈接字段

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM