Назначить RowType(Row style) Header заданной строке в таблице

Автор Тема: Назначить RowType(Row style) Header заданной строке в таблице  (Прочитано 7156 раз)

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Вопрос в заголовке. Как назначить [2] строке таблицы RowType.Header?
« Последнее редактирование: 20-12-2019, 12:46:12 от Brayan »

Отмечено как Решение Александр Ривилис 20-12-2019, 16:09:13

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как назначить [2] строке таблицы RowType.Header?
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5.  
  6.  
  7. [assembly: CommandClass(typeof(ChangeRowType.MyCommands))]
  8.  
  9. namespace ChangeRowType
  10. {
  11.   public class MyCommands
  12.   {
  13.     [CommandMethod("ChgRowType")]
  14.     public void MyCommand() // This method can have any name
  15.     {
  16.       Document doc = Application.DocumentManager.MdiActiveDocument;
  17.       if (doc == null) return;
  18.       Editor ed = doc.Editor;
  19.       PromptEntityOptions prTab =
  20.         new PromptEntityOptions("\nВыберите таблицу для установки типа строки в Header: ");
  21.       prTab.SetRejectMessage("Это не таблица!");
  22.       prTab.AddAllowedClass(typeof(Table), true);
  23.       PromptEntityResult rsTab = ed.GetEntity(prTab);
  24.       if (rsTab.Status != PromptStatus.OK)
  25.         return;
  26.       PromptIntegerOptions prNumRow =
  27.         new PromptIntegerOptions("\nУкажите номер строки (нумерация с нуля): ");
  28.       prNumRow.AllowNegative = false;
  29.       prNumRow.AllowZero = false;
  30.       prNumRow.AllowNone = false;
  31.       prNumRow.DefaultValue = 2;
  32.  
  33.       PromptIntegerResult rsNumRow = ed.GetInteger(prNumRow);
  34.       if (rsNumRow.Status != PromptStatus.OK)
  35.         return;
  36.  
  37.       using (Transaction tr = doc.TransactionManager.StartTransaction())
  38.       {
  39.         Table tab = tr.GetObject(rsTab.ObjectId, OpenMode.ForWrite) as Table;
  40.         if (tab != null)
  41.         {
  42.           tab.Rows[rsNumRow.Value].Style = "_Header";
  43.         }
  44.         tr.Commit();
  45.       }
  46.     }
  47.   }
  48. }
  49.  
И заодно по умолчанию для Table breaks поставить Repeat top labels = Yes
Один вопрос - одна тема. Не поленись создать отдельную тему.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Спасибо за ответ, но мне кажется это что-то не то.
Мне нужен RowType, который Enum
Выяснить его значение можно так MessageBox.Show(myTable.RowType(2).ToString()); (правда появляется пометка, что это устаревший способ), а вот как его назначить определенной строке не понятно.
По умолчанию у всех таблиц 0-я строка Title, 1-я Header, 2-я и последующие Data. А мне нужно 2-ую сделать тоже Header.
Если использовать то что вы предложили. В строке myTable.Rows[2].Style = "_Header"; выдает Exeption. Пробовал и так myTable.Rows[2].Style = RowType.HeaderRow.ToString();но естественно это тоже не работает.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В строке myTable.Rows[2].Style = "_Header"; выдает Exeption.
1. Не Exeption, а Exсeption
2. Какой именно Exсeption?
3. Строка с номером 2 в таблице уже есть в момент вызова этого метода (нумерация строк идёт с 0, т.е. строк должно быть как минимум 3)?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Спасибо, получилось. Пришлось сделать вторую транзакцию и в ней назначать стиль. В первой транзакции у меня создавалась таблица. Это очень странно, но работает. Версия 2020(23.1)

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

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Что понадобилась вторая транзакция.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Что понадобилась вторая транзакция.
Это нормально. Чаще всего, чтобы не было второй транзакции, помогает если сначала добавить таблицу в базу данных, т.е. AppendEntity(tab) сразу после Table tab = new Table()), а затем уже все остальные операции с таблицей.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение