在GRIDVIEW中合併單元格

//   <summary>  
    ///  
合併GridView列中相同的行  
    ///   </summary>  
    ///   <param   name="GridView1">GridView
對象</param>  
    ///   <param   name="cellNum">
需要合併的列</param>  
    public static void GroupRows(GridView GridView1, int cellNum)
    {
        int i = 0, rowSpanNum = 1;
        while (i < GridView1.Rows.Count - 1)
        {
            GridViewRow gvr = GridView1.Rows[i];
            for (++i; i < GridView1.Rows.Count; i++)
            {
                GridViewRow gvrNext = GridView1.Rows[i];
                if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
                {
                    gvrNext.Cells[cellNum].Visible = false;
                    rowSpanNum++;
                }
                else
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                    rowSpanNum = 1;
                    break;
                }

if (i == GridView1.Rows.Count - 1)
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                }
            }
        }
    }

///   <summary>  
    ///  
根據條件列合併GridView列中相同的行  
    ///   </summary>  
    ///   <param   name="GridView1">GridView
對象</param>  
    ///   <param   name="cellNum">
需要合併的列</param>
    ///   ///   <param   name="cellNum2">
條件列(根據某條件列還合併)</param>
    public static void GroupRows(GridView GridView1, int cellNum, int cellNum2)
    {
        int i = 0, rowSpanNum = 1;
        while (i < GridView1.Rows.Count - 1)
        {
            GridViewRow gvr = GridView1.Rows[i];
            for (++i; i < GridView1.Rows.Count; i++)
            {
                GridViewRow gvrNext = GridView1.Rows[i];
                if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)
                {
                    gvrNext.Cells[cellNum].Visible = false;
                    rowSpanNum++;
                }
                else
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                    rowSpanNum = 1;
                    break;
                }

if (i == GridView1.Rows.Count - 1)
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                }
            }
        }
    }

第二個方法只是在第一個方法的修改了一點點, 在判斷單元格的時候,加上了一個條件列:

if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)。當然,第二個方法還可以擴展,根據多個列的條件來合併。

------------------------

例程:

數據庫(Sql2005)

USE [dbgang]
GO
/******
對象: Table [dbo].[tbJiLu]    腳本日期: 08/13/2008 23:46:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tbJiLu](
[intID] [int] IDENTITY(1,1) NOT NULL,
[A] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[B] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[C] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[D] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[E] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[F] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_tbJiLu] PRIMARY KEY CLUSTERED
(
[intID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

前臺代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>
無標題頁</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="A" HeaderText="
糧食屬性" />
                <asp:BoundField DataField="B" HeaderText="
品種" />
                <asp:BoundField DataField="C" HeaderText="
貨位號" />
                <asp:BoundField DataField="D" HeaderText="
收購計劃數量" />
                <asp:BoundField DataField="E" HeaderText="
已規劃數量" />
                <asp:BoundField DataField="F" HeaderText="
未規劃數量" />
            </Columns>
        </asp:GridView>
   
    </div>
    </form>
</body>
</html>

後臺代碼:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.ObjectBuilder;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Database db=DatabaseFactory.CreateDatabase();
            DbCommand cmd= db.GetSqlStringCommand("SELECT * FROM tbJiLu");
            using (IDataReader dr=db.ExecuteReader(cmd))
            {
                IList<MeiShi.tbJiLuInfo> list = MeiShi.FillDataToList<MeiShi.tbJiLuInfo>.FillDataList(dr);
                GridView1.DataSource = list;
                GridView1.DataBind();
            }
            GroupRows(this.GridView1, 0);
            GroupRows(this.GridView1, 1);
        }

}

//   <summary>  
    ///  
合併GridView列中相同的行  
    ///   </summary>  
    ///   <param   name="GridView1">GridView
對象</param>  
    ///   <param   name="cellNum">
需要合併的列</param>  
    public static void GroupRows(GridView GridView1, int cellNum)
    {
        int i = 0, rowSpanNum = 1;
        while (i < GridView1.Rows.Count - 1)
        {
            GridViewRow gvr = GridView1.Rows[i];
            for (++i; i < GridView1.Rows.Count; i++)
            {
                GridViewRow gvrNext = GridView1.Rows[i];
                if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
                {
                    gvrNext.Cells[cellNum].Visible = false;
                    rowSpanNum++;
                }
                else
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                    rowSpanNum = 1;
                    break;
                }
                if (i == GridView1.Rows.Count - 1)
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                }
            }
        }
    }

///   <summary>  
    ///  
根據條件列合併GridView列中相同的行  
    ///   </summary>  
    ///   <param   name="GridView1">GridView
對象</param>  
    ///   <param   name="cellNum">
需要合併的列</param>
    ///   ///   <param   name="cellNum2">
條件列(根據某條件列還合併)</param>
    public static void GroupRows(GridView GridView1, int cellNum, int cellNum2)
    {
        int i = 0, rowSpanNum = 1;
        while (i < GridView1.Rows.Count - 1)
        {
            GridViewRow gvr = GridView1.Rows[i];
            for (++i; i < GridView1.Rows.Count; i++)
            {
                GridViewRow gvrNext = GridView1.Rows[i];
                if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)
                {
                    gvrNext.Cells[cellNum].Visible = false;
                    rowSpanNum++;
                }
                else
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                    rowSpanNum = 1;
                    break;
                }

if (i == GridView1.Rows.Count - 1)
                {
                    gvr.Cells[cellNum].RowSpan = rowSpanNum;
                }
            }
        }
    }

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