Проблема с внешним видом таблицы после изменения её размеров

Автор Тема: Проблема с внешним видом таблицы после изменения её размеров  (Прочитано 2188 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Кулаков МихаилАвтор темы

  • ADN OPEN
  • Сообщений: 13
  • Карма: 0
Добрый день! Подскажите, имеется таблица. При программном изменении ее размеров (например, удаление части колонок и столбцов), границы удаленных ячеек продолжают отображаться. За них можно даже выделить таблицу, хотя реально ячеек там нет. Если скопировать и вставить такую таблицу, то её копия уже отображается правильно. Regen (программный и ручной) не помогает. В чем может быть ошибка? Видео с ScreenCast создать не получилось (ошибка при uploading).
Исходная таблица, например, 2х2


После запуска удаления одного столбца и одной колонки получаем


При копировании таблица (при перетаскивании) всё еще отображается как 2х2

но уже при вставке копии становится 1х1


Код прикладываю
Код - C# [Выбрать]
  1. public void CreateTable(string DevName, ObjectId TabObjId, List<string> CableNames) // Где TabObjId - ObjectId существующей таблицы
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             Editor ed = doc.Editor;
  6.             int TabLength = CableNames.Count();
  7.  
  8.             Transaction tr = db.TransactionManager.StartTransaction();
  9.             using (tr)
  10.             {
  11.                 try
  12.                 {
  13.                     Table tab = tr.GetObject(TabObjId, OpenMode.ForRead) as Table;
  14.                     tab.UpgradeOpen();
  15.                     tab = ClearTable(tab);
  16.                     Cell c;
  17.                     for (int i = 1; i < tab.Rows.Count; i++)
  18.                         tab.DeleteRows(1, i);
  19.                     for (int i = 1; i < tab.Columns.Count; i++)
  20.                         tab.DeleteColumns(1, i);
  21.                     Cell c = tab.Cells[0, 0];
  22.                     tab.GenerateLayout();
  23.                     //tab.DowngradeOpen();
  24.                     tr.Commit();
  25.                     ed.Regen();
  26.                 }
  27.                 catch (System.Exception ex)
  28.                 {
  29.                     Autodesk.AutoCAD.Runtime.Exception ex2 =
  30.                       ex as Autodesk.AutoCAD.Runtime.Exception;
  31.                     if (ex2 != null && ex2.ErrorStatus != ErrorStatus.WasOpenForUndo)
  32.                     {
  33.                         ed.WriteMessage("\nAutoCAD exception: {0}", ex2);
  34.                     }
  35.                     else if (ex2 == null)
  36.                     {
  37.                         ed.WriteMessage("\nSystem exception: {0}", ex);
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.  

Отмечено как Решение Кулаков Михаил 23-02-2024, 19:53:17

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13871
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробуй воспользоваться методом Table.RecomputeTableBlock(true). И возможно в отдельной транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13871
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Видео с ScreenCast создать не получилось (ошибка при uploading).
Autodesk отменила поддержку Autodesk Screencast. Так что записывай видео для Youtube и вставляй сюда ссылки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кулаков МихаилАвтор темы

  • ADN OPEN
  • Сообщений: 13
  • Карма: 0
Попробуй воспользоваться методом Table.RecomputeTableBlock(true). И возможно в отдельной транзакции.
Спасибо! Именно этого и не хватало. Использовал в этой же транзакции