05.09.2002, 09:41 | #1 |
Участник
|
Как определить для какого контрола вызван DataMethod?
Здравствуйте,
Имеется следующая задача: в grid динамически добавляются контролы, данные для которых поставляются достаточно сложным запросом, описанным в DataMethod'е. Но для каждого контрола, метод должен иметь свои модификации, разные параметры запросов и т.д. Т.к. контролы добавляются динамически, то им можно передать только какой-то заранее определенный метод, поэтому хотелось бы внутри этого метода как-нибудь определить, для какого элемента он вызывается в данный момент, что бы выполнить соответсвующий запрос. Можно ли это как-нибудь сделать? С уважением, программист группы компаний "Счастливый кроха". |
|
05.09.2002, 13:23 | #2 |
Участник
|
Господи!
Да что ж вы там делаете то, что вопросы у вас такие? Расскажи, будь милосердным! |
|
05.09.2002, 14:04 | #3 |
Участник
|
Почеу бы не сравнить hWnd текущего контрола и контрола с определённым именем (предварительно сделав его AutoDeclaration, но это не обязательно), т.е. нечто подобное:
display someDataMethod (....) ... if (this.hWnd() == someControl.hWnd()) { // Находимся в контроле someControl ... |
|
05.09.2002, 14:57 | #4 |
Участник
|
To xroad:
Autodeclaration имхо не пойдет, т.к. контрол вставляется динамически. >> display someDataMethod (....) ... if (this.hWnd() == someControl.hWnd()) { // Находимся в контроле someControl ... >> Так мне тоже кажется не получится, т.к дисплэй метод объявлен в источнике данных, поэтому this - будет относится к источнику или даже форме, и что вернется в hWnd я даже не могу предположить... Хотя я это еще не пробовал, поэтому со 100% уверенностью сказать не могу, но в любом случае спасибо за совет С уважением, программист группы компаний "Счастливый кроха". |
|
05.09.2002, 15:30 | #5 |
Участник
|
Re: Как определить для какого контрола вызван DataMethod?
Цитата:
Изначально опубликовано rumpleteazer
Т.к. контролы добавляются динамически, то им можно передать только какой-то заранее определенный метод Посмотри для примера как управляются днями месяца в табеле в расчете зарплаты. И все же. Что ты такое ваяешь? Безумно интересно. |
|
06.09.2002, 09:14 | #6 |
Участник
|
Re: Re: Как определить для какого контрола вызван DataMethod?
Цитата:
Изначально опубликовано mazzy
Раз уж ты передаешь "заранее определенный метод" контролу, то укажи там же заодно и его идентификатор. Пусть контрол вызывает заранее определенный метод, а в аргументах передает свой идентификатор. Посмотри для примера как управляются днями месяца в табеле в расчете зарплаты. И все же. Что ты такое ваяешь? Безумно интересно. Как указать контролу что DataMethod надо вызывать с определенным аргументом? (*задумчиво так*) Дни месяца в табеле зарплаты...А хоть куда это смотреть? ну название формочки, отчетика какого-нибудь... А что ваяю..ну долго рассказывать, но в кратце это будет динамическая настройка колонок прайс-листов...вообщем выбираешь тип прайс-листа и прайс-лист показывается только с тему колонками, коотрые определены для данного типа. А колонок в описание типа можно напихать сколько угодно...Вот. С уважением, программист группы компаний "Счастливый кроха". |
|
06.09.2002, 11:16 | #7 |
Banned
|
Не хочется вас расстраивать, но сделать то, что вы хотите, невозможно.
Мы в Navision решали аналогичную задачу при разработке налогового учета. Добавить динамические поля в grid не удастся. Возможные решения:
|
|
06.09.2002, 11:26 | #8 |
Участник
|
И вправду, план был замечательный — такой простой и ясный. Одно только плохо: Алиса не имела ни малейшего представления о том, как все это осуществить (С) Л.Кэррол. Алиса в стране чудес.
Что у тебя уже сделано (должно быть): 1. Ты диамически создаешь контрол (в этот момент ты знаешь его имя) 2. К этому контролу ты динамически прицепляешь метод 3. В этом методе у тебя написан вызов общего метода Что нужно добавить: 4. На шаге 3 добавляй не просто вызов общего метода, а дополнительно передавай в качестве параметра название контрола. Ведь в момент создания ты знаешь его имя. Пусть контрол сам передает свое имя. Тогда не надо будет его определять динамически. Про прайс-листы. Не думаю, что нужна динамическая настройка... Наверное хватит статической. Создай например 10 колонок, а затем включай и выключай их (но не создавай!). А еще лучше сделать все статическим. Пример динамического включения выключения в табелях. Форма RPayTblDayHourTrans. Метод формы redrawPayTblDayHourTrans. Пример статического управления видимостью - формы бухгалтерских журналов. Все бухгалтерские журналы работают по одной и той же таблице. Но контролы показывают разные. В твоем случае, наверное, также есть группы клиентов, которым нужны прайсы определенного вида. Видов прайсов, скорее всего, немного. Штук 10-20. По-моему, ты гораздо быстрее создашь 20 почти одинаковых форм с разными статическими колонками, чем заниматься программированием динамического управления. |
|
06.09.2002, 11:31 | #9 |
Участник
|
Мдя.....Очень жаль....
Создаваь ряд полей друг за другом пробовал в гриде...но, к сожалению, поля могут скрываться, может меняться порядок их расположения, так что на порядок следования полей полагаться нельзя. С уважением, программист группы компаний "Счастливый кроха". |
|
06.09.2002, 11:41 | #10 |
Banned
|
Да не в гриде. На форме друг за другом (типа сэмулировать одну строку). Идеи от Mazzy напомнили мне еще два незапатентованных способа:
|
|
06.09.2002, 11:50 | #11 |
Участник
|
Цитата:
Изначально опубликовано mazzy
[i] Что у тебя уже сделано (должно быть): 1. Ты диамически создаешь контрол (в этот момент ты знаешь его имя) 2. К этому контролу ты динамически прицепляешь метод 3. В этом методе у тебя написан вызов общего метода Что нужно добавить: 4. На шаге 3 добавляй не просто вызов общего метода, а дополнительно передавай в качестве параметра название контрола. Ведь в момент создания ты знаешь его имя. Пусть контрол сам передает свое имя. Тогда не надо будет его определять динамически. Наверное, это я такой тупой, но все-таки.... Поподробнее про шаг 3. На шаге 3 я у вновь созданного контрола устанавливаю свойство DataMethod, которому передаю строку с именем метода...Делается это примерно так: str sControlName; ............ frc = InventItems.addControl(FormControlType::REAL,sControlName); frc.label(tblPriceListSettings.HB_PriceGroup); frc.dataSource("InventTable"); frc.dataMethod("HB_getPriceForCustomColumn"); И куда там засунуть параметр? Мы же передаем только имя метода, без всяких способов его вызова.... С уважением, программист группы компаний "Счастивый кроха". |
|
06.09.2002, 12:26 | #12 |
Участник
|
Цитата:
Изначально опубликовано rumpleteazer
На шаге 3 я у вновь созданного контрола устанавливаю свойство DataMethod Тогда я не знаю. |
|
06.09.2002, 12:34 | #13 |
Участник
|
Похоже, что действительно никак. Тем более, что Евгений говорит, что пробовал и не получилось.
Цитата:
Изначально опубликовано EVGL
использовать не grid, a list EVGL, а можно в list делать фильтры страндартными средствами без программирования? |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|