1. 程式人生 > WINDOWS開發 >C#編輯GridView的Thead

C#編輯GridView的Thead

背景

有這樣一個需求,需要更改GridView的Thead,即表頭。不只是多行表頭,而是任意的內容,可能是一段文字,也可能是一個圖片,綜合網上的一些資料,大致整理出一些做法。

內容

大致有兩種方法

第一種,就是在表頭裡塞元素,通過後臺程式碼一個個地新增,包括排版樣式等等。這樣做其實比較麻煩,主要是不直觀,不熟悉的話就需要一步步除錯。

第二種,就是在前端寫出內容,調整樣式,放在一個容器裡(Div或者Table),注意需要是伺服器控制元件,即需要新增ID,並設定runat="server"。然後在後臺獲取此容器內容新增到Thead的一行中即可。

現在我們具體來做。

方法一

前端

<asp:GridView ID="
gvDataList" runat="server" CssClass="table-condensed table-hover"
BorderStyle="None" CellPadding="0" GridLines ="None"
AutoGenerateColumns="False" OnPreRender="GridView1_PreRender" OnRowCreated="GridView1_RowCreated" >
……

後臺

    protected void GridView1_PreRender(object sender,EventArgs e)
        {
            
if (gvDataList.Rows.Count > 0) { // 使用<TH>替換<TD> gvDataList.UseAccessibleHeader = true; gvDataList.HeaderRow.TableSection = TableRowSection.TableHeader; gvDataList.FooterRow.TableSection = TableRowSection.TableFooter; } }
protected void GridView1_RowCreated(object sender,GridViewRowEventArgs e) { switch (e.Row.RowType) { case DataControlRowType.Header: e.Row.BackColor = System.Drawing.Color.White;//去除底色 TableCellCollection tcHeader = e.Row.Cells; tcHeader.AddAt(0,new TableHeaderCell()); tcHeader[0].Text = "表格1"; tcHeader[0].Attributes.Add("colspan","2"); tcHeader[0].Attributes.Add("style","height:30px;"); tcHeader.AddAt(1,new TableHeaderCell()); tcHeader[1].Text = "表格2"; tcHeader[1].Attributes.Add("colspan","2"); tcHeader[1].Attributes.Add("style","height:30px;"); tcHeader.AddAt(2,new TableHeaderCell()); tcHeader[2].Text = "表格3"; tcHeader[2].Attributes.Add("colspan","4"); tcHeader[2].Attributes.Add("style","height:30px;"); tcHeader.AddAt(3,new TableHeaderCell()); tcHeader[3].Text = "表格4</tr><tr>"; tcHeader[3].Attributes.Add("colspan","2"); tcHeader[3].Attributes.Add("style","text-align:right;height:30px;");             break; } }

方法二

前端

 <table id="TBHead" runat="server" border="0" align="center" width="1000px" cellspacing="0" cellpadding="0" class="main">
            <tr>
                <td colspan="1" class="style1">
                    <asp:TextBox ID="txtFtype" runat="server" class="HeadType"></asp:TextBox>
                </td>
                <td colspan="2" rowspan="2" class="style1">                      
                    <asp:Label ID="lblHeaderF" runat="server" class="HeadTitle"></asp:Label>
                </td>
                <td colspan="1" class="style1">
                    <asp:Label ID="lbldate" runat="server"  class="HeadTime"></asp:Label>
                </td>
            </tr>
</table>


<asp:GridView ID="gvDataList" runat="server"  CssClass="table-condensed table-hover" 
BorderStyle="None" CellPadding="0" GridLines ="None" 
AutoGenerateColumns="False" OnPreRender="GridView1_PreRender" OnRowCreated="GridView1_RowCreated" >
……

後臺

 protected void GridView1_PreRender(object sender,EventArgs e)
        {
            if (gvDataList.Rows.Count > 0)
            {
                // 使用<TH>替換<TD>
                gvDataList.UseAccessibleHeader = true;
                gvDataList.HeaderRow.TableSection = TableRowSection.TableHeader;
                gvDataList.FooterRow.TableSection = TableRowSection.TableFooter;
                
            }
        }

 protected void GridView1_RowCreated(object sender,GridViewRowEventArgs e)
        {
            switch (e.Row.RowType)
            {
                case DataControlRowType.Header:
                    e.Row.BackColor = System.Drawing.Color.White;//去除底色
                    TableCellCollection tcHeader = e.Row.Cells;
tcHeader.AddAt(
0,new TableHeaderCell()); tcHeader[0].Attributes.Add("colspan","10"); tcHeader[0].Text = "</tr><tr>"; HtmlTable demo = TBHead; tcHeader[0].Controls.Add(demo); tcHeader.AddAt(1,new TableHeaderCell()); tcHeader[1].Text = "</tr><tr style=\"background-color: #D9EDF7;\">"; break; } }