Проблема с установкой строке таблицы типа DATA

Автор Тема: Проблема с установкой строке таблицы типа DATA  (Прочитано 12303 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Столкнулся с неприятным моментом, что повторяются ДВЕ первые строки вместо одной :(
Хотя я делаю проверку, что если строка 1-я, то назначаю ей стиль _TITLE - назначается, а если последующие - то _DATA - вот тут происходит не совсем то, что нужно...
Спасибо Диме Загорулькину, его конструкция помогла выявить стили:
Код - C# [Выбрать]
  1. TableStyle tableStyle = db.Tablestyle.GetObject(OpenMode.ForRead) as TableStyle;
  2. string[] cellStyles = tableStyle.CellStyles.Cast<string>().ToArray();
  3. string cellStyle1 = cellStyles.FirstOrDefault(item => item.ToLower(CultureInfo.InvariantCulture).Contains("title"));
  4. string cells, cellStyle2 = cellStyles.FirstOrDefault(item => item.ToLower(CultureInfo.InvariantCulture).Contains("data"));
(последнюю строку я дописал по аналогии)
Однако первой строчке назначается _TITLE, остальным вроде _DATA, кроме второй! Ей все равно задается стиль _HEADER и начинает переноситься в каждый столбец :(
Отладка показала, что он его находит, но вот эта строчка не срабатывает:
Код - C# [Выбрать]
  1. tb1.Rows[i].Style = cellStyle2; // cellstyle2 = "_DATA"
Т.е. на выходе получается tb1.Rows.Style = null.

Как бы мне от этого неприятного явления избавиться? Что нужно проверить?


Заранее спасибо!

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

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

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Выложи чертеж с таблицей.
Уважаемый Александр Наумович!
Прикрепил.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Выложи чертеж с таблицей.
Уважаемый Александр Наумович!
Прикрепил.
Уточняю - таблицу с заполнением.
Фу. Черт. Я не видел твоё заполнение из-за твоего текстового стиля с BigFont - таблица выглядела пустой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
таблицу с заполнением
Ой, да, Вы имеете ввиду заполнение из кода? Тогда вот:
Код - C# [Выбрать]
  1. TextStyleTable curtextstyle = tr.GetObject(doc.Database.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  2. TableStyle tableStyle = db.Tablestyle.GetObject(OpenMode.ForRead) as TableStyle;
  3. string[] cellStyles = tableStyle.CellStyles.Cast<string>().ToArray();
  4. string cellStyle1 = cellStyles.FirstOrDefault(item => item.ToLower(CultureInfo.InvariantCulture).Contains("title"));
  5. string cells, cellStyle2 = cellStyles.FirstOrDefault(item => item.ToLower(CultureInfo.InvariantCulture).Contains("data"));
  6.  
  7. for (int i = 0; i < ncoords+1; i++)
  8.                 {
  9.                     if (i < 1)
  10.                     {
  11.                         tb1.Rows[i].Style = cellStyle1;
  12.                     }
  13.                     else
  14.                     {
  15.                         tb1.Rows[i].Style = cellStyle2; // НЕ РАБОТАЕТ
  16.                     }
  17.                     for (int j = 0; j < 3; j++)
  18.                     {
  19.                         tb1.SetTextHeight(i, j, 3);
  20.                         tb1.SetTextStyle(i, j, curtextstyle["eskdu"]);
  21.                         tb1.SetTextString(i, j, str[i, j]);
  22.                         tb1.SetAlignment(i, j, CellAlignment.MiddleCenter);
  23.                     }
  24.                    
  25.                 }

Отмечено как Решение Александр Ривилис 03-02-2020, 14:37:45

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - C# [Выбрать]
  1. [CommandMethod("ChgRowTypeData")]
  2. public void ChgRowTypeData() // This method can have any name
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   if (doc == null) return;
  6.   Editor ed = doc.Editor;
  7.   PromptEntityOptions prTab =
  8.     new PromptEntityOptions("\nВыберите таблицу для установки типа строки в Data: ");
  9.   prTab.SetRejectMessage("Это не таблица!");
  10.   prTab.AddAllowedClass(typeof(Table), true);
  11.   PromptEntityResult rsTab = ed.GetEntity(prTab);
  12.   if (rsTab.Status != PromptStatus.OK)
  13.     return;
  14.   PromptIntegerOptions prNumRow =
  15.     new PromptIntegerOptions("\nУкажите номер строки (нумерация с нуля): ");
  16.   prNumRow.AllowNegative = false;
  17.   //prNumRow.AllowZero = false;
  18.   prNumRow.AllowNone = false;
  19.   prNumRow.DefaultValue = 2;
  20.  
  21.   PromptIntegerResult rsNumRow = ed.GetInteger(prNumRow);
  22.   if (rsNumRow.Status != PromptStatus.OK)
  23.     return;
  24.  
  25.   using (Transaction tr = doc.TransactionManager.StartTransaction())
  26.   {
  27.     Table tab = tr.GetObject(rsTab.ObjectId, OpenMode.ForWrite) as Table;
  28.     if (tab != null)
  29.     {
  30.       tab.Rows[rsNumRow.Value].Style = "_Data";
  31.     }
  32.     tr.Commit();
  33.   }
  34. }

Выберешь таблицу и номер строки 1.

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ой, да, Вы имеете ввиду заполнение из кода?
Нет. Из-за того что ты использовал шрифт eskd.shx (которого у меня нет), да еще и с установленным флажком BigFont, я видел пустую таблицу. Только после того, как я снял этот флажок - увидел заполнение таблицы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Из-за того что ты использовал шрифт eskd.shx
Ах да, простите, не подумал об этом :)

меняй стиль строке в отдельной транзакции, после того как таблица добавлена в чертеж
Ууууууупс. У меня весь код в одной транзакции... А в процессе транзакции создается 5-6 таких таблиц...  :-[

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ууууууупс. У меня весь код в одной транзакции... А в процессе транзакции создается 5-6 таких таблиц... 
Ну так разделишь на две транзакции. Не вижу проблемы.
« Последнее редактирование: 22-01-2020, 16:47:17 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Не виду проблемы.
Если я правильно понял ход мыслей в коде #5, таблицу для приведения к нужному виду надо указать вручную.
А мой плагин должен отрабатывать полностью в автоматическом режиме без участия пользователя, и я пока не очень понимаю, как мне сослаться на данную таблицу "без рук" :)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Xara,
Ничего ручного здесь нет!!!
1. Код #5 у тебя нормально меняет стиль строки на "_DATA"? Если да, то переходим к пункту 2, если нет, то нужно искать причину.
2. В твоём коде когда ты добавляешь таблицу в базу вызывается метод AppendEntity. Этот метод возвращает ObjectId таблицы. После завершения транзакции, ты открываешь новую транзакцию и используя полученный в первой транзакции ObjectId таблицы открываешь её и меняешь стиль строки на "_DATA". Если несколько таблиц, то соответственно запоминаешь несколько ObjectId таблиц и открыв их в новой транзакции (метод GetObject) модифицируешь для каждой из них стиль строки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Код #5 у тебя нормально меняет стиль строки на "_DATA"?
Не меняет  :(

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

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

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

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