Прочитать таблицу IAssociationTable

Автор Andreych, 21.03.24, 10:23:03

« назад - далее »

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

Andreych

Как можно получить значение ячейки таблицы IAssociationTable в чертеже с исполнениями, полученном из 3D?
Делаю вот так:

var    view: IView;
    container: ISymbols2DContainer;
    drwTable: IAssociationTable;
//    drwTable: IDrawingTable;
    table: ITable;
    i, j: Integer;
    s: string;

    view:=doc2d.ViewsAndLayersManager.Views.ActiveView;
    container:=view as ISymbols2DContainer;
//    drwTable:=container.DrawingTables.DrawingTable[0];
    drwTable:=container.AssociationTables.AssociationTable[0];
    table:=drwTable as ITable; // здесь ошибка выдается
    for i:=0 to table.RowsCount-1 do begin
      for j:=0 to table.ColumnsCount-1 do begin
        s:=(table.Cell[i,j].Text as iText).Str;
      end;
    end;

Когда таблица простая IDrawingTable, то этот код работает. С AssociationTable не получается ее привести к типу ITable.
Наверняка же кто-то с такими таблицами сталкивался. Но по форуму не нашел.

Вират Лакх

Это не такая таблица, а типа отчет. Наверно надо сначала у IAssociationTable получить IReport, который преобразовать к IReportTable. Дальше всё понятно.
+ Благодарностей: 1

p3452

Ассоциированная таблица становится обычной таблицей если ее "разрушить" (вроде так!?) - обсуждали ЭТО уже на форуме)

Andreych

Цитата: Вират Лакх от 21.03.24, 12:17:03Это не такая таблица, а типа отчет. Наверно надо сначала у IAssociationTable получить IReport, который преобразовать к IReportTable. Дальше всё понятно.

Спасибо, прочитать таким образом получилось. А вот как теперь изменить текст в некоторых ячейках? Вручную же можно, значит и программно должно быть возможно. Хотя эти изменения могут пропасть при следующем обновлении таблицы, но все равно мне изменение текста нужно сделать.
Пробовал заменить текст как в обычной таблице. Ошибок не возникает, но и ничего не меняется. Может не только для самой таблицы нужно Update вызывать, а еще где-то.

UU

Update может для текста делать, таблица ассоциативная.

p3452

Менять в Ассоциативной таблице, можете, что угодно и как угодно, но "жить" Ваши изменения будут ровно до первого перестроения, или перезагрузки, если Вы не разрушите ассоциативную таблицу.
Ассоциативная таблица и Отчет.png

Andreych

С ассоциативной таблицей делаю так:
var    view: IView;
    container: ISymbols2DContainer;
    drwTable: IAssociationTable;
    repTable: IReportTable;
    i, j: Integer;
    s: string;

    view:=doc2d.ViewsAndLayersManager.Views.ActiveView;
    container:=view as ISymbols2DContainer;
    drwTable:=container.AssociationTables.AssociationTable[0];
    repTable:=drwTable.Report as IReportTable;
    n:=0;

    for i:=0 to repTable.RowsCount-1 do begin
      for j:=0 to repTable.ColumnsCount-1 do begin
        s:=repTable.CellValue[i,j];
        if s='' then begin
          repTable.CellValue[i,j]:='-';
//          repTable.Text[i,j].Str:='-'; // то же самое
          n:=n+1;
        end;
      end;
    end;
//    drwTable.Update; // так таблица обновляется вся из 3D, теряются все ручные изменения
    drwTable.Rebuild;

Но ничего на экране не меняется. Как сделать update для конкретной ячейки таблицы я не нашел.

Причем есть 2 странных момента.
Если в таблице в Компасе вручную в ячейках внести изменения, то программно из таблицы все равно читаются прежние автоматические значения из модели, даже если чертеж сохранить в таком виде. Как прочитать то, что реально отображается в таблице, непонятно.
Изменения в ячейках, сделанные программно, где-то сохраняются. При следующем запуске программы из тех ячеек через CellValue[i,j] читаются уже именно измененные программно значения, хотя на экране в таблице ничего не поменялось. Даже если файл сохранить, все равно читается не то, что видится.

Andreych

Цитата: p3452 от 25.03.24, 19:52:30Менять в Ассоциативной таблице, можете, что угодно и как угодно, но "жить" Ваши изменения будут ровно до первого перестроения, или перезагрузки, если Вы не разрушите ассоциативную таблицу.

Это понятно, что при некотором перестроении (не при каждом) ручные изменения пропадут. Но мне так и надо, а разрушать не надо!
Если Вы знаете, как поменять в ассоциативной таблице что угодно и как угодно, то покажите пример, пожалуйста.