GridView合并单元格(所有内容相同的单元格)
源码:

public static void GroupRow(GridView gridView)
{
for (int rowIndex = gridView.Rows.Count - 2; rowIndex >= 0; rowIndex--)
{
GridViewRow row = gridView.Rows[rowIndex];
GridViewRow previousRow = gridView.Rows[rowIndex + 1];
for (int i = 0; i < row.Cells.Count; i++)
{
if (row.Cells[i].Text == previousRow.Cells[i].Text)
{
row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
previousRow.Cells[i].RowSpan + 1;
previousRow.Cells[i].Visible = false;
}
}
}
}

//cellNum 表示需要合并的列,索引从0开始
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;
}
}
}
}

private DataTable HBTable(DataTable dt1, DataTable dt2)
{
DataTable newDataTable = dt1.Clone();
object[] obj = new object[newDataTable.Columns.Count];
for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
for (int i = 0; i < dt2.Rows.Count; i++)
{
dt2.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
return newDataTable;
}

protected void Unite(GridView gv)
{
int i;
string LastType1;
int LastCell;
if (gv.Rows.Count > 0)
{
for (int j = 0; j < 10; j++)
{
LastType1 = gv.Rows[0].Cells[j].Text;
gv.Rows[0].Cells[j].RowSpan = 1;
LastCell = 0;
if (j != 3 && j != 4)
{
for (i = 1; i < gv.Rows.Count; i++)
{
if (gv.Rows[i].Cells[j].Text == LastType1)
{
gv.Rows[i].Cells[j].Visible = false;
gv.Rows[LastCell].Cells[j].RowSpan++;
}
else
{
LastType1 = gv.Rows[i].Cells[j].Text;
LastCell = i;
gv.Rows[i].Cells[j].RowSpan = 1;
}
}
}
}
}
}

public DataSet MergeTable(DataTable tab1, DataTable tab2)
{
DataTable table = new DataTable();
if (tab1.Rows.Count != 0 && tab2.Rows.Count != 0)
{
DataColumn[] columns = new DataColumn[tab1.Columns.Count + tab2.Columns.Count];
tab1.Columns.CopyTo(columns, 0);
tab2.Columns.CopyTo(columns, tab1.Columns.Count);
foreach (DataColumn column in columns)
{
table.Columns.Add(column.ColumnName);
}
int count = tab1.Rows.Count > tab2.Rows.Count ? tab1.Rows.Count : tab2.Rows.Count;
for (int i = 0; i < count; i++)
{
if (tab1.Rows.Count <= i)
{
break;
}
DataRow row = table.NewRow();
for (int m = 0; m < tab1.Columns.Count; m++)
{
DataRow item = tab1.Rows[i];
row[tab1.Columns[m].ToString()] = item[tab1.Columns[m].ToString()];
}
for (int n = 0; n < tab2.Columns.Count; n++)
{
if (tab2.Rows.Count <= i)
{
break;
}
DataRow item = tab2.Rows[i];
row[tab2.Columns[n].ToString()] = item[tab2.Columns[n].ToString()];
}
table.Rows.Add(row);
}
}
else
{
table = tab1.Rows.Count == 0 ? tab2.Copy() : tab1.Copy();
}
DataSet ds = new DataSet();
ds.Tables.Add(table);
return ds;
}
作者:Stephen-kzx
出处:http://www.cnblogs.com/axing/
公众号:会定时分享写工作中或者生活中遇到的小游戏和小工具源码。有兴趣的帮忙点下关注!感恩!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述