1. 程式人生 > >GRIDVIEW多行多列合併單元格(合併列)

GRIDVIEW多行多列合併單元格(合併列)

gridview-merge-cell-01

左邊是原始資料的顯示,右邊是應用合併列之後的效果。

從圖中可以看到,二級指標有兩列,有的行中兩列的內容一樣,有的則不一樣,如果實現如右圖所示,看起來效果會更好一些。下面就著手實現這個功能,我的實現原理很簡單,就是遍歷GridView的行和遍歷行中的單元格,如果單元格的前一列和當前列的內容相同就合併這兩列。下面是具體實現的程式碼,上面有註釋,應該很容易理解。

   1:          /// <summary>
   2:          /// 和並列
   3:          /// </summary>
   4:          /// <param name="gv">要合併的GridView</param>
   5:          /// <param name="startCol">開始列的索引</param>
   6:          /// <param name="endCol">結束列的索引</param>
   7:          /// <param name="containHeader">是否合併表頭,預設不合並</param>
   8:          public static void MergeColumn(GridView gv, int startCol, int endCol, bool containHeader = false
)
   9:          {
  10:              if (containHeader)
  11:              {
  12:                  BLRowCells(gv.HeaderRow, startCol, endCol);
  13:              }
  14:              foreach (GridViewRow row in gv.Rows)
  15:              {
  16:                  BLRowCells(row, startCol, endCol);
  17:              }
  18:          }
  19:   
  20:          /// <summary>
  21:          /// 遍歷GridViewRow中的單元格
  22:          /// </summary>
  23:          /// <param name="row">要遍歷的行</param>
  24:          /// <param name="start">開始索引</param>
  25:          /// <param name="end">結束索引</param>
  26:          private static void BLRowCells(GridViewRow row, int start, int end)
  27:          {
  28:              //從開始索引的下一列開始
  29:              for (int i = start + 1; i <= end; i++)
  30:              {
  31:                  //當前單元格
  32:                  TableCell currCell = row.Cells[i];
  33:                  //前一個單元格
  34:                  TableCell prevCell = row.Cells[i - 1];
  35:                  if (!string.IsNullOrEmpty(currCell.Text) && !string.IsNullOrEmpty(prevCell.Text))
  36:                  {
  37:                      if (currCell.Text == prevCell.Text)
  38:                      {
  39:                          currCell.ColumnSpan = prevCell.ColumnSpan < 1 ? 2 : prevCell.ColumnSpan + 1;
  40:                          prevCell.Visible = false;
  41:                      }
  42:                  }
  43:              }
  44:          }

本篇文章作為前兩篇文章的續文,內容相對來說簡單一些,不過有需要合併GridView單元格的朋友,希望這三篇文章能夠起到幫助作用!