Filtro + checkbox

di il
3 risposte

Filtro + checkbox

Buongiorno vorrei fare un filtro concatenando dei checkbox. voi come lo fareste
io per il momento ho fatto cosi.
ma se prendo solo due check non si concatena perchè manca l'or ma non posso dichiararlo nel check singolo

 test:= '';
   if Check1.Checked then
   begin
     Test:=  Test +' ' + '`tipo ` = "B"';
   end;
   if Check2.Checked then
   begin
     Test := Test + ' ' + '`tipo` = "A"';
   end;

   if Check3.Checked then
   begin
      Test := Test + ' ' +  '`tipo` = "U"';
   end;

   if (Check1.Checked) and (Check2.Checked) and (Check3.Checked) then
   begin
      Test := '(`tipo` = "B" or `tipo` = "E" or `tipo` = "U")';
   end;
    f.Tipo := Test;

3 Risposte

  • Re: Filtro + checkbox

    Se ho capito bene, dovrebbe essere ( poi eventualmente da ottimizzare )
    [CODE] procedure TForm1.Button1Click(Sender: TObject); var test : String; begin Test:= ''; if Check1.Checked then begin Test:= Test +' ' + '`tipo ` = "B"'; end; if Check2.Checked then begin if (Test<>'') Then Test := Test + ' Or '; Test := Test + ' ' + '`tipo` = "A"'; end; if Check3.Checked then begin if (Test<>'') Then Test := Test + ' Or '; Test := Test + ' ' + '`tipo` = "U"'; end; caption := Test; end;
  • Re: Filtro + checkbox

    f.developer ha scritto:


    vorrei fare un filtro concatenando dei checkbox. [...]
    io per il momento ho fatto cosi.
    ma se prendo solo due check non si concatena perchè manca l'or ma non posso dichiararlo nel check singolo
    Ci sono migliaia di alternative. Potresti inserire le condizioni in una lista di stringhe (TList<string>) e generare in seguito l'espressione completa concatenando gli elementi al suo interno (ad esempio, usando il metodo String.Join).

    Oppure potresti usare l'oggetto TStringBuilder in modo simile, accodando la parte di testo relativa all'OR solo se trovi già un contenuto all'interno (quindi se Length >= 0), inserendo poi la condizione specifica.

    Se si tratta di uno statement SQL e quindi stai definendo un filtro che finira su una clausola WHERE per ricercare dati su database, puoi inizializzare la stringa con una condizione neutra, ad esempio '1 <> 1', che sia sempre falsa, e poi concatenare (inserendo *sempre* l'OR all'inizio) le altre condizioni, qualora la TCheckBox sia stata spuntata.

    Suvvia, un pochino di ingegno...
  • Re: Filtro + checkbox

    Mumble mumble...
    chbx1.Hint:='quello che vuoi'
    chbx2.Hint:='quello che vuoi'
    chbx3.Hint:='quello che vuoi'

    If (chbx1.Checked) then testo:=testo + chbx1.Hint
    showMesage(testo)

    oppure
    chbx1.Hint:='1'
    chbx2.Hint:='2'
    chbx3.Hint:='3'
    testo:=''
    If (chbx1.Checked) then testo:=testo + chbx1.Hint
    case StrToInt(testo) of
    1: fa qualcosa con solo ch1
    2: fa altro con solo ch 2
    3: vedi un po' tu con solo ch3
    12: ch1 + ch2
    13: ch1 + ch3
    23: ch2 + ch3
    123: tutti i ch...
    poi magari spieghi cosa vorresti ottenere al check.
Devi accedere o registrarti per scrivere nel forum
3 risposte