Не могу удалить спецификацию с листа

Автор Тема: Не могу удалить спецификацию с листа  (Прочитано 123 раз)

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

Оффлайн HughАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Всем привет. Написал утилиту, которая, в числе прочего, удаляет спецификации с листа, если дать ей ElementId спецификаций и листа. Код примерно такой:
Код - C# [Выбрать]
  1. // Список Id элементов на удаление
  2. List<ElementId> ForDeleteElementIds = new List<ElementId>();
  3.  
  4. FilteredElementCollector col = new FilteredElementCollector(doc).OfClass(typeof(ScheduleSheetInstance));
  5. foreach (ScheduleSheetInstance ssi in col)
  6.    {
  7.        if (ssi.ScheduleId != ID) continue;
  8.        if (ssi.OwnerViewId == SheetId) ForDeleteElementIds.Add(ssi.Id);                
  9.    }
  10. // Удаляем все вставки по списку
  11. using (Transaction tx = new Transaction(doc))
  12.    {
  13.         tx.Start("Удаление ведомости с листа");
  14.         doc.Delete(ForDeleteElementIds);                
  15.         tx.Commit();
  16.    }

И всё нормально работает, а одну спецификацию никак не удаляет. При отладке пишет, что до удаления количество ScheduleSheetInstance в документе было 76, а после удаления 75, то есть удаление прошло. А спецификация торчит по прежнему на листе и Revit LookUp её показывает. С чем это может быть связано?

Отмечено как Решение Hugh 20-04-2017, 16:00:54

Оффлайн HughАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Справился сам ). Дело оказалось не в спецификации и не в листе, а в том, что у меня в какой-то момент при выполнении кода возникала ошибка, но я об этом и не подозревал. Потом обратил внимание, что в Выводе регулярно пишется "Вызвано исключение: "System.ArgumentOutOfRangeException" в mscorlib.dll". При этом в отладка на эту строку не переходит, и это место не обрамлено try-catch. Очень странно! Возможно, так получается из-за того, что ошибка находится в коде обработчика внешнего события. Сама ошибка заурядная, пытался в DataGridView выделить строку, индекса которой не существовало.
Сейчас всё работает.