2012-05-17 3 views
1

Я хочу объединить таблицу, но я не знаю, как это сделать. Я уже много раз пробовал, но все равно не могу найти правильное решение. Сейчас моя GridView, как это:Как объединить строки gridview

Data 1 | Data 1 | Data 1 | Data 1 
Data 1 | Data 1 | Data 1 | Data 1 
Data 2 | Data 2 | Data 2 | Data 2 
Data 2 | Data 2 | Data 2 | Data 2 

И я хочу, чтобы GridView быть похожим на это:

Data 1 | Data 1 | Data 1 | Data 1 
     | Data 1 | Data 1 | 
Data 2 | Data 2 | Data 2 | Data 2 
     | Data 2 | Data 2 | 

ответ

3

код, который сливается ячейки очень короткие:

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; 
       } 
      } 
     } 
    } 
} 

Последнее действие заключается в добавлении обработчика событий OnPreRender для GridView:

protected void gridView_PreRender(object sender, EventArgs e) 
{ 
    GridDecorator.MergeRows(gridView); 
} 
+0

Это очень хороший пример, но я уже пробовал этого раньше, и результат не совпадает с примером. – stillLearning

+0

Спасибо! У меня была аналогичная проблема с @ 20151012, и это сделало это для меня, за исключением того, что это была только первая ячейка. Поэтому я достал for и заменил все ссылки на i на индекс ячейки. – danyim

Смежные вопросы