Asp.net 2.0 自定義控件開發[創建自定義HeaderRow的GridView控件][示例代碼下載]

 

 (一).  概述

        1. 做了個GridViewExtend自定義控件, 通過註冊擴展自定義表頭事件,  可以任意設置Header的格式.

        2. 易重用代碼, 只要將ExtendGridView.dll 文件添加到項目引用即可. 

實現原理:增加一個自定義事件,並將GridView(HeaderRow)引用作爲事件參數傳遞,使用時通
過註冊此事件來自定義頭的佈局,可以任意定製HeaderRow行數.

(二). 運行截圖

(三). 使用步驟

     1. 將ExtendGridView.dll 添加到自己的Web站點中, 並在設計器中添加一個GridViewExpendHeader控件.

    2. 註冊事件, 如圖

     

      3. 在後臺代碼事件中編寫重構GridView's HeaderRow的事件

(四). 完整代碼

   1. 主控件類GridViewExpend.cs代碼

 1 /// <summary>
 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 文件代碼

 1  /// <summary>
 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文件代碼

 1 <body>
 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事件代碼

 1/// <summary>
 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(00, 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

 

 

 

 

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