123

合并Gridview单元格

 

Introduction

There are a lot of methods in the Internet solving the problem of how to merge GridView rows if neighboring cells show equal values. My approach is not the first; however, I think, it is rather universal and very short - less than 20 lines of code.

123

The algorithm is simple: to bypass all the rows, starting from the second at the bottom, to the top. If a cell value is the same as a value in the previous (lower) row, then increase RowSpan and make the lower cell invisible, and so forth.

The code that merges the cells is very short:

Hide   Copy Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class GridDecorator {     public static void MergeRows(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;                 }             }         }     } }

 

 

The last action is to add an OnPreRender event handler for the GridView:

Hide   Copy Code
1 2 3 4 protected void gridView_PreRender(object sender, EventArgs e) {     GridDecorator.MergeRows(gridView); }
上一篇:我从LongAdder中窥探到了高并发的秘籍,上面只写了两个字...


下一篇:VBA使用SQL查询表数据