Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Brayan от 19-12-2019, 19:06:34

Название: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Brayan от 19-12-2019, 19:06:34
Вопрос в заголовке. Как назначить [2] строке таблицы RowType.Header?
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Александр Ривилис от 19-12-2019, 22:28:09
Как назначить [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
Один вопрос - одна тема. Не поленись создать отдельную тему.
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Brayan от 20-12-2019, 12:59:04
Спасибо за ответ, но мне кажется это что-то не то.
Мне нужен 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();но естественно это тоже не работает.
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Александр Ривилис от 20-12-2019, 13:00:56
Brayan,
1. Ты проверил мой код в том виде, в котором я его записал?
2. В какой версии AutoCAD ты проверял код?
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Александр Ривилис от 20-12-2019, 13:10:06
В строке myTable.Rows[2].Style = "_Header"; выдает Exeption.
1. Не Exeption, а Exсeption
2. Какой именно Exсeption?
3. Строка с номером 2 в таблице уже есть в момент вызова этого метода (нумерация строк идёт с 0, т.е. строк должно быть как минимум 3)?
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Brayan от 20-12-2019, 15:16:03
Спасибо, получилось. Пришлось сделать вторую транзакцию и в ней назначать стиль. В первой транзакции у меня создавалась таблица. Это очень странно, но работает. Версия 2020(23.1)
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Александр Ривилис от 20-12-2019, 15:21:12
Это очень странно, но работает
Странно что? Что понадобилась вторая транзакция или что работает?
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Brayan от 20-12-2019, 15:24:56
Что понадобилась вторая транзакция.
Название: Re: Назначить RowType(Row style) Header заданной строке в таблице
Отправлено: Александр Ривилис от 20-12-2019, 16:06:23
Что понадобилась вторая транзакция.
Это нормально. Чаще всего, чтобы не было второй транзакции, помогает если сначала добавить таблицу в базу данных, т.е. AppendEntity(tab) сразу после Table tab = new Table()), а затем уже все остальные операции с таблицей.