Заполнение объединеных ячеек в таблице

Автор Тема: Заполнение объединеных ячеек в таблице  (Прочитано 3043 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 41
  • Карма: 0
Подскажите, как теперь заполнить объединённые ячейки? Не вижу метода...
« Последнее редактирование: 11-11-2019, 11:30:18 от Александр Ривилис »

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

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

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

  • ADN OPEN
  • Сообщений: 41
  • Карма: 0
Не получается также:
Одиночные ячейки я заполняю так:
Код - C# [Выбрать]
  1. tableInstance.Cells[3, 3].SetValue("test",Db.ParseOption.ParseOptionNone);
Для объединённых нет метода SetValue, я попробовал метод SetCustomData компилится, но ничего не заполняет
Код - C# [Выбрать]
  1. Db.CellRange rngMark = Db.CellRange.Create(
  2.                    tableInstance, 2, 1, 5, 1);
  3. rngMark.SetCustomData("test", Db.ParseOption.ParseOptionNone);
  4.  

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

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

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

  • ADN OPEN
  • Сообщений: 41
  • Карма: 0
Вот:



AutoCad2017x64 VS2019

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот:



AutoCad2017x64 VS2019
А кто сказал, что нужно SetValue использовать для CellRange? Для Cells используй точно так же, как для необъединённой ячейки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 41
  • Карма: 0
Жаль конечно было бы удобно. Причём писать надо в первую ячейку CellRange (если объединяли по вертикали, то в самую верхнюю), если промахнёшься данные теряются.

Отмечено как Решение serega374 11-11-2019, 13:23:19

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот тестовый пример:

Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. // This line is not mandatory, but improves loading performances
  9. [assembly: CommandClass(typeof(MergeCellsTest.MyCommands))]
  10.  
  11. namespace MergeCellsTest
  12. {
  13.   public class MyCommands
  14.   {
  15.     [CommandMethod("MergeCellsTest")]
  16.     public void MergeCellsTestHandler()
  17.     {
  18.       Document doc = Application.DocumentManager.MdiActiveDocument;
  19.       if (doc == null) return;
  20.       Editor ed = doc.Editor;
  21.       Createtable();
  22.     }
  23.     public void Createtable()
  24.     {
  25.       Database db = HostApplicationServices.WorkingDatabase;
  26.  
  27.       using (Transaction tr = db.TransactionManager.StartTransaction())
  28.       {
  29.         BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId,  OpenMode.ForRead);
  30.         ObjectId msId = bt[BlockTableRecord.ModelSpace];
  31.  
  32.         BlockTableRecord btr = (BlockTableRecord)tr.GetObject(msId,  OpenMode.ForWrite);
  33.  
  34.         Table tb = new Table();
  35.         tb.TableStyle = db.Tablestyle;
  36.         btr.AppendEntity(tb);
  37.  
  38.         // Число строк
  39.         int RowsNum = 5;
  40.         // Число столбцов
  41.         int ColumnsNum = 5;
  42.  
  43.         // Высота строки
  44.         double rowheight = 3;
  45.         // Ширина столбца
  46.         double columnwidth = 20;
  47.  
  48.         // Добавляем строки и колонки
  49.         tb.InsertRows(0,  rowheight,  RowsNum -1);
  50.         tb.InsertColumns(0,  columnwidth,  ColumnsNum - 1);
  51.  
  52.         tb.SetRowHeight(rowheight);
  53.         tb.SetColumnWidth(columnwidth);
  54.  
  55.         Point3d eMax = db.Extmax;
  56.         Point3d eMin = db.Extmin;
  57.         double CenterY = (eMax.Y + eMin.Y) * 0.5;
  58.         tb.Position =  new Point3d(10, 10, 0);
  59.  
  60.         CellRange range = CellRange.Create(tb, 1, 0, 1, 4);
  61.         tb.MergeCells(range);
  62.         range = CellRange.Create(tb, 3, 0, 3, 4);
  63.         tb.MergeCells(range);
  64.         range = CellRange.Create(tb, 4, 0, 4, 4);
  65.         tb.UnmergeCells(range);
  66.  
  67.         // заполняем по одной все ячейки
  68.         for (int i = 0; i < RowsNum; i++)
  69.         {
  70.           for (int j = 0; j < ColumnsNum; j++)
  71.           {
  72.             tb.Cells[i, j].TextHeight = 1;
  73.             tb.Cells[i, j].TextString =  i.ToString() + "," + j.ToString();
  74.             tb.Cells[i, j].Alignment =  CellAlignment.MiddleCenter;
  75.           }
  76.         }
  77.         tb.GenerateLayout();
  78.         tr.AddNewlyCreatedDBObject(tb, true);
  79.         tr.Commit();
  80.       }
  81.  
  82.     }
  83.   }
  84. }



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