動態模板類使用 ITemplate 接口 GridView動態模板

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>

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章