2016-06-28 2 views
0

В настоящее время я пытаюсь использовать Repeater WebControl для отображения таблицы, в которой перечислены все возможные компоненты. Ниже мой стол;Слияние ячейки равного значения в ASP.NET Repeater

enter image description here

Сейчас я пытаюсь слившихся клеток в группе Код и группы столбце Описание, которые имеют одинаковое значение. Ниже мой код слияния ячейки, отметил, что код находится в классе;

public void repeaterRowSpan(string repeaterID, string columnID) 
{ 
    var pageHandler = HttpContext.Current.CurrentHandler; 
    Control ctrl = ((Page)pageHandler).Master.FindControl("ContentPlaceHolder3").FindControl(repeaterID); 
    Repeater repeaterName = (Repeater)ctrl; 

    for (int i = repeaterName.Items.Count - 1; i > 0; i--) 
    { 
     HtmlTableCell oCell_previous = (HtmlTableCell)repeaterName.Items[i - 1].FindControl(columnID); 
     HtmlTableCell oCell = (HtmlTableCell)repeaterName.Items[i].FindControl(columnID); 

     oCell.RowSpan = (oCell.RowSpan == -1) ? 1 : oCell.RowSpan; 
     oCell_previous.RowSpan = (oCell_previous.RowSpan == -1) ? 1 : oCell_previous.RowSpan; 

     if (oCell.InnerText == oCell_previous.InnerText) 
     { 
      oCell.InnerText = ""; 
      oCell_previous.RowSpan += oCell.RowSpan; 
     } 
    } 
} 

Каким-то образом код удаляет одно и то же значение в столбце, но сохраняет строку rowspan. Когда я отлаживаю, oCell_previous.RowSpan возвращает «2», поэтому сам код работает нормально. Ниже приведен результат слияния;

enter image description here

Как я могу модифицировать свой код, таким образом, он будет объединен в клетку?

На ваш взгляд, между Repeater и GridView, который наиболее подходит для отображения данных в виде таблицы в этом проекте? По моему мнению, повторитель наиболее подходит, поскольку он быстрее, чем GridView. GridView подходит только в том случае, если у вас есть функция редактирования, чтобы идти с вашей таблицей.

+0

Возможный дубликат [asp.net повторитель сливающихся столбцов динамически] (http://stackoverflow.com/questions/29999444/asp-net-repeater-merge-columns-dynamically) – Lucky

ответ

0

Это может быть реализовано с использованием события OnDataBound. Событие OnDataBound GridView выполняется после заполнения GridView записями. Выполняет цикл в обратном порядке по строкам GridView, а затем общие ячейки идентифицируются и объединяются в одну ячейку.

Ниже пример кода сливает первый & второй столбцы (при условии, что есть избыточные значения путем сравнения выше строки (ы)),

Вы можете оставить комментарий, если вам нужно больше информации.

protected void OnDataBound(object sender, EventArgs e) 
{ 
    for (int i = GridView1.Rows.Count - 1; i > 0; i--) 
    { 
     GridViewRow row = GridView1.Rows[i]; 
     GridViewRow previousRow = GridView1.Rows[i - 1]; 
     for (int j = 0; j < row.Cells.Count; j++) 
     { 
      if (row.Cells[j].Text == previousRow.Cells[j].Text) 
      { 
       if (previousRow.Cells[j].RowSpan == 0) 
       { 
        if (row.Cells[j].RowSpan == 0) 
        { 
         previousRow.Cells[j].RowSpan += 2; 
        } 
        else 
        { 
         previousRow.Cells[j].RowSpan = row.Cells[j].RowSpan + 1; 
        } 
        row.Cells[j].Visible = false; 
       } 
      } 
     } 
    } 
} 
+0

Ваш код может быть использован только для GridView мой текущий код для Repeater. Насколько я знаю, Repeater не имеет события OnDataBound. Я использую Repeater для моего проекта, поскольку Repeater - это более быстрая загрузка информации, чем GridView. Вы полагаете, что Repeater не может объединить ячейки, а GridView обладает такими возможностями? Если это так, я могу перейти на Gridview. – Fahmieyz

+0

Моя ошибка. Да, ретранслятор также может позволить себе слиться. Можете ли вы попробовать этот пост, http://stackoverflow.com/questions/29999444/asp-net-repeater-merge-columns-dynamically. – Lucky