1. 程式人生 > >asp.net gridview多行標題合併(通用)

asp.net gridview多行標題合併(通用)

效果圖


前臺程式碼

	<asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="false">
            <Columns>
                <asp:BoundField DataField ="NO" HeaderText ="No" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第一季度|1月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第一季度|2月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第一季度|3月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第二季度|4月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第二季度|5月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第二季度|6月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第三季度|7月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第三季度|8月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第三季度|9月" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|10月|計劃" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|10月|實際" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|11月|計劃" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|11月|實際" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|12月|計劃" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|12月|實際" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度|第四季度|合計" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="上半年|計劃" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="上半年|實際" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="上半年|達成率" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="下半年|計劃" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="下半年|實際" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="下半年|達成率" HeaderStyle-HorizontalAlign ="Center" />
                <asp:BoundField DataField ="NO" HeaderText ="年度合計" HeaderStyle-HorizontalAlign ="Center" />
            </Columns>
        </asp:GridView>


後臺程式碼

Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        If e.Row.RowType = DataControlRowType.Header Then
            Dim intLayerLevel As Integer = 0
            Dim tcOld(e.Row.Cells.Count - 1) As TableCell
            e.Row.Cells.CopyTo(tcOld, 0)
            Dim intLength As Integer = 0
            Dim strSplit As String = "|"
            '獲取最大層數
            For i As Integer = 0 To e.Row.Cells.Count - 1
                intLength = tcOld(i).Text.Split(strSplit).Length
                If intLength > intLayerLevel Then
                    intLayerLevel = intLength
                End If
            Next
            '移除標題
            e.Row.Cells.Clear()

            Dim tcHeader As New TableHeaderCell
            Dim intFlag As Integer = 0

            '處理行
            For intLevel As Integer = 1 To intLayerLevel
                For intOldCell As Integer = 0 To tcOld.Length - 1

                    '取得header的層級名
                    Dim arrHeader() As String = tcOld(intOldCell).Text.Split(strSplit)
                    If arrHeader.Length = intLevel Then '層級的名稱等於當前層數時
                        intFlag = intFlag + 1

                        If intOldCell = tcOld.Length - 1 _
                           OrElse (tcOld(intOldCell + 1).Text.Split(strSplit).Length >= intLevel _
                                   AndAlso arrHeader(intLevel - 1) <> tcOld(intOldCell + 1).Text.Split(strSplit)(intLevel - 1)) _
                           OrElse tcOld(intOldCell).Text <> tcOld(intOldCell + 1).Text Then

                            tcHeader = New TableHeaderCell()
                            tcHeader.ColumnSpan = intFlag
                            '如果當前header的層數小於最大層數,則設定該cell的行合併值
                            If intLayerLevel > intLevel Then
                                tcHeader.RowSpan = intLayerLevel - intLevel + 1 '定義表頭的所佔的行數 
                            End If
                            tcHeader.Text = arrHeader(intLevel - 1) '設定cell文字
                            tcHeader.CssClass = Me.GridView1.HeaderStyle.CssClass '設定cell樣式
                            e.Row.Cells.Add(tcHeader) '新增cell

                            intFlag = 0
                        End If

                    ElseIf arrHeader.Length > intLevel Then '如果層級的名稱大於當前層數時
                        intFlag = intFlag + 1
                        '原標題的列數最後一列
                        '原標題的層數小於當前層數
                        '當前cell的上級層級名不等於原標題的當前層級名
                        If intOldCell >= tcOld.Length - 1 _
                           OrElse tcOld(intOldCell).Text.Split(strSplit).Length < intLevel _
                           OrElse arrHeader(intLevel - 1) <> tcOld(intOldCell).Text.Split(strSplit)(intLevel - 1) Then
                            tcHeader = New TableHeaderCell
                            tcHeader.ColumnSpan = intFlag
                            tcHeader.Text = arrHeader(intLevel - 1)
                            tcHeader.CssClass = Me.GridView1.HeaderStyle.CssClass
                            e.Row.Cells.Add(tcHeader)
                            intFlag = 0
                        ElseIf tcOld(intOldCell).Text.Split(strSplit).Length <> tcOld(intOldCell + 1).Text.Split(strSplit).Length Then
                            If (arrHeader.Length >= intLevel _
                               AndAlso tcOld(intOldCell + 1).Text.Split(strSplit).Length >= intLevel _
                               AndAlso arrHeader(intLevel - 1) <> tcOld(intOldCell + 1).Text.Split(strSplit)(intLevel - 1)) _
                               OrElse tcOld(intOldCell + 1).Text.Split(strSplit).Length < intLevel Then

                                tcHeader = New TableHeaderCell
                                tcHeader.ColumnSpan = intFlag
                                tcHeader.Text = arrHeader(intLevel - 1)
                                tcHeader.CssClass = Me.GridView1.HeaderStyle.CssClass
                                e.Row.Cells.Add(tcHeader)
                                intFlag = 0
                            End If

                        ElseIf tcOld(intOldCell).Text.Split(strSplit).Length = tcOld(intOldCell + 1).Text.Split(strSplit).Length Then
                            If arrHeader(intLevel - 1) <> tcOld(intOldCell + 1).Text.Split(strSplit)(intLevel - 1) Then
                                tcHeader = New TableHeaderCell
                                tcHeader.ColumnSpan = intFlag
                                tcHeader.Text = arrHeader(intLevel - 1)
                                tcHeader.CssClass = Me.GridView1.HeaderStyle.CssClass
                                e.Row.Cells.Add(tcHeader)
                                intFlag = 0
                            End If
                        End If
                    End If
                Next
                If intLevel < intLayerLevel Then
                    If Not tcHeader Is Nothing Then
                        tcHeader.Text = tcHeader.Text + "</tr><tr>"
                    End If
                End If
            Next

        End If
    End Sub



相關推薦

asp.net gridview標題合併(通用)

效果圖 前臺程式碼 <asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="false"> <Columns>

asp.net GridView表頭的實現

方法一:多行表頭合併效果圖測試多行合併表頭表頭表頭1表頭2表頭3表頭1-1表頭2-1表頭2-2表頭3-1表頭3-2表頭3-3 1 protected void GridView1_RowCreated(object sender, GridViewRowEventA

ASP.NET文字框

<asp:textbox   id="txtWXMT"   runat="server"   Width="100%"   Height="108px"   TextMode="MultiLine"><

GRIDVIEW合併單元格(合併列)

左邊是原始資料的顯示,右邊是應用合併列之後的效果。 從圖中可以看到,二級指標有兩列,有的行中兩列的內容一樣,有的則不一樣,如果實現如右圖所示,看起來效果會更好一些。下面就著手實現這個功能,我的實現原理很簡單,就是遍歷GridView的行和遍歷行中的單元格,如果單元格的前一列和當前列的內容相同就合

ASP.NET GridView中文字內容無法換(自動換/正常換)

最近做專案的時候,遇到這樣一個問題:我用GridView來顯示課程表,每個單元格的內容包括課程名、上課地點、教師姓名,然後我想讓它們分行顯示,效果如下圖: 可是呢,GridView太頑強了,不管我拼接字串時用“\r\n”還是"<br/>",結果都無濟於事,

ASP.NET Gridview 控制單元格換及隱藏列

        特別注意:設定單元格的寬度不起作用,二.控制整個Gridview的換行,在RowDataBound事件中加以下語句        gvDeliverySummary.Attributes.Add("style", "word-break:keep-all;word-wrap:normal");

ASP.NET GridView 後臺繫結點選觸發SelectedIndexChanged,頁面重新整理後,只有一頁的情況下,事件只觸發一次

如題,小弟剛接觸asp.net不久,所以有很多不懂,望高手們不吝賜教。 下面進入正題,後臺程式碼如下 <pre name="code" class="csharp"> protected void GridView1_RowDataBound(object se

asp.net GridView 在報表底部增加合計

首先:在GridView 屬性設定中,ShowFooter 設為 true方法一:使用SQL查詢統計出合計值,在繫結GridView時讓其結果賦於一個DataTable(全域性變數),然後在RowDataBound事件中 if (e.Row.RowType == DataC

asp.net GridView 表格之選中行

asp.net 技術 行數據 event tar tree lin asc end 一、GridView 表格之選中行 asp.net選中行的功能最初以為只能通過屬性中AllowGenerateSelectButton(運行時是否自動生成選擇按鈕)來實現,需要點擊生成的選擇

asp.net GridView 表格之取消設計最初顯示的綁定列

col 會有 .com .net ges als 結果 oge false 新建 GridView後若手動添加設置列,會有最初的綁定列,如下所示,顯示無用的最後面的幾列,雖運行時不影響但在設計時感覺還是怪怪的,如何不顯示呢 這時只需要將屬性列中AutoGenerateCo

asp.net後臺線程的使用

next .net 結束 bind ack sta pki mes system ======== 調用無參數的方法 ============ //創建線程對象 傳入 委托線程執行的方法 Thread ts = new Threa

ASP.NET Core 運原理剖析1:初始化WebApp模版並運

正式版 功能 option urn server ack reference 修改 tin ASP.NET Core 運行原理剖析1:初始化WebApp模版並運行 核心框架 ASP.NET Core APP 創建與運行 總結 之前兩篇文章簡析.NET Core

ASP.NET 基礎文件上傳

filename req 操作 tex 多文件上傳 遍歷 httppost con get ////多圖上傳 [HttpPost] public string duo() { ///.net 多文件

ASP.NET webform次提交表單問題

的人 事件 client form gin ron 遇到 提交按鈕 orm 最近幾天遇到一個頭疼的問題,項目采用的是webform開發,每個界面都有個提交按鈕,點擊多次提交按鈕導致提交按鈕的OnClick事件執行了多次, 每次OnClick裏面都有一些邏輯處理,執行了

ASP.NET提取層嵌套json數據的方法

jar don ner blog 實例 prop tool 調用 class a 本文實例講述了ASP.NET利用第三方類庫Newtonsoft.Json提取多層嵌套json數據的方法,具體例子如下。 假設需要提取的json字符串如下: {"name":"lily","

ASP.NET MVC語言 仿微軟網站效果

string ride oca https net .cn 流程 exp att 文章轉載自:https://blog.csdn.net/cooldiok/article/details/78313513 微軟作為ASP.NET的創造者,它對於官網的結構設計肯定有值

ASP.NET 實現頁面合並一頁顯示

ssi 設置 form sdn 過程 使用 方式 顯示 用戶控件 目前業務有一個需求: 就是把多個網頁合並到一個頁面顯示, 在實現過程中我一般使用兩種方法: 利用母版頁設置導航欄, 定位到每個網頁; 利用用戶控件( .acsx 後綴的文件), 但是有個問題就是傳參比較麻煩

asp.net開啟線程異步處理

span dsta load returns post conf clas div exception protected void Page_Load(object sender, EventArgs e) { if (!IsP

ASP.NET Core環境配置文件問題

指定 它的 png ati shel 前言 命令 服務器 ctrl+c 前言 在我們開發的過程中,往往會有這幾個環境,Dev、QA、Pre和Pro。 當然不同的環境可能大家的叫法會有點不一樣。 最常遇到的問題,或許就是不同環境的配置文件問題! 一個環境一個配置文件是很常見

資料合併成一行

需求:在大資料平臺maxcompute上統計各個等級對應的人數,欄位大致如下 CREATE TABLE `XXXX` ( `requestid` char(32) DEFAULT NULL, `id` char(32) NOT NULL, `createtime` varchar