Witam,
Mój problem polega na tym, że wczytuję z INI dane do tabeli ListView:
Wygląd tabeli:
| Data | Pracownik 1 | Pracownik 2 | Pracownik 3 | ** Pracownik 4** | Dodatkowe informacje |
W pliku INI zapisane są dane rachunków pracownikow:
[imie_nazwisko nazwa_obiektu, data]
Pracownik=Mirek Biernacki
Nazwa obiektu=Siegfriedstr.8 , Dusseldorf
Nr rachunku=11
Data wystawienia=2011-07-06
Data wykonania=2011-07-06
Kwota rachunku=72
Suma rachunkow=72
Czas pracy=0700
Godzin=6
Suma godzin=6
Status=Nie zapłacone
Dodatkowe informacje=jakies dodatkowe informacje
Teraz tak... W oknie mam 2 komponenty TDateTimePicker nazwane (Od i Do), combobox z wyborem obiektu (budowli) i przycisk Wyświetl. Na tej podstawie program wyszukuje w INI wszyskich pracownikow wybranego obiektu obiektu, którzy zawierają się w dacie (od i do):
if (Data_wykonania >= Data_od.Date -1) and (Data_wykonania <= Data_do.Date) then
begin
//tutaj dodawanie do listview
end;
Problem w tym, że jeśli 2 pracowników pracowało na tym samym obiekcie, tego samego dnia (załóżmy, że pracowali razem), to zostaną oni wyświetleni każdy w nowym wierszu. Przykład:
Data wykonania | Pracownik 2 | Pracownik 3 | Pracownik 4 | Dodatkowe informacje
2011-07-14 | Nazwa_pracownika 1 | - | - | -
2011-07-14 | Nazwa_pracownika 2 | - | - | - |
Chciałbym, aby wszyscy pracownicy, którzy posiadają taką samą datę wykonania i w INI posiadają przypisane takie same nazwy obiektów, żeby byli dodawani do osobnej kolumny - Pracownik 2... aż do 4. Przykład:
Data wykonania | Pracownik 2 | Pracownik 3 | Pracownik 4 | Dodatkowe informacje
2011-07-14 | Nazwa_pracownika 1 | Nazwa_pracownika 2 | - | -
coś w sylu
for i := 0 to ListView1.Items.Count -1 do
if Data_wykonania = ListView1.Items[i].Caption then
begin
if ListView1.Items[i].SubItems[0] = '' //sprawdzanie czy kolumna 1 (Pracownik 1) jest zajęta
then ListView1.Items[i].Subitems[0] := INI.ReadString(nazwa_sekcji, Pracownik, '') // Dodaj do pierwszej kolumny
else ListView1.Items[i].Subitems[1] := INI.ReadString(nazwa_sekcji, Pracownik, '') // Dodaj do drugiej kolumny
Z tym, że ten kod się w ogóle nie sprawdza.
Próbowałem wczytać do StriingListy wszystkie sekcje z INI, i w petli szukac wymaganych danych czyli:
Sekcje := TStringList.Create;
INI.ReadSections(Sekcje);
for j := 0 to Sekcje.Count -1 do
begin
if INI.ReadString(Sekcje[j], 'Nazwa obiektu', '') = combobox_obiekt.Text then
begin
Data_wykonania := INI.ReadDate(Sekcje[j], 'Data wykonania', Data_wykonania);
if (Data_wykonania >= Data_od.Date -1) and (Data_wykonania <= Data_do.Date) then
begin
Item := Lista_obiektow.Items.Add;
Item.Caption := DateToStr(Data_wykonania) + ' ' + DayValues[DayOfWeek(Data_wykonania)];
Item.SubItems.Add(INI.ReadString(Sekcje[j], 'Pracownik', '');
// Od tego momentu nie wiem jak rozdzielać kolumny
Item.SubItems.Add(INI.ReadString(Sekcje[j], 'Pracownik', '');
Item.SubItems.Add(INI.ReadString(Sekcje[j], 'Pracownik', ''));
Item.SubItems.Add(INI.ReadString(Sekcje[j], 'Pracownik', ''));
Item.SubItems.Add(INI.ReadString(Sekcje[j], 'Dodatkowe informacje', ''));
end;
end;
end;
Jakieś pomysły ?