Граница ячейки в таблице

У меня есть таблица, которую я печатаю. Я добавил границы ко всем ячейкам, но у меня проблема, когда таблица входит/выходит на новую страницу. Затем граница перемещается/остается на странице в зависимости от доступного пространства, которое занимает каждая ячейка. Можно ли сделать эту строку зависимой в sted?

Вот фото проблемы

введите здесь описание изображения

Серая линия – это сдвиг страницы.

Вот как я сделал

foreach (Task task in TasksToShow)
        {
            myTable.RowGroups[0].Rows.Add(new TableRow());
            currentRow = myTable.RowGroups[0].Rows[rowCount++];

            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.TaskID.ToString()))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.TaskName))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.TaskResponsible))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.TaskResponsibleDepartment))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.Category))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.Status))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.Priority.ToString()))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.StartDate.ToString("dd/MM/yy")))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.ActualHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.EstimatedHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.EstimatedDeploymentDate.ToString("dd/MM/yy")))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.DesiredImplementationDate.ToString("dd/MM/yy")))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.APP.StartDate.ToString("dd/MM/yy")))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.APP.EstimatedHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.APP.ActualHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.IN.StartDate.ToString("dd/MM/yy")))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.IN.EstimatedHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.IN.ActualHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.SIS.StartDate.ToString("dd/MM/yy")))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.SIS.EstimatedHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.SIS.ActualHours.TotalHours.ToString() + "h"))));
            currentRow.Cells.Add(new TableCell(new Paragraph(new Run(task.Tags))));

            currentRow.FontSize = 10;
            currentRow.FontWeight = FontWeights.Normal;

            for (int n = 0; n < currentRow.Cells.Count; n++ )
            {
                currentRow.Cells[n].BorderThickness = new Thickness(1, 1, 1, 1);
                currentRow.Cells[n].BorderBrush = Brushes.Black;
            }
        }

Также есть ли способ сделать ширину ячеек зависимой от самой большой ячейки, а не просто сделать все ячейки одинаковой ширины?

Надеюсь, вы можете помочь.


person 7heViking    schedule 14.11.2011    source источник
comment
Святая Моли. 1 слово, рефакторинг!   -  person leppie    schedule 14.11.2011
comment
Что ты имеешь в виду? Я просто добавляю сюда данные. Я не вижу, как сделать это лучше!?   -  person 7heViking    schedule 14.11.2011
comment
Как насчет: void AddRow(data) { currentRow.Cells.Add(new TableCell(new Paragraph(new Run(data)))); }   -  person leppie    schedule 14.11.2011
comment
Да, вы правы, это облегчило бы обслуживание... но это все равно не отвечает на мой вопрос. Сейчас сделаю рефакторинг.   -  person 7heViking    schedule 14.11.2011


Ответы (2)


Я нашел решение, которое, по крайней мере, делает его одинаковым на всем протяжении, но я еще не полностью им доволен. Я только что изменил толщину в последнем цикле for на это:

for (int n = 0; n < currentRow.Cells.Count; n++ ) 
{ 
    currentRow.Cells[n].BorderThickness = new Thickness(0, 2, 1, 0); 
    currentRow.Cells[n].BorderBrush = Brushes.Black; 
}
person 7heViking    schedule 15.11.2011

Возможно, было бы лучше добавить границу ко всем ячейкам и таблицы. Если у таблицы нет границы, границы ячеек на границе таблицы имеют только половину ширины линии сетки.

Ширина линии сетки между двумя ячейками в одной строке состоит из ширины границы левой ячейки плюс ширины границы правой ячейки. Если у ячейки нет соседей, ширина сетки составляет только половину других линий сетки. Добавление границы для таблицы добавляет границу несуществующего соседа.

table.BorderBrush = Brushes.Black,
table.BorderThickness = new Thickness(.5)

cell.BorderBrush = Brushes.Black,
cell.BorderThickness = new Thickness(.5)

Я знаю, это не решит вашу проблему, но, по крайней мере, линии сетки выглядят лучше.

person Peter Huber    schedule 27.12.2019