// <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;
}
}
}
}