動態模板類使用 ITemplate 介面 GridView動態模板

來源:互聯網
上載者:User
GridView中動態添加模板,這個操作不複雜,主要調用了ITemplate 介面及其方法InstantiateIn,可能會用到TemplateField類。以GridView中動態添加模板列為例。

  首先根據建立一個實現ITemplate 介面的類,並重寫InstantiateIn方法:

/// <summary>
/// 模板類
/// </summary>
public class GridViewLiteralTemplated : ITemplate
{
     private DataControlRowType templateType;//行類型
     private string columnName;// 列名稱
   private string dataField;// 欄位名稱
     private string literalID;// Literal 控制項ID
     private bool showOrNot;// 是否顯示欄位標題

 

  public GridViewLiteralTemplated(DataControlRowType type, string colname, string datafield, string litID, bool showYN)
        {
            templateType = type;
            columnName = colname;
            dataField = datafield;
            literalID = litID;
            showOrNot = showYN;
        }

 

        /// <summary>
        /// 重寫InstantiateIn方法,處理行類型
        /// </summary>
        /// <param name="container"></param>
        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (templateType)
            {
                case DataControlRowType.Header:
                    Literal lc = new Literal();
                    lc.Text = columnName;
                    lc.Visible = showOrNot;
                    container.Controls.Add(lc);
                    break;
                case DataControlRowType.DataRow:
                    Literal lit = new Literal();
                    lit.ID = literalID;
                    lit.Visible = showOrNot;
                    container.Controls.Add(lit);
                    break;
                default:
                    break;
            }
        }
    }

 

說明:行類型是區別是標題列還是記錄行;列名稱是標題列的列名稱; 欄位名稱是與查詢語句中對應的名稱,用於資料繫結;Literal 控制項ID是前台顯示的載體;是否顯示欄位標題則是根據需要來顯示或隱藏某些列。

 

  類寫好後,就可以來調用,根據需求來確定參數的值。比如:

UserDepartPermissionGV.Columns.Clear();
 TemplateField tfID = new TemplateField();
tfID.HeaderTemplate = new GridViewLiteralTemplated(DataControlRowType.Header, "區劃編碼", "FID", "", false);
tfID.ItemTemplate = new GridViewLiteralTemplated(DataControlRowType.DataRow, "", "", "AreaID", false);
 UserDepartPermissionGV.Columns.Add(tfID);

TemplateField tfName = new TemplateField();
tfName.HeaderTemplate = new GridViewLiteralTemplated(DataControlRowType.Header, "區劃名稱", "FNAME", "", true);
tfName.ItemTemplate = new GridViewLiteralTemplated(DataControlRowType.DataRow, "", "", "DepartmentID", true);
UserDepartPermissionGV.Columns.Add(tfName);

這種寫法如果要手寫許多列,則相當麻煩,適合從資料庫中批量處理。

前台頁面的GRIDVIEW :

<asp:GridView ID="UserDepartPermissionGV" runat="server"   AutoGenerateColumns="false"           OnRowDataBound="UserDepartPermissionGV_RowDataBound"

Width="1000px">
</asp:GridView>

動態模板列實現方法有幾種,你可以根據需求寫出自己的模板列。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.