经常看到很多人问datagrid的合并单元格的问题,我找到好的,拿出来分享
private void span( int icolumn ) {
//功能说明:用于完成合并单元格
//参数说明:想合并列的序号
//返回说明:没有返回值
//受影响项:页面的datagrid被修改
string[] sMonth=new string[icolumn+1];//存放存放待合并单元格所在行前几个单元格的内容
int j=1;//存放合并单元格的rowspan值
int t=0;//存放待合并单元格的首个单元格行值
bool tf;//存放判断结果
for(int i2=0;i2<=icolumn;i2++)
{
//初始化数组
sMonth[i2]=DataGrid1.Items[0].Cells[i2].Text;//---就是你自己datagrid的名字
}
//记录级循环
for(int i=1;i<DataGrid1.Items.Count;i++)
{
//判断当前单元格的内容是否与待合并的单元格一样
tf=true;
for(int i2=0;i2<=icolumn;i2++)
{
if(!DataGrid1.Items[i].Cells[i2].Text.Equals(sMonth[i2]))
{
tf=false;
}
}
if(tf)
{
//内容一样
//除去当前单元格的内容
DataGrid1.Items[i].Cells.RemoveAt(icolumn);
j++;//下一行的单元格
//判断是否到了最后一行
if(i==DataGrid1.Items.Count-1&&j>1)
DataGrid1.Items[t].Cells[icolumn].RowSpan=j;
}
else
{
//内容不一样
//判断是否需要合并单元格
if(j>1)
{
//需要合并
DataGrid1.Items[t].Cells[icolumn].RowSpan=j;
j=1;
}
//本格的合并结束,重新赋值,继续下一个单元格的处理
t=i;
for(int i2=0;i2<=icolumn;i2++)
{
//初始化数组
sMonth[i2]=DataGrid1.Items[i].Cells[i2].Text;
}
}
}
}