Изменить ширину столбца подстановки

Я создал поиск с двумя столбцами, первый из которых содержит целое число, который работает нормально, но второй имеет длинное имя, и здесь возникает проблема. Пользователи должны выполнять горизонтальную прокрутку, чтобы проверить всю строку, и даже в этом случае ширина столбца недостаточно велика для отображения всех данных.

Я нашел вот это:

Регулировка ширины столбца при поиске элемента управления формой

Но я не понимаю, где именно и что добавить.

Я не уверен, но, возможно, мне нужно добавить тот факт, что этот поиск используется в пункте меню, который указывает на отчет SSRS, в разделе параметров.

Обновление 1:

Я заставил его работать с формой поиска, которая называется так:

Args args;
FormRun formRun;
;

args = new Args();

args.name(formstr(LookupOMOperatingUnit));
args.caller(_control);
formRun = classfactory.formRunClass(args);
formRun.init();
_control.performFormLookup(formRun);

и в методе инициализации этой формы я добавил:

public void init()
{
    super();
    element.selectMode(OMOperatingUnit_OMOperatingUnitNumber);
}

Имеется в виду поле, которое мне действительно нужно.

введите описание изображения здесь

Я не уверен, что полностью понимаю механизм, но, похоже, он знает, как вернуть это точное поле в DialogField, откуда оно действительно началось.

Чтобы он выглядел как поиск, я сохранил стиль дизайна как Авто, но изменил WindowType на Popup, HideToolBar на Да и Рамка на Границу.


person Olaru Mircea    schedule 23.12.2015    source источник
comment
Просто измените свойство Style на Lookup   -  person Jan B. Kjeldsen    schedule 23.12.2015
comment
Посмотрите на методы формы FiscalCalendarYearLookup init и run, чтобы добавить правильное поведение.   -  person Jan B. Kjeldsen    schedule 23.12.2015
comment
Вы можете создать альтернативный расширенный тип данных для вашего целевого поля, тогда вам не понадобится какой-либо вызывающий код.   -  person Jan B. Kjeldsen    schedule 23.12.2015
comment
@ JanB.Kjeldsen Если я изменю стиль на «Поиск», он будет вести себя так же, как и раньше, когда я не мог видеть всю строку или изменять ее размер .. Я посмотрю FiscalCalendar ....   -  person Olaru Mircea    schedule 23.12.2015


Ответы (2)


Вероятно, лучший способ - выполнить пользовательский поиск и изменить расширенный тип данных ключевого поля, чтобы отразить это. Таким образом, изменение отражается повсюду. См. Форму FiscalCalendarYearLookup и EDT FiscalYearName в качестве примера.

Если вам нужно изменить только одно место, самый простой вариант - переопределить performFormLookup в форме вызова. Вы также должны переопределить свойство DisplayLength расширенного типа данных длинного поля.

public void performFormLookup(FormRun _form, FormStringControl _formControl)
{
    FormGridControl grid = _form.control(_form.controlId('grid'));
    grid.autoSizeColumns(false);
    super(_form,_formControl);
}

Это не поможет вам, если у вас нет формы, что может быть не так в этом сценарии отчета.

Начиная с AX 2009 ядро ​​по умолчанию автоматически обновляет размеры элементов управления на основе фактического содержимого записи. Это было причиной большого разочарования, так как размеры были маленькими, когда не было записей, и эти размеры были сохранены! Кроме того, в некоторых ситуациях производительность автообновления изначально была плохой. В качестве запоздалой мысли был предоставлен метод autoSizeColumns управления сеткой, но, к сожалению, он никогда не был представлен как свойство.

person Jan B. Kjeldsen    schedule 23.12.2015
comment
Спасибо за ответ .. есть ли шанс, что я могу создать форму, открыть ее из метода поиска, выбрать строку и затем вернуть желаемое поле? Может быть, что-то вроде этого: ax4dev.wordpress.com/tag/performformlookup - person Olaru Mircea; 23.12.2015
comment
Почему ты хочешь сделать это именно так? По возможности придерживайтесь стандартного образа действий. - person Jan B. Kjeldsen; 23.12.2015

вы можете расширить класс sysTableLookup и переопределить метод buildFromGridDesign, чтобы установить ширину элемента управления сеткой.

protected void buildFormGridDesign(FormBuildGridControl _formBuildGridControl)
{
    if (gridWidth > 0)
    {
        _formBuildGridControl.allowEdit(true);
        _formBuildGridControl.showRowLabels(false);
        _formBuildGridControl.widthMode(2);
        _formBuildGridControl.width(gridWidth);
    }
    else
    {
        super(_formBuildGridControl);
    }

}
person li li    schedule 15.06.2020