10.08.2005, 10:37 | #1 |
Участник
|
Basics: обновление отдельного поля в гриде
Вопрос новичка.
Ситуация такая: есть грид, в нем 2 поля из одного источника данных. Поля вида ID, Name. Поле ID выбирается из lookup-формы. Хотелось бы чтоб сразу после выбора ID в поле Name записывалось имя, соответствующее данному ID. Пока что делаю DS.research() в методе modified поля ID, но это кажется нелогичным и к тому же возникают дополнительные неудобства.. Подскажите плз. что нужно сделать... |
|
10.08.2005, 10:59 | #2 |
Участник
|
полазив по форуму и посмотрев отвлеченные темы сделал следующим образом:
PHP код:
Однако продолжает мучать вопрос - неужели нельзя сделать что-нибудь более экономичное по ресурсам, чем перечитывание всего датасорса? |
|
10.08.2005, 11:10 | #3 |
Участник
|
самое простое делаешь на своей таблице статический метод:
static Name GetMyName( FieldId _FieldId) { MyTable myTable; ; return (select myTable where myTable.FieldId == _FieldId).MyName; } и бросаешь его на грид, так помоему большинство делает |
|
10.08.2005, 11:21 | #4 |
Соучастник
|
BDI_Charges_DS.refreshEx(-1)
__________________
View Anton Soldatov's LinkedIn profile |
|
10.08.2005, 11:34 | #5 |
Участник
|
Цитата:
Изначально опубликовано Антон Солдатов
BDI_Charges_DS.refreshEx(-1) |
|
10.08.2005, 11:40 | #6 |
Участник
|
сорри я не понял вопроса, я думал вопрос про отображение
|
|
10.08.2005, 11:42 | #7 |
Участник
|
Цитата:
Изначально опубликовано Pustik
самое простое делаешь на своей таблице статический метод: ... По-моему, тут другая ситуация: датасорс грида - другая таблица, в ней хранятся ID затраты и различная дополнительная информация. Дело в том, что хочется на гриде выводить не ID, а наименование затраты, которое хранится в BDI_ChargeCodes(ID,Name). Т.о. я выбираю ID при помощи lookup и хочу чтоб в StringEdit на гриде отобразилось наименование. соответствующее этому ID. \ Проблема именно в мгновенном отображении. если я закрою и открою форму (соответственно, перечитается датасорс) то для всех имеющихся записей наименования будут корректными.. |
|
10.08.2005, 11:46 | #8 |
Участник
|
дак все-таки вопрос про отображение? сейчас все опишу...
|
|
10.08.2005, 12:02 | #9 |
Участник
|
создаешь на этой таблице BDI_ChargeCodes(ID,Name) метод :
static Name GetMyName( Id _Id) { BDI_ChargeCodes BDI_ChargeCodes ; return (select BDI_ChargeCodes where BDI_ChargeCodes.id == _Id).Name } далее просто мышкой его хватаешь и несешь в свой грид. Это будет метод который просто отобразит тебе название соответствующее твоему ID А если у тебя STRINGEDIT привязанное к датасоурсу то : 1) поставь свойство у всех элементов формы (ID,String) AutoDeclaration = Yes к примеру они у тебя называются MYID , MYSTRINGEDIT 2) в методе модифайд ID элемента напиши пишешь следующее : MYSTRINGEDIT.text(BDI_ChargeCodes::GetMyName(MYID.value)) |
|
10.08.2005, 12:23 | #10 |
Участник
|
Еще посмотрите как сделано отображение(выбора) Контактного лица в форме поставщиков - Контакты - помоему это как раз то что вы ищите. Там прячется ID и отображается только Имя
|
|
10.08.2005, 12:24 | #11 |
Участник
|
Pustik, огромное спасибо. первый метод подошел..
Есть еще один вопрос по этой теме: я очевидно не совсем понимаю концепцию дата-методов: откуда берется параметр Id _Id, передаваемый ему?? |
|
10.08.2005, 12:32 | #12 |
Участник
|
Цитата:
Изначально опубликовано Dymm
... датасорс грида - другая таблица, .. display Name GetMyName() { return BDI_ChargeCodes::GetMyName(this.ID)) } и тащите его мышкой на свой грид. |
|
10.08.2005, 12:44 | #13 |
Участник
|
Цитата:
Изначально опубликовано Dymm
[B] Есть еще один вопрос по этой теме: я очевидно не совсем понимаю концепцию дата-методов: откуда берется параметр Id _Id, передаваемый ему?? На самом деле правильно бы было где я написал чуть выше. Там Id передается через This.Id . А еще лучше посмотрите как организован метод Find на таблицах , имеющих статус справочников. Например на таблице InventTable. И посмотрите как на других формах выводится наименование номенклатуры, используя этот метод. Тот вариант что выше, будет возвращать только "Название". |
|
10.08.2005, 12:49 | #14 |
Участник
|
Цитата:
Изначально опубликовано Pustik
На самом деле правильно бы было где я написал чуть выше. Там Id передается через This.Id . А с find и display-методом я тоже попробовал. основываясь на Контактах в форме поставщиков.. не заработало( |
|
10.08.2005, 14:08 | #15 |
Участник
|
Кстати, таки не сработало... потому что тогда поля Name у всех записай начинают отображать имя для кода текущей записи..
Если я делаю display-метод на таблице (при помощи find) данные для существующих записей отображаются корректно, вся проблема в отображении наименования для ДОБАВЛЯЕМОЙ записи.. Следовательно вопрос перефразируется в "как вызвать display-метод для поля из метода modified другого поля?" |
|
10.08.2005, 14:20 | #16 |
Участник
|
Ну так тяжело понять почему у вас не работает; и что именно работает, а что нет.
Попробуйте выложить проект в упрощенной форме : таблица BDI_ChargeCodes, ваша форма( желательно только грид на ней ) , и если надо таблицы датасоурса этой формы. Я посмотрю и постараюсь вам помочь. |
|
10.08.2005, 14:41 | #17 |
Участник
|
экспортировал все что есть (его там немного)...
Если подскажете что делать - буду крайне благодарен... |
|
10.08.2005, 14:46 | #18 |
Участник
|
хехе еще вариант можно такой использовать в modified поля ID пишешь
BDI_Charges_DS.write() произойдет запись этой строчки и метод find отобразит корректно название. Но это только для частных случаев, если не возникнет никаких ошибок. Т.е. это просто вариант. Мы в некоторых ситуациях это дело используем. |
|
10.08.2005, 15:07 | #19 |
Участник
|
1) Создал новую форму
2) Убрал из грида лишние поля(чтобы легче было разобраться) и лишний датасоурс 3) И кстати убрал метод лукап (он не работает не знаю почему) )) 4)Написал дисплей метод на вашей таблице значений, bdi_charge по моему 5)Перенес этот метод в грид. 6)Все |
|
10.08.2005, 15:37 | #20 |
Участник
|
да уж. спасибо.. я тоже уже разобрался.. просто дисплей-метод у меня почему-то был объявлен не на BDI_Charges, являющейся датасорсом грида, а на BDI_ChargeCodes )
Спасибо за участие, ситуация проясняется... |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|