работа с матрицей
В AfterData вношу изменения в ResultTable: добавляю объединяющие ячейки, хочу получить вот такой заголовок:
проблема с расстановкой границ через код. сзаливкой даже пока не связывался.
в матрице на странице границы убрал для отладки кода
получаю
как правильно через код привести матрицу в необходимый вид?
проблема с расстановкой границ через код. сзаливкой даже пока не связывался.
в матрице на странице границы убрал для отладки кода
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++;
}
}
как правильно через код привести матрицу в необходимый вид?
Комментарии
В готовой матрице для экономии памяти используются стили. Ячейки с одинаковым оформлением имеют ссылку на один и тот же стиль. Поэтому при попытке поменять рамку у ячейки, Вы меняете настройки ее стиля, который применяется и к другим ячейкам. Чтобы поменять только конкретную ячейку, надо делать так:
TableCell style = table[0,0].Clone();
style.Border.Color = Color.Red;
table[0,0].SetStyle(style);