X11

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Народ, кто работал с TcxCheckComboBox? Интересует, как в цикле вытащить более рационально и правильно всё, что отмечено? Вначале заполняю значения из таблицы, имена -> Description, ID -> Tag. Код: procedure TfmApartSearch.FeelInfosource(); Var CheckComboboxItem: TcxCheckComboboxItem; begin with dm do with fibdsInfoSource do begin Open; First; FetchAll; While not Eof do begin CheckComboboxItem := checkboxCHANGE.Properties.Items.AddCheckItem(FieldByName('NAME').AsString); CheckComboboxItem.Tag := FieldByName('ID').AsInteger; Next; end; close; end; end; | Затем пользователь может отметить кое-что. Затем из др. таблицы мне нужно вытянуть то, что пользователь отметил: Код: function TfmMain.GetComboChecks(CheckCombo: TcxCheckComboBox): string; Var i: Integer; NumItems: Integer; CurrItem: TcxCheckComboBoxItem; ValueFound: Boolean; ValueStrings: TStringList; const CheckValues: array[False..True] of TcxCheckBoxState = (cbsUnchecked,cbsChecked); begin //ПРАВИЛЬНО ЛИ ЗДЕСЬ ВСЁ ПОСТРОЕНО???? //РАБОТАЕТ!! НО МОЖЕТ КТО ЗНАЕТ БОЛЕЕ УМНЫЙ И БЫСТРЫЙ ПОДХОД? //ПРИМЕР НАШЁЛ НА "ИХ" САЙТЕ И НЕМНОГО ПЕРЕДЕЛАЛ ValueStrings := TStringList.Create; try ExtractStrings([';'],[],PChar(CheckCombo.EditText),ValueStrings); NumItems := CheckCombo.Properties.Items.Count; for i := 0 to NumItems - 1 do begin CurrItem := CheckCombo.Properties.Items[i]; if CheckCombo.GetItemState(i) in [cbsChecked] then result := IntToStr(CurrItem.Tag) + ','+result; end;//for finally ValueStrings.Free; end; if result <> '' then begin Delete(result, Length(result),1); // получаем конструкцию для select * from table1 where id_change IN (12,15,26,30,48) result := '('+result+')'; end; end; |
---------- /не мы такие, жизнь такая/ |
|