C# DataGridView 实现合并单元格,和Excel一样 C#的控件DataGridView能否实现合并单元格,类似Excel样式? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有试过可不可以,不过应该可以这样试下先保存datagridview的数据到一个表;然后判断用户的选中列;然后把选中列全部不显示出来,显示其他的列就行了吧。 我感觉这个应该和spread一样吧,我spread合并就可以for(int i = 0 ; i < 10 ; i++){ this.fpSpread1_Sheet1.Cells.Get(i*3, 0).ColumnSpan = 2; this.fpSpread1_Sheet1.Cells.Get(i*3, 0).RowSpan = 2;}看看是不是和你的是一样的。我这个是循环合并的。 要重写DataGridView的CellPainting函数,参考:《Windows Forms 2.0数据绑定》书中的介绍,或上网找 public static void MRows(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; } } } } /// 根据条件列合并GridView列中相同的行 public static void MRows(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; } } } } 在c# vs 2005的winform里,合并DataGridView单元格等 ding........................................................ nhibernate的问题 麻烦各位帮忙解决下 关于一个自定义类的实现 C#解决表达式规则解析问题 在处理多线程时遇到的问题 软件界面--跳上跳下的列表菜单 “NET(c#)是弱智白痴才是用的语言,真正的程序员用asm,c,c++,linux,unix” 对于这样无聊的话题,大家没必要回复。大家回复无非是增加它的 怎么加名命名空间? 怎样实现树型的下拉列表 XML数据导入到SQL2000中 C# NPOI Excel打开遇到错误 怎样创建mht文件? C# dataGridView中的数据如何导到SQL SERVER中去
先保存datagridview的数据到一个表;
然后判断用户的选中列;
然后把选中列全部不显示出来,显示其他的列就行了吧。
{
this.fpSpread1_Sheet1.Cells.Get(i*3, 0).ColumnSpan = 2;
this.fpSpread1_Sheet1.Cells.Get(i*3, 0).RowSpan = 2;
}看看是不是和你的是一样的。我这个是循环合并的。
{
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;
}
}
}
}
/// 根据条件列合并GridView列中相同的行
public static void MRows(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;
}
}
}
}