Jump to content

Программно заполнить unimDBLookupComboBox и выбрать значение


x11

Recommended Posts

Очень хотелось бы, но значение пустое.

Я уже написал об этом

http://forums.unigui.com/index.php?/topic/14857-программно-заполнить-unimdblookupcombobox-и-выбрать-значение/&do=findComment&comment=81299

Повторюсь. Проблем нет, если список привязан к датасету. Но в режиме RemoteQuery - KeyValue теряет значение.

Link to comment
Share on other sites

Получается, что в режиме RemoteQuery придется использовать очередной костыль, например, свойство TAG :sad:

Link to comment
Share on other sites

On 8/10/2020 at 11:14 AM, Sherzod said:

Не пробовали использовать это обходное решение?:

 

Подскажите,  где в этом решении код, который читает ID (идентификатор) выбранной строки?

Поймите, программиста интересует (в первую очередь!) не текст, а именно ключевое значение.

Как я уже писал ранее и давал пример, в списке могут быть 2 одинаковые строки, но в с разными ключевыми значениями. Как понять - какую строку выбрал пользователь?

Link to comment
Share on other sites

5 minutes ago, x11 said:

Подскажите,  где в этом решении код, которые читает ID (идентификатор) выбранной строки?

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

Link to comment
Share on other sites

18 minutes ago, x11 said:

Подскажите,  где в этом решении код, которые читает ID (идентификатор) выбранной строки?

Поймите, программиста интересует (в первую очередь!) не текст, а именно ключевое значение.

Как я уже писал ранее и давал пример, в списке могут быть 2 одинаковые строки, но в с разными ключевыми значениями. Как понять - какую строку выбрал пользователь?

4.

procedure TUnimLoginForm2.UnimDBLookupComboBox1GetKeyValue(const Value: string; var KeyValue: Variant);
begin
  KeyValue := Value
end;

 

Link to comment
Share on other sites

Я извиняюсь, но тут какой-то бардак.

1. В одном случае там текст, который набирает пользователь.

2. В другом случае, когда (если) пользователь что-то выбрал ЯВНО (без поиска), то там какое-то непонятное число. Что такое 5? Это явно не ID улицы, т.к. мой справочник улиц начинается со значения 20881.

 

Screenshot_1.jpg

Screenshot_2.jpg

Screenshot_3.jpg

Link to comment
Share on other sites

8 minutes ago, x11 said:

Что такое 5?

Случайно не этот "ПРИМЕРНЫЙ" код?:

3. 
procedure TUnimLoginForm2.UnimDBLookupComboBox1AjaxEvent(Sender: TComponent;
  EventName: string; Params: TUniStrings);
begin
  if EventName = 'data' then
    if Params['root'].AsString = 'items' then
    begin
      //Здесь Вы можете использовать JSON модули
      UniSession.SendResponse('[{id: 5, val: "testVal"}, {id: 7, val: "testVal1"}, {id: 8, val: "testVal1"}]');
    end;
end;

 

Link to comment
Share on other sites

Вот ещё пример.

Выбираю из справочника (из списка) значение "светлый". По идее ID должен быть 20971. Но в логах видно, что выбранное значение - 1, вероятно, это индекс строки из списка.

Вопрос. Как в свойстве "OnStreetsRemoteQuery" правильно заполнить список, чтобы туда попали ID из справочника?

Заполняю так, как было указано в вашем примере, вот мой код заполнения

http://forums.unigui.com/index.php?/topic/14857-программно-заполнить-unimdblookupcombobox-и-выбрать-значение/&do=findComment&comment=80897

 

Screenshot_1.jpg

Screenshot_2.jpg

Screenshot_3.jpg

Link to comment
Share on other sites

Just now, Sherzod said:

Случайно не этот "ПРИМЕРНЫЙ" код?:

 

Нет. Как я уже писал ранее, я ваш пример не понял, поэтому не использовал.

Link to comment
Share on other sites

вот я немного переделал заполнение списка

Result.AddPair(q.FieldByName('name').AsString, q.FieldByName('id').AsString);

 

т.е. я передаю и ID тоже. Но в логах всё равно 1 (индекс выбранной строки), а не ID.

Screenshot_4.jpg

Link to comment
Share on other sites

7 minutes ago, Sherzod said:

if EventName = 'data' then

чисто ради интереса вставил ваш код, но заменил на UniSession.Log, выбрал улицу, но в логах ничего нет - пусто.

Screenshot_5.jpg

Link to comment
Share on other sites

3 minutes ago, x11 said:

чисто ради интереса вставил ваш код

Возможно Вы не полностью используете все шаги...

Ваш тестовый случай я отправлю в саппорт портал.

  • Upvote 1
Link to comment
Share on other sites

11 minutes ago, Sherzod said:

Возможно Вы не полностью используете все шаги...

Да, Вы правы. Я не полностью использовал.  Я неправ здесь.

 

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

1. Добавление нового объявления, поэтому изначально список пуст. Наполнить список нужно, когда пользователь что-то набирает в строке, т.е. нужно получить с сервера в браузер только 3-5 соответствующих значений NAME+ID. Ну или из кэша, т.к. я видел свойство RemoteQueryCache.

2. Редактирование объявления. В списке должно быть уже выбрано какое-то значение NAME+ID. Т.е. Наполнить список программно при открытии окна.

Но в любом случае, пользователь может изменить выбор (и при редактировании, и при добавлении).

 

Link to comment
Share on other sites

25 minutes ago, Sherzod said:

Ваш тестовый случай я отправлю в саппорт портал.

 

Жду с нетерпением, потому что из-за непонятной работы unimDBLookupComboBox.RemoteQuery у меня уже вторую неделю проект стоит на месте :(

Link to comment
Share on other sites

Ещё вопрос.

А что если заменить

Result.Add(q.FieldByName('name').AsString);

на

combo.JSInterface.JSCode(#1'.store.add({"id":' + q.FieldByName('id').AsString + ', "val":"'+ q.FieldByName('name').AsString +'"});');

??

Я так понимаю, что если будет 10 записей в датасете, что на клиента будет отправлено 10 ajax-запросов?

А как бы сделать так, чтобы это было одним запросом?

И что потом сделать, чтобы в браузере обновились данные в списке?

 

Link to comment
Share on other sites

  • 1 month later...

Уважаемые разработчики, подскажите, какие-то улучшения для unimDBLookupComboBox и RemoteQuery в ближайшее время планируются?

Проект стоит. Время идет.

Link to comment
Share on other sites

  • 2 weeks later...

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...