Есть ли способ обработать динамическое изменение раскрывающегося списка для одной строки в окне данных на основе сетки? - PullRequest
8 голосов
/ 31 марта 2010

Есть ли способ обработать динамическое изменение раскрывающегося списка для одной строки в окне данных на основе сетки?

Пример:

NAME    LIKABILITY         PURCHASED IN  COLOUR
(Text)  (DropDown*)        (Text)        (Text)
Bananas [Good]             Hands         Yellow
        [Bad]
        [Bananas are good]

Apples  [Good]             Bags          Red
        [Bad]

Учитывая вышеизложенное, это сеткаоснованное на окне данных, где поля NAME, PURCHASED IN и COLOUR являются текстовыми полями, где поле LIKABILITY представляет собой раскрывающийся список *.

Я говорю раскрывающийся список *, поскольку одно и то же визуальное представление может бытьсоздается с помощью DropDownList (жестко запрограммированного в элементе datawindow во время разработки) или DropDownDW (или DDDW, оператор выбора, который может основываться на других элементах в окне данных).

Однако способа нетЯ могу получить Bananas с 3 выпадающими, в то время как у Apple только 2.

Если я введу несколько строк по Bananas, то у всех строк будет 3 выпадающих списка, но как только я добавлю строку с яблоками,все выпадающие списки возвращаются к 2 вариантам.

Чтобы попытаться реализовать эту функцию, я попробовал следующие варианты:

  1. dw_1.Object.likability.values("Good~tG/Bad~tB/Bananas are good~tDRWHO") на ue_itemchange при редактировании NAME.

    FAILS: редактирует все экземпляры LIKABILITY вместо текущей строки.

  2. Дублирующиеся выпадающие списки, имеющие один отфильтрованный, один нефильтрованный список выбора на строку, видимый на основе выбора NAME.

    FAILS: невозможно установить видимость / перекрывающиеся столбцы в окне данных на основе сетки. (Источник)

  3. Отображаемое значение в виде жесткого кода в качестве значения базы данных или наоборот.В качестве значений отображения и базы данных укажите GOOD, BAD, BANANASAREGOOD и измените обработку параметров с G, B, DRWHO на эти новые значения.

    FAILS: для всех строк отображается 3-й параметр,все еще можно выбрать в строках Apple, что неверно.

  4. DDDW извлекает список параметров для раскрывающегося списка.Создайте DDDW, который использует значение NAME, чтобы определить, какие параметры он должен иметь для раскрывающегося списка.

    FAILS: редактирует все экземпляры раскрывающегося списка, а не только текущую строку.

  5. DDDW извлекает счетчик доступных опций (если B, затем 3, еще 2), затем имеет дублирующиеся раскрывающиеся столбцы, которые защищают / снимают защиту на основе счетчика DDDW.

    FAILS: Невозможно автоматически выбрать значение dddw для заполнения столбцавызывать защиту в двух других столбцах, в любом случае уродливое решение.

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

Ответы [ 3 ]

4 голосов
/ 31 марта 2010

Итак, ответ на ваш вопрос - нет, у вас не может быть уникального содержимого в DropDownListBoxes (или DropDownDataWindows в этом отношении) построчно.

Решение вашей проблемы более сложное. Вы можете изменить содержимое раскрывающегося списка в RowFocusChanged, но что происходит с представлением в строках, где значение кода больше не находится в списке значений? Отображается только значение кода. Это не здорово, когда вы не в определенном ряду, если вместо красного отображается R. Таким образом, общее решение состоит в том, чтобы иметь два элемента управления, расположенных друг над другом, для представления этих данных: один, который виден, когда строка имеет фокус (выпадающий список независимо от ), и тот, который отображается когда какая-то другая строка имеет фокус, это показывает отображаемое значение кода. В прошлом я делал это со статическим текстом или фиктивным столбцом стиля редактирования в качестве второго элемента управления и устанавливал значение в ItemChanged первого столбца. Однако сегодня утром я предполагаю, что вы могли бы сделать это без использования сценариев, если бы второй элемент управления был выпадающим столбцом, указывающим на тот же столбец в наборе данных, который всегда содержал полный набор значений. Я оставлю эксперимент (и несколько других частей, необходимых для этой работы, например, то, что происходит, когда пользователь нажимает на второй элемент управления из другой строки), до вас.

Удачи,

Терри.


Добавление

Вы спрашивали о том, как все делается, строка за строкой. Это будет похоже на Рождество для вас (или на какой-нибудь другой культурно подходящий праздник для получения подарков). Посмотрите на панели свойств в окне DataWindow все элементы, которые имеют кнопку справа со знаком равенства? Это позволяет вам ввести выражение, которое будет оцениваться построчно для определения значения атрибута. Чтобы ввести выражение, чтобы поле было видно только тогда, когда оно является текущей строкой?

if (getrow() = currentrow(), 1, 0)

Вы также можете изменить () эти выражения во время выполнения. Я оставлю вас на помощь, чтобы выкопать это. В справке также приводится список атрибутов для каждого элемента управления DataWindow, который включает в таблицу то, принимает ли каждый атрибут выражение. (Кнопки равенства не являются 100% истории; не все выражаемые атрибуты могут быть выражены через IDE.)

Примечание: если вы получите выражения и научитесь их обрабатывать, вы получите всю мощь DataWindow.

Что касается сеток, мое второе предложение столбца над столбцом не будет работать в сетках, очевидно, достаточно. Настало время вернуться к использованию столбца и статического текста, например, со скриптом ItemChanged.

* Т. +1025 *

3 голосов
/ 31 марта 2010

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

Вы не можете изменять таблицу кодов на основе выражения, как вы можете, например, с помощью. к сожалению, размер шрифта.

Если вам нужен больший контроль над выпадающим списком, вы можете сделать его DropDownDW. Вы можете повторно получить его в RowFocusChanged, передав значение из вашего второго столбца.

0 голосов
/ 08 апреля 2010

Создайте в столбце фиктивный столбец, который будет достаточно большим, чтобы содержать отображаемое значение. Используйте DropDownDataWindow для этого столбца, используя столбец отображаемого значения как для отображаемого значения, так и для значения данных. Когда вы извлекаете DataWindow, заполните этот столбец, найдя правильные значения (подсказка: используйте DDDW для реального, скрытого столбца и вызовите LookUpDisplay (), убедитесь, что фильтр очищен при этом); затем вызовите ResetUpdate (). Отфильтруйте значения в раскрывающемся списке по желанию в соответствии со значениями в текущей строке. В событии ItemChanged, когда значение фиктивного столбца изменяется, получите код из DDDW (DDDW будет в правильной строке, когда столбец имеет фокус) и измените значение в скрытом столбце, затем измените статус фиктивного столбца на NotModified. , Поскольку фиктивный столбец содержит отображаемое значение, фильтрация DDDW не приведет к отображению кода. Новые строки и обновления позаботятся о себе.

...