(一). 概述
1. 做了個GridViewExtend自定義控件, 通過註冊擴展自定義表頭事件, 可以任意設置Header的格式.
2. 易重用代碼, 只要將ExtendGridView.dll 文件添加到項目引用即可.
(二). 運行截圖
(三). 使用步驟
1. 將ExtendGridView.dll 添加到自己的Web站點中, 並在設計器中添加一個GridViewExpendHeader控件.
2. 註冊事件, 如圖
3. 在後臺代碼事件中編寫重構GridView's HeaderRow的事件
(四). 完整代碼
1. 主控件類GridViewExpend.cs代碼
2 /// Author: ChengKing(ZhengJian)
3 /// </summary>
4 [ToolboxData("<{0}:GridViewExpendHeader runat=server></{0}:GridViewExpendHeader>")]
5 public class GridViewExpendHeader : GridView
6 {
7 [Description("當需要重新構造Header時觸發此事件")]
8 public event System.EventHandler RebuildHeader;
9
10 protected override void Render(HtmlTextWriter writer)
11 {
12 OnRebuildHeader();
13
14 base.Render(writer);
15 }
16 protected override void CreateChildControls()
17 {
18 base.CreateChildControls();
19 }
20
21 protected virtual void OnRebuildHeader()
22 {
23 //重新構造Head
24 if (RebuildHeader != null)
25 {
26 RebuildHeaderEventArgs args = new RebuildHeaderEventArgs();
27 args.GridViewObject = this;
28 args.HeaderRowObject = this.HeaderRow;
29
30 RebuildHeader(this, args);
31 }
32 }
33 }
2. RebuildHeaderEventArgs.cs 文件代碼
2 /// 承載重構Header事件所需的參數[Author:ChengKing(ZhengJian)]
3 /// </summary>
4 public class RebuildHeaderEventArgs : EventArgs
5 {
6 private GridViewExpendHeader _GridViewObject;
7 private GridViewRow _HeaderRowObject;
8
9 /// <summary>
10 /// 存儲GrivViewExtend對象本身
11 /// </summary>
12 public GridViewExpendHeader GridViewObject
13 {
14 get
15 {
16 return _GridViewObject;
17 }
18 set
19 {
20 _GridViewObject = value;
21 }
22 }
23
24 /// <summary>
25 /// 存儲GrivViewExtend的HeaderRow對象
26 /// </summary>
27 public GridViewRow HeaderRowObject
28 {
29 get
30 {
31 return _HeaderRowObject;
32 }
33 set
34 {
35 _HeaderRowObject = value;
36 }
37 }
38 }
3. 頁面測試文件: default.aspx文件代碼
2 <form id="form1" runat="server">
3 <div class="a">
4 <cc1:GridViewExpendHeader id="GridViewExpend1" runat="server" BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" OnRebuildHeader="GridViewExpend1_RebuildHeader" >
5 <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
6 <RowStyle BackColor="White" ForeColor="#003399" />
7 <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
8 <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
9 <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
10 <AlternatingRowStyle BackColor="Lavender" />
11 </cc1:GridViewExpendHeader>
12
13 </div>
14 </form>
15 </body>
4. 後臺重構HeaderRow事件代碼
2 /// 具體重寫方法, 此方法比較靈活, 可以任意設置您需要創建的格式, 比如更復雜的表格
3 /// 另外, 可以直接從第二個參數中取得控件對象引用
4 /// </summary>
5 /// <param name="sender"></param>
6 /// <param name="e"></param>
7 protected void GridViewExpend1_RebuildHeader(object sender, EventArgs e)
8 {
9 //取得參數e中包含的對象的引用
10 GridViewExpendHeader currentGVE = ((RebuildHeaderEventArgs)e).GridViewObject; //到操作當前GridView的對象引用
11 GridViewRow currentHeaderRow = ((RebuildHeaderEventArgs)e).HeaderRowObject; ////到操作當前GridView's HeaderRow的對象引用
12
13
14 //創建一個行並設置與GridViewExtend當前的頭類型風格一致
15 GridViewRow willAddHeaderRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
16 willAddHeaderRow.Font.Bold = true;
17 willAddHeaderRow.BackColor = Color.FromName("#003399");
18 willAddHeaderRow.ForeColor = Color.FromName("#CCCCFF");
19
20 ////在當前HeaderRow上面再增加一行
21 TableCell cell = new TableCell();
22 cell.Text = "Number";
23 cell.HorizontalAlign = HorizontalAlign.Center;
24 willAddHeaderRow.Cells.Add(cell);
25
26 cell = new TableCell();
27 cell.Text = "Detail";
28 cell.ColumnSpan = 2;
29 cell.HorizontalAlign = HorizontalAlign.Center;
30 willAddHeaderRow.Cells.Add(cell);
31
32 currentGVE.Controls[0].Controls.AddAt(0, willAddHeaderRow);
33 }
(五). 示例代碼下載
http://www.cnblogs.com/Files/MVP33650/ExtendGridViewHeader.rar
(六). 控件開發其它相關文章:
http://blog.csdn.net/ChengKing/category/288694.aspx