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>
動態模板列實現方法有幾種,你可以根據需求寫出自己的模板列。