Как обновить поля в таблице?

Автор Тема: Как обновить поля в таблице?  (Прочитано 41368 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Всем привет. Проблема следующая: создаю таблицу с полями, ссылающимися на атрибуты блока, вставляю таблицу в чертеж, а поля не обновляются. Для того, чтобы их обновить, необходимо зайти в ячейку таблицы, затем выполнить _regen. Может, кто-нибудь сталкивался с подобной проблемой и знает, как ее решить программно. Заранее, спасибо за помощь.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Как обновить поля в таблице?
« Ответ #2 : 15-08-2016, 04:04:45 »
http://adn-cis.org/kak-obnovit-vyibrannyie-polya-ne-vyipolnyaya-regeneracziyu-vsego-chertezha.html
Да, я тоже нашел этот "не очень тривиальный" :) код в теме http://adn-cis.org/forum/index.php?topic=7086.msg20446#msg20446.
Но у меня он не работает! С его вставкой не может быть проблем - копипаст.
Далее, я его запускаю в командном методе, где формирую таблицу:
Код - C# [Выбрать]
  1. ObjectId id = tableSpec.ObjectId;          
  2. acdbEvaluateFields(ref id, 16);
И ничего не обновляется. :-\
Может ли быть такое, что он не работает на таблицах?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как обновить поля в таблице?
« Ответ #3 : 15-08-2016, 09:12:28 »
Надеюсь ты вызываешь этот код после завершения транзакции, в которой создаёшь таблицу? Выложи чертеж с этой таблицей - посмотрю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Как обновить поля в таблице?
« Ответ #4 : 15-08-2016, 11:20:26 »
Надеюсь ты вызываешь этот код после завершения транзакции, в которой создаёшь таблицу? Выложи чертеж с этой таблицей - посмотрю.
Да, но я пробовал по-всякому.
Если поля не обновить (зайти в ячейку, а потом нажать реген) и сохранить чертеж, потом зайти в него снова, то они уже не работают.
Также прикреплю .dll [CommandMethod("spfr")], так, наверняка, будет наглядней.
Сборка создана для AutoCAD 2016x64, также сработает и в AutoCAD 2017x64.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как обновить поля в таблице?
« Ответ #5 : 15-08-2016, 11:39:12 »
Что-то я не понял на что у тебя ссылается это поле:

Понятно, что в такой ситуации оно не обновится. Похоже, ты указал неправильное значение для ObjectId в поле.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Как обновить поля в таблице?
« Ответ #6 : 15-08-2016, 12:03:49 »
Понятно, что в такой ситуации оно не обновится. Похоже, ты указал неправильное значение для ObjectId в поле.
C ObjectId все в порядке. Как я понял, там его получить можно миллионом способов и это легко отследить в режиме отладки.
Что-то я не понял на что у тебя ссылается это поле:
В этом и суть, оно не идентифицируется сразу.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как обновить поля в таблице?
« Ответ #7 : 15-08-2016, 12:12:09 »
C ObjectId все в порядке.
Нет. Сравни значения:




Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Как обновить поля в таблице?
« Ответ #8 : 15-08-2016, 12:36:40 »
Нет. Сравни значения:
Так Id ведь меняются после закрытия/открытия чертежа (насколько я понимаю). Понятно дело, если поле не обновить сразу, оно потом "не свяжется" и не будет работать.

PS. На всякий случай, еще раз прикрепляю чертеж.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как обновить поля в таблице?
« Ответ #9 : 15-08-2016, 13:37:20 »
Так Id ведь меняются после закрытия/открытия чертежа (насколько я понимаю). Понятно дело, если поле не обновить сразу, оно потом "не свяжется" и не будет работать.
Если поле сразу содержит правильный ObjecId, то после закрытия и открытия чертежа ObjectId будут новые (могут быть новыми), но одинаковыми!
Похоже, что ты что-то не учитываешь при добавлении поля. Во всяком случае и команда _UPDATEFIELD не понимает твои поля. Соответственно и код, который я привёл и ты пытаешься использовать поля обновлять не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Как обновить поля в таблице?
« Ответ #10 : 15-08-2016, 14:39:15 »
Если поле сразу содержит правильный ObjecId, то после закрытия и открытия чертежа ObjectId будут новые (могут быть новыми), но одинаковыми!
Посмотрите, пожалуйста, видео из поста #8. Если бы Id были не те, то ничего, вообще, бы не работало.
Похоже, что ты что-то не учитываешь при добавлении поля.
Сейчас покажу процесс создания:

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как обновить поля в таблице?
« Ответ #11 : 15-08-2016, 14:52:23 »
Видео ты не отделаешься. Если нужна помощь, то:
1) Сделай простой блок с одним атрибутом MARKA и выложи этот файл
2) Сделай тестовый C#-проект, который создаёт простейшую таблицу и заносит в неё поле с ссылкой на атрибут MARKA. И выложи этот проект.
И я не увидел в коде создания Field. Или ты думаешь, что простое добавление <...> к строке означает добавление поля???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Как обновить поля в таблице?
« Ответ #12 : 15-08-2016, 15:02:23 »
Или ты думаешь, что простое добавление <...> к строке означает добавление поля???
Да, до этого момента так и думал. Делал так в VBA. И еще вот тут http://through-the-interface.typepad.com/through_the_interface/2007/06/embedding_field.html увидел обычную строку и дальше копать не стал.
Еще и флуд развел тут. Извиняюсь. :-\
Пошел разбираться с созданием полей.
Если не разберусь, то сделаю заготовочку из простого блока и тестового c# проекта. Спасибо.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Как обновить поля в таблице?
« Ответ #13 : 15-08-2016, 16:32:38 »
http://through-the-interface.typepad.com/through_the_interface/2007/06/embedding_field.html
Оно?

Хотя, если я правильно помню, то действовать нужно через создание объекта Db.Field  и потом назначением этого объекта.. но могу и ошибаться.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение