|
Тема
|
Look up поле
|
|
Автор |
s1ckbOy (непознат
) |
Публикувано | 21.07.09 16:59 |
|
Здравейте! Имам проблем с едно look up поле в грид. На onTitleClick на грида имам процедура която да сортира по полета, но по look up не става :( . Някой ако да знае начин :(
| |
|
Ами начинът си е същия, но явно имаш проблем в процедурата за сортиране. Дай кода да го видим.
Linux isn't free, it's worthless.
| |
|
if (PDataSet is TClientDataSet) and (PField.FieldKind = fkData) then
with TClientDataSet(PDataSet) do
try
DisableControls;
// Close;
IndexFieldNames := PField.FieldName;
// Open;
finally
EnableControls;
end;
Използвам компоненти за работа с dbexpress. Когато сложа проверка за полето дали е look up пищи с грешка за индекса
| |
|
Lookup полетата не съществуват в базата (и в заявката ти). Естествено, по тях не съществуват и индекси, които да се ползват от ClientDataSet-а за сортирането. Опитай в началото да създадеш ръчно такъв индекс:
ClientDataSet.AddIndex('NameOfIndex', 'LookupFieldName', []);
и след това вече ще трябва да можеш да сортираш:
ClientDataSet.IndexName := 'NameOfIndex';
Linux isn't free, it's worthless.
| |
|
"В началото" ..имаш предвид kогато отварям ClientDataSet-a?
| |
|
Например
Тези индекси, които добавяш ръчно не се запазват при затварянето на ClientDataSet-а.
Linux isn't free, it's worthless.
| |
|
изписва ми че неможе да намери полето "cdsKarti:.. field 'IME_KARTA' not found след като мине през AddIndex. Сложих го на AfterOpen на cds-a
| |
|
Ами значи най-вероятно не може. Поне за calculated fields знам че не може. Те трябва да се направят InternalCalc за да стане. Ти защо ползваш lookup поле в ClientDataSet-а? Не можеш ли да го оставиш стринг и да е lookup само в провайдъра ти или най-добре да си го извлечеш още в заявката?
Linux isn't free, it's worthless.
| |
|
|
|
|