Вставка столбцов в таблицу - PullRequest
0 голосов
/ 14 июля 2010

У меня есть таблица с 3 столбцами. Теперь я хочу вставить другой столбец, но я хочу вставить новый столбец после первого. Теперь мне интересно, как это можно сделать. Если я не ошибаюсь, свойство Table.Columns на самом деле не представляет столбцы, оно скорее представляет их макет, но не имеет никакого отношения к значениям столбцов? Смотри например в http://msdn.microsoft.com/en-us/library/system.windows.documents.table.columns.aspx

Объекты TableColumn, возвращаемые этим свойством, могут в сочетании с объектами TableCell в столбце использоваться для определения расположения столбцов, но они не определяют фактическое число отображаемых столбцов. Именно объекты TableCell в таблице определяют, сколько столбцов фактически отображается. Например, если вы определили 3 столбца, но ячейки таблицы имеют только 2 столбца, будет отображаться только 2 столбца.

Итак, я предполагаю, что если я хочу добавить новый столбец со значениями, я должен циклически проходить по строкам таблицы, и в каждой строке мне нужно добавлять новую ячейку в нужной позиции?

1 Ответ

0 голосов
/ 06 августа 2010

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

Если какая-либо из ячеек слева от позиции вставки имеет RowSpan или ColumnSpan больше 1, вам нужно будет внести соответствующие корректировки в индексы ячеек, в которые вы вставляете новые ячейки. Например, чтобы вставить новый столбец в позицию третьего визуального столбца, теоретически вы должны вставить новые ячейки перед существующими ячейками с индексом 2. Однако если любая из строк имеет ячейку с индексом 0 с RowSpan=2, эта ячейка будет охватывают два столбца, поэтому новая ячейка в этой строке должна быть вставлена ​​перед ячейкой с индексом 1.

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

Фактически, если вы хотите поддерживать полный диапазон сценариев вставки столбцов, код станет довольно сложным. Возможно, вы захотите смоделировать свое решение по методу приватной структуры TextRangeEditTables.InsertColumn().

...