Ошибка при присвоении стиля таблице

Автор Тема: Ошибка при присвоении стиля таблице  (Прочитано 7308 раз)

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!

Хватаю fatal при попытке присвоения стиля таблице. Где я неправ и как это исправить?
Код - C# [Выбрать]
  1.  public void CreateReconiliatonTable(Point3d insertionPoint, global::Enterprise.OrganizationalStructure.Enterprise source)
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.  
  5.             Database db = doc.Database;
  6.             Transaction tr = doc.TransactionManager.StartTransaction();
  7.             using ( tr )
  8.             {
  9.                
  10.                 Autodesk.AutoCAD.DatabaseServices.Table tbl = new Autodesk.AutoCAD.DatabaseServices.Table();
  11.            
  12.                 DBDictionary tsd = (DBDictionary)tr.GetObject(db.TableStyleDictionaryId, OpenMode.ForRead);
  13.                 object yy = tsd["ReconciliationTable"];
  14.                 tbl.TableStyle = (yy as TableStyle).ObjectId;
  15.  
  16.                 tbl.SetSize(source.OrganizationalStructure.Departments.Count + 3, 4);
  17.                 //tbl.Width = 65;
  18.                 tbl.Columns[0].Width = 17;
  19.                 tbl.Columns[1].Width = 23;
  20.                 tbl.Columns[2].Width = 17;
  21.                 tbl.Columns[3].Width = 14;
  22.  
  23.                 tbl.SetRowHeight(5);
  24.                 tbl.BreakEnabled = false;
  25.  
  26.                 tbl.Position = new Point3d(insertionPoint.X - 185, insertionPoint.Y, 0);
  27.  
  28.                 tbl.Cells[0, 0].TextString = "СОГЛАСОВАНО";
  29.                 tbl.Cells[1, 0].TextString = "Подразделение";
  30.                 tbl.Cells[1, 1].TextString = "Фамилия";
  31.                 tbl.Cells[1, 2].TextString = "Подпись";
  32.                 tbl.Cells[1, 3].TextString = "Дата";
  33.              
  34.  
  35.                 for ( int i = 1; i < source.OrganizationalStructure.Departments.Count; i++ )
  36.  
  37.                 {
  38.                     tbl.Cells[i + 2, 0].TextString = source.OrganizationalStructure.Departments[i].AbbreviatedNumber;
  39.                     tbl.Cells[i + 2, 1].TextString = source.OrganizationalStructure.Departments[i].Head;
  40.                 }
  41.  
  42.                 tbl.GenerateLayout();
  43.                
  44.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  45.  
  46.                 btr.AppendEntity(tbl);
  47.  
  48.                 tr.AddNewlyCreatedDBObject(tbl, true);
  49.                 tr.Commit();
  50.             }
  51.         }


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот это что такое:
Код - C# [Выбрать]
  1.                 DBDictionary tsd = (DBDictionary)tr.GetObject(db.TableStyleDictionaryId, OpenMode.ForRead);
  2.                 object yy = tsd["ReconciliationTable"];
  3.                 tbl.TableStyle = (yy as TableStyle).ObjectId; //<---- Это что???
???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Пытаюсь получить идентификатор стиля чтобы присвоить его создаваемой таблице.
А как его тогда получить?

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Object, затем я его привожу к стилю таблицы. Вы имеете ввиду что DBDictionary не может вернуть мне запись по ключу-названию стиля?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Object, затем я его привожу к стилю таблицы. Вы имеете ввиду что DBDictionary не может вернуть мне запись по ключу-названию стиля?
Посмотри в отладчике что возвращает tsd["ReconciliationTable"];
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Atomohod 09-10-2020, 22:39:38

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Очередной намёк.
tsd["ReconciliationTable"] эквивалентно в данном случае tsd.GetAt("ReconciliationTable"):

Код - C# [Выбрать]
  1. // Autodesk.AutoCAD.DatabaseServices.DBDictionary
  2. public object this[string key]
  3. {
  4.         get
  5.         {
  6.                 return GetAt(key);
  7.         }
  8.         [param: CallerMustClose]
  9.         set
  10.         {
  11.                 SetAt(key, (DBObject)value);
  12.         }
  13. }
А метод GetAt() возвращает ObjectId. Поэтому в коде у тебя шло присвоение null.
А нужно было всего лишь:
Код - C# [Выбрать]
  1. tbl.TableStyle = tsd["ReconciliationTable"];
Кроме того рекомендую поставить btr.AppendEntity(tbl); сразу после Autodesk.AutoCAD.DatabaseServices.Table tbl = new Autodesk.AutoCAD.DatabaseServices.Table();
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Спасибо, помогло tsd.GetAt("ReconciliationTable")