合并单元格的 GridView

Posted

技术标签:

【中文标题】合并单元格的 GridView【英文标题】:GridView with merged cells 【发布时间】:2013-04-15 09:43:39 【问题描述】:

我需要在网格视图中显示某些列的合并行数据。请帮助我准备以下定义格式的网格视图:

来自数据库的原始数据格式如下:

请帮助我找到动态有效地完成这项任务的最佳方法。

【问题讨论】:

【参考方案1】:

您必须使用RowSpan

请参考以下代码:

protected void GridView1_DataBound1(object sender, EventArgs e)

  for (int rowIndex = GridView1.Rows.Count - 2;
                                     rowIndex >= 0; rowIndex--)
  
    GridViewRow gvRow = GridView1.Rows[rowIndex];
    GridViewRow gvPreviousRow = GridView1.Rows[rowIndex + 1];
    for (int cellCount = 0; cellCount < gvRow.Cells.Count;
                                                  cellCount++)
    
     if (gvRow.Cells[cellCount].Text ==
                            gvPreviousRow.Cells[cellCount].Text)
     
       if (gvPreviousRow.Cells[cellCount].RowSpan < 2)
       
         gvRow.Cells[cellCount].RowSpan = 2;
       
       else
       
        gvRow.Cells[cellCount].RowSpan =
            gvPreviousRow.Cells[cellCount].RowSpan + 1;
       
       gvPreviousRow.Cells[cellCount].Visible = false;
    
   

参考:

https://sites.google.com/site/learning6329/asp-net/gridview-merge-cells

有问题的图片示例:

http://marss.co.ua/MergingCellsInGridView.aspx

【讨论】:

感谢您的帮助,此代码完全符合我的要求。 我还需要问一件事,有没有办法限制这个单元格合并修复列而不是网格视图的所有列。例如,在我提供的示例表中,我们是否应该实施任何限制,以便单元格合并不会应用于备注字段列。 是的,你可以,你只需要知道你想限制它的适当索引,并且必须适当地对其进行编程。 @Freelancer 您的示例适用于边界字段,但我在 gridview 中定义了模板,并且此代码无法使用它。你能帮我对模板字段做同样的事情吗? @Nikhil 可能会有所帮助***.com/questions/13177139/…【参考方案2】:

合并第一列的行单元格的最简单方法如下。请注意,For 循环总是要反向迭代。

protected void GridView1_DataBound(object sender, EventArgs e)
    
        int RowSpan = 2;
        for (int i = GridView1.Rows.Count-2; i >=0 ;i-- )
        
            GridViewRow currRow = GridView1.Rows[i];
            GridViewRow prevRow = GridView1.Rows[i+1];
            if (currRow.Cells[0].Text == prevRow.Cells[0].Text)
            
                currRow.Cells[0].RowSpan = RowSpan;
                prevRow.Cells[0].Visible = false;
                RowSpan += 1;
            
            else
                RowSpan = 2;
        
    

如果你想类似地合并所有列的行单元格,你可以在上面写的外部forloop中使用另一个“forloop”

【讨论】:

这个解决方案对我来说非常完美,将 3 行合并为 1 列用于第一列

以上是关于合并单元格的 GridView的主要内容,如果未能解决你的问题,请参考以下文章

GRIDVIEW多行多列合并单元格(合并列)

合并单元格的快捷键

GridView合并单元格万能版(包括模板列)

C#Winform中DataGridView合并单元格的问题?

如何保持每个单元格中合并单元格的值?

合并单元格的代码错误