Hirons Napisano Kwiecień 8, 2013 Zgłoś Share Napisano Kwiecień 8, 2013 Witam serdecznie Męczę się z tym już kolejny dzień. Piszę program do wysyłania maili do klientów. Posiada on StringGrida złożonego z 8 kolumn z czego pierwsza jest z CheckBoxem do zaznaczenia konkretnego klienta. W formie mam CombBoxa i StringGrida. ComboBox ma opcje np: -WSZYSTKIE- Niebieski Zielony Czerwony I chcę aby po zkliknięciu konkretnej opcji pokazywało TYLKO wiersze które mają w 6 kolumnie to słowo (przy tym nie usuwając aktualnego zaznaczenia CheckBox). Dla opcji -WSZYSTKIE- aby nie filtrowało i pokazywało wszystkie wiersze StringGrida. Jak rozwiazać jeszcze jedną kwestię: Zaznaczanie klientów z przyciskiem shift czyli np. zaznaczam wiersz nr 2 i z shiftem klilam na wiersz 12 to zaznacza mi od 2 do 12 wiersza. Mam nadzieję że wystarczająco opisałem. Proszę o pomoc Pozdrawiam @edit Mam takie coś: lecz to się kiepsko chyba tyczy do mojego problemu: var FilterList : TStringList; // Filter setzen // set the filter procedure TForm1.SetFilter(ACol:Integer;Exp:String); var I,Counter:Integer; begin FilterList:=TStringList.Create; With Grid do begin //Filterliste mit Gridinhalt füllen For I := FixedRows To RowCount - 1 Do FilterList.Add(Rows[i].Text); //Grid filtern Counter:=FixedRows; For I := FixedRows To RowCount - 1 Do Begin If Cells[ACol,I] <> Exp Then Begin Rows[i].Clear; end Else begin If Counter <> I Then Begin Rows[Counter].Assign(Rows[i]); Rows[i].Clear; End; Inc(Counter); End; End; RowCount:=Counter; End; end; // Gridinhalt wiederherstellen // restore the original content procedure TForm1.RestoreFilter; var I:Integer; begin With Grid do begin RowCount:=FixedRows+FilterList.Count; For I:=0 To FilterList.Count - 1 Do Rows[FixedRows+I].Text := FilterList.Strings[i]; End; FilterList.Free; end; //Example procedure TForm1.BtnSetFilterClick(Sender: TObject); begin //Grid nach Zellinhalt der markierten Zelle filtern SetFilter(Grid.Col,Grid.Cells[Grid.Col,Grid.Row]); end; procedure TForm1.BtnRestoreFilterClick(Sender: TObject); begin RestoreFilter; end; Link do komentarza Udostępnij na innych stronach More sharing options...
Integer Napisano Czerwiec 7, 2013 Zgłoś Share Napisano Czerwiec 7, 2013 Na moje oko TStringGrid służy tylko do wyświetlania w tym przypadku. O ile musi być z wykorzystaniem tego komponentu to proponuję utworzyć tebelę z rekordami i sa dwa wyjścia: 1. dajesz dodatkowy parametr typu string gdzie dodajesz jakiej opcji to dotyczy np. tabela[ licznik ].rekord.opcja:='czerwony'; przy wyświetlaniu przeglądasz tabelę i jeśli któryś rekord pasuje to go na ekran 2. szybszy sposób to utworzenie na podstawie tabeli z punktu 1. list indexów -> array of Integer, wtedy wyświetlanie jest znacznie szybsze, ale potrzeba ciut więcej procedurek dopisać wyglądało by to tak: tabela[ czerwony ].rekord.opcja:='czerwony'; Zamiast przeglądać całej tabeli program zajmuje się tylko jej mały wycinkiem, jednak te indexy jeszcze trzeba zapisywac do pliku np w TStringList Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.