работа с матрицей

отредактировано 03:27 Раздел: FastReport .NET
В AfterData вношу изменения в ResultTable: добавляю объединяющие ячейки, хочу получить вот такой заголовок:
0_b65df_dca3fe06_L.jpg
проблема с расстановкой границ через код. сзаливкой даже пока не связывался.
в матрице на странице границы убрал для отладки кода
private void Matrix1AfterData(object sender, EventArgs e)
    {
      TableResult table = sender as TableResult;
      if (Engine.FirstPass)
      { 
        return;
      }
     
      ///переставить столбик с итоговой ЗП в конец      int ncol = 4;
      TableColumn tc = new TableColumn();
      table.Columns.Add(tc);
      int colcnt =  table.ColumnCount-1  ;
      for (int j = 0; j < table.RowCount; j++)
      {
        table[colcnt,j].Text = table[ncol,j].Text;
        table[colcnt,j].SetStyle(table[ncol,j]);
      }
      //делаю толстые границы 
      Border brdVtot = new Border();
      brdVtot.Lines = BorderLines.Left|BorderLines.Right;
      brdVtot.Width = 2;
      
      table.Columns[ncol].MaxWidth = 0;
      table.Columns[ncol].Width = 0;
      table.Columns[ncol].Visible = false;
      table[ncol+1,0].RowSpan = 2;
      table[ncol+1,0].Text= table[ncol+1,1].Text;
      table[colcnt,0].RowSpan = 2;
      table[colcnt,0].Text= table[colcnt,1].Text;  
//пробовал присваивать  table[colcnt,0].Border = brdVtot
      table[ncol+1,0].Border.Lines = BorderLines.Left|BorderLines.Right;
      table[colcnt,0].Border.Lines = BorderLines.Left|BorderLines.Right;
      table[ncol+1,0].Border.LeftLine.Width = 2;
      table[ncol+1,0].Border.LeftLine.Width = 2;
      table[colcnt,0].Border.RightLine.Width = 2;
      table[colcnt,0].Border.RightLine.Width = 2;
      

      int cnt = 0;
    
      Border b = new Border();
      b.Lines = BorderLines.None;
      b.Width = 1;     
      ///строка для объединения ЗП и премии (ДХ)
      TableRow grhdr = new TableRow();
      table.Rows.Insert(1, grhdr);
      
      for (int i = 6; i < table.ColumnCount; i++)
      {
        b.Width = 1;   
        if (table[i,0].ColSpan==4)
        {
          cnt=1;
        }
         
        if (cnt==1 || cnt==4)
        {
          table[i,1].RowSpan=  2;
          table[i,1].Text = table[i,2].Text;
          table[i,2].Text = "";
          b.LeftLine.Width=cnt==1?2:1;
          b.RightLine.Width=cnt==4?2:1;
          b.Lines = BorderLines.Left|BorderLines.Right;
        }
        if (cnt==2)
        {
          // b.Lines = BorderLines.None;
          table[i,1].ColSpan = 2;
          table[i,1].Text = "ДХ";
          b.Width= 1;
          b.Lines = BorderLines.All;
          b.TopLine.Width= 1;
          b.BottomLine.Width= 1;
          table[i,1].Border = b;
          table[i+1,1].Border = b;
          table[i,2].Border = b;
          table[i+1,2].Border = b;
        } 
        if (cnt!=3)
        {
          table[i,1].Border = b;
        }
        cnt++;
      }
    }
получаю
0_b65e3_6cc9127_L.jpg
как правильно через код привести матрицу в необходимый вид?

Комментарии

  • отредактировано 03:27
    Здравствуйте,

    В готовой матрице для экономии памяти используются стили. Ячейки с одинаковым оформлением имеют ссылку на один и тот же стиль. Поэтому при попытке поменять рамку у ячейки, Вы меняете настройки ее стиля, который применяется и к другим ячейкам. Чтобы поменять только конкретную ячейку, надо делать так:

    TableCell style = table[0,0].Clone();
    style.Border.Color = Color.Red;
    table[0,0].SetStyle(style);

  • отредактировано 03:27
    AlexTZ написал: »
    Здравствуйте,

    В готовой матрице для экономии памяти используются стили. Ячейки с одинаковым оформлением имеют ссылку на один и тот же стиль. Поэтому при попытке поменять рамку у ячейки, Вы меняете настройки ее стиля, который применяется и к другим ячейкам. Чтобы поменять только конкретную ячейку, надо делать так:

    TableCell style = table[0,0].Clone();
    style.Border.Color = Color.Red;
    table[0,0].SetStyle(style);
    Спасибо. Хорошо бы этот момент отразить в документации программиста/пользователя.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.