Как получить нужный элемент в Delphi DBLookupComboBox для выбора - PullRequest
5 голосов
/ 27 августа 2011

У меня есть DBLookupComboBox , который связан с запросом к базе данных. Эта часть работает нормально. Когда я запускаю программу, DBLookupComboBox заполняется результатами запроса. Я хотел бы видеть DBLookupComboBox , заполненный первым элементом «Пожалуйста, выберите» , когда программа запускается в первый раз или когда действие нового элемента инициируется . (См. Изображение ниже)

enter image description here

Кроме того, если я загружаю ранее сохраненную запись базы данных, которая выбрала Индекс 2 «Быстрое исключение» , как получить DBLookupComboBox для отображения выбранной записи?

Да, «Пожалуйста, выберите» - это индекс 0, и он возвращается как часть запроса.

Ответы [ 5 ]

5 голосов
/ 19 сентября 2013

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

dbluLookup.KeyValue := dbluLookup.ListSource.DataSet.FieldByName(dbluLookup.KeyField).Value;

Это просто устанавливаетKeyValue для первой записи в наборе данных ListSource, которая должна быть строкой «Пожалуйста, выберите».

1 голос
/ 27 августа 2011

Я полагаю, что значение базового поля таблицы равно NULL, а не нулю, что говорит DBComboBox, что значение еще не выбрано, и отображается соответствующим образом.

Если значение в таблице былоноль, я думаю, что текст в поле редактирования комбо будет выбран, чтобы указать это, но я могу вспомнить это неправильно.

В любом случае, просто проверьте Field1.IsNull (или IsEmpty) и затем установите его внуль.Это означает, что вы больше не можете различать «неизвестное значение» (NULL) и «нет выбранного значения» (ноль), если только вы не предотвратите возврат нулевого значения в таблицу ...

1 голос
/ 27 августа 2011

DBLookupComboBox по умолчанию отображает ListField(s), чей KeyField в ListSource соответствует DataField в DataSource.Таким образом, чтобы обеспечить отображение некоторого значения для DataField, равного NULL, вы должны указать KeyField NULL в ListSource.Но можно представить, что не требуется значение NULL в таблице нижележащих слоев, связанной с ListSource.

. Один из способов обойти это - добавить значение NULL в набор данных за ListSource с помощью UNION SELECT,Это должно работать нормально, так как этот набор данных не должен быть редактируемым.

Теперь, чтобы убедиться, что этот специальный набор данных доступен только при добавлении новой записи в набор данных, связанный с DataSource, управляйтезапрос для ListSource.DataSet в DataSource.OnStateChange.Когда DataSource.State = dsInsert, тогда обновите ListSource.DataSet.

1 голос
/ 27 августа 2011

Один из способов сделать это - добавить «Пожалуйста, выберите» в базовую таблицу, из которой вы выбираете, где ключом этого кортежа будет 0. Затем, когда вы отображаете комбинированный список, и значение связанного поля равно 0, «Пожалуйста, выберите» будет отображаться. Конечно, вы должны убедиться, что это значение никогда не выбирается!

0 голосов
/ 28 февраля 2016

Модификация для ответа Стива Чайлдса в TwwDBLookupCombo, компонент InfoPower

cboFilterTravel1.LookupValue := cboFilterTravel1.LookupTable.FieldByName(cboFilterTravel1.LookupField).Value;

Спасибо, Стив, у меня все работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...