CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Sortowanie StringGrid

Sortowanie StringGrid

dział ogólny

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 12:17

Po ilu wierszach gubi powiązania? Czy zawsze gubi powiązania po tej samej liczbie wierszy? Czy powiązania są gubione dla wszystkich kolumn w wierszu?
Wrzuć do załącznika plik, który wczytujesz do tabeli, a dla którego powiązania są gubione.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 12:20

Sprawdź czy gubienie powiązań nie zaczyna się od wierszy zawierających puste komórki.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » wtorek, 8 lutego 2011, 12:53

Więc dołączam 2 pliki plik "Zawodnicy.roz" jest wczytany na samym początku do którego dociągamy plik "dane.roz" dzieje się to za każdym razem zaczyna się przy wczytaniu 4 wiersza zostają wtedy zamienione dane w kolumnie "odległość", "belka" i "wiatr" między wierszami 2 i 3

Zawodnicy.roz:

Kod: Zaznacz cały
"Col8";"ROW51"
80;80;80;80;80;80;80;80;
;"  MIEJSCE";"  IMIĘ";" NAZWISKO";"  KRAJ";"ODLEGŁOŚĆ";"  BELKA";"  WIATR";"  PUNKTY"
;"1";"Anssi";"Kjowurant";"Finlandia";"";"";"";""
;"2";"Jurij";"Tepes";"Słowenia";"";"";"";""
;"3";"Vincent";"Descombes";"Francja";"";"";"";""
;"4";"Władimir";"Zografski";"Bułgaria";"";"";"";""
;"5";"Marius";"Ingvald";"Norwegia";"";"";"";""
;"6";"Rafał";"Śliż";"Polska";"";"";"";""
;"7";"Lukas";"Hlava";"Czechy";"";"";"";""
;"8";"Rune";"Velta";"Norwegia";"";"";"";""
;"9";"Maciej";"Kot";"Polska";"";"";"";""
;"10";"Pascal";"Bodmer";"Niemcy";"";"";"";""
;"11";"Stephan";"Hocke";"Niemcy";"";"";"";""
;"12";"Martin";"Schmitt";"Niemcy";"";"";"";""
;"13";"Jakub";"Janda";"Czechy";"";"";"";""
;"14";"Denis";"Korniłow";"Rosja";"";"";"";""
;"15";"Borek";"Sedlak";"Czechy";"";"";"";""
;"16";"Famihisa";"Yumoto";"Japonia";"";"";"";""
;"17";"Jan";"Matura";"Czechy";"";"";"";""
;"18";"Taku";"Takeuchi";"Japonia";"";"";"";""
;"19";"Stefan";"Hula";"Polska";"";"";"";""
;"20";"Kalle";"Keituri";"Finlandia";"";"";"";""
;"21";"Harri";"Olli";"Finlandia";"";"";"";""
;"22";"Noriaki";"Kasai";"Japonia";"";"";"";""
;"23";"Emmanuel";"Chedal";"Francja";"";"";"";""
;"24";"Robert";"Kranjec";"Słowenia";"";"";"";""
;"25";"Roman";"Koudelka";"Czechy";"";"";"";""
;"26";"Shohhei";"Tochimoto";"Japonia";"";"";"";""
;"27";"Andreas";"Jacobsen";"Nowegia";"";"";"";""
;"28";"David";"Zauner";"Austria";"";"";"";""
;"29";"Andreas";"Bardal";"Norwegia";"";"";"";""
;"30";"Dawid";"Kubacki";"Polska";"";"";"";""
;"31";"Peter";"Prevc";"Słowenia";"";"";"";""
;"32";"Michael";"Neumayer";"Niemcy";"";"";"";""
;"33";"Ville";"Larinto";"Finlandia";"";"";"";""
;"34";"Michael";"Uhtmann";"Niemcy";"";"";"";""
;"35";"Paweł";"Karelin";"Rosja";"";"";"";""
;"36";"Einar";"Romoeren";"Norwegia";"";"";"";""
;"37";"Manuel";"Fettner";"Austria";"";"";"";""
;"38";"Johan";"Evensen";"Norwegia";"";"";"";""
;"39";"Wolfgang";"Loitzl";"Austria";"";"";"";""
;"40";"Gregor";"Schlierenzauer";"Austria";"";"";"";""
;"41";"Martin";"Koch";"Austria";"";"";"";""
;"42";"Matti";"Hautameki";"Finlandia";"";"";"";""
;"43";"Severin";"Freund";"Niemcy";"";"";"";""
;"44";"Daiki";"Ito";"Japonia";"";"";"";""
;"45";"Kamil";"Stoch";"Polska";"";"";"";""
;"46";"Tom";"Hilde";"Norwegia";"";"";"";""
;"47";"Andreas";"Kofler";"Austria";"";"";"";""
;"48";"Simon";"Ammann";"Szwajcaria";"";"";"";""
;"49";"Adam";"Małysz";"Polska";"";"";"";""
;"50";"Thomas";"Morgenstern";"Austria";"";"";"";""


dane.roz:
Kod: Zaznacz cały
"Col8";"ROW51"
80;80;80;80;80;80;80;80;
;"  MIEJSCE";"  IMIĘ";" NAZWISKO";"  KRAJ";"ODLEGŁOŚĆ";"  BELKA";"  WIATR";"  PUNKTY"
;"";"";"";"";"135";"10";"1";""
;"";"";"";"";"120";"10";"4";""
;"";"";"";"";"135";"11";"2";""
;"";"";"";"";"111";"11";"3";""
;"";"";"";"";"125";"10";"4";""
;"";"";"";"";"123";"10";"3";""
;"";"";"";"";"113";"10";"3";""
;"";"";"";"";"125";"10";"4";""
;"";"";"";"";"121";"12";"3";""
;"";"";"";"";"109";"12";"2";""
;"";"";"";"";"130";"12";"1";""
;"";"";"";"";"125";"12";"2";""
;"";"";"";"";"109";"12";"2";""
;"";"";"";"";"112";"12";"3";""
;"";"";"";"";"123";"12";"2";""
;"";"";"";"";"101";"12";"2";""
;"";"";"";"";"107";"12";"1";""
;"";"";"";"";"101";"12";"1";""
;"";"";"";"";"125";"12";"0";""
;"";"";"";"";"127";"12";"0";""
;"";"";"";"";"117";"12";"0";""
;"";"";"";"";"119";"12";"2";""
;"";"";"";"";"120";"12";"3";""
;"";"";"";"";"122";"14";"2";""
;"";"";"";"";"130";"14";"2";""
;"";"";"";"";"126";"14";"1";""
;"";"";"";"";"134";"14";"2";""
;"";"";"";"";"132";"14";"3";""
;"";"";"";"";"135";"14";"3";""
;"";"";"";"";"133";"14";"2";""
;"";"";"";"";"132";"14";"1";""
;"";"";"";"";"129";"14";"2";""
;"";"";"";"";"128";"14";"3";""
;"";"";"";"";"110";"14";"3";""
;"";"";"";"";"130";"14";"3";""
;"";"";"";"";"135";"14";"2";""
;"";"";"";"";"137";"14";"2";""
;"";"";"";"";"128";"14";"1";""
;"";"";"";"";"128";"14";"2";""
;"";"";"";"";"124";"14";"3";""
;"";"";"";"";"128";"14";"2";""
;"";"";"";"";"130";"14";"2";""
;"";"";"";"";"137";"14";"3";""
;"";"";"";"";"140";"14";"4";""
;"";"";"";"";"138";"14";"4";""
;"";"";"";"";"142";"14";"3";""
;"";"";"";"";"144";"14";"2";""
;"";"";"";"";"142";"14";"1";""
;"";"";"";"";"148";"14";"1";""
;"";"";"";"";"144";"14";"0";""


a i punkty do testów są obliczane poprzez wyciągnięcie odległości i przypisanie wartości do punktów docelowo będzie to wzór
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » wtorek, 8 lutego 2011, 15:44

Gdy wykonam sortowanie raz gdy już tablica jest wypełniona to działa prawidłowo, lecz ja potrzebuje sortować po każdym wprowadzeniu danych a wtedy niedziała to tak jakie było zamierzenie
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    MacintoshSafari

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 16:37

W zasadzie sortowanie powinno działać niezależnie od liczby wywołań, gdyż w kodzie nie ma pod tym względem żadnych ograniczeń.
Jak rozumiem dodajesz nowe rekordy do tabeli i wywołujesz sortowanie przyciskiem Button?! Jeżeli robisz to nieco inaczej to dokładnie opisz jak to się odbywa, gdyż diabeł zawsze tkwi w szczegółach.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » wtorek, 8 lutego 2011, 16:44

Robię to tak z każdym kliknięciem zostaje wywołana funkcja Grid która wypełnia mi kolumnę punkty wartością a po tym jak widać wywoływana jest funkcja sortująca, wszystko poprzez kliknięcie buttona
Kod: Zaznacz cały
void __fastcall TForm1::Button3Click(TObject *Sender)
{
           zmienna++;
           Grid(zmienna);
           SortGrid(StringGrid1, 7, tsDecreaseInt);   //wywołanie funkcji sortującej po kolumnie z punktami

}
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 17:43

Przeprowadziłem testy z plikiem Zawodnicy.txt. U mnie sortowanie przebiega prawidłowo, niezależnie od tego, czy wczytam plik, czy dodam do niego dane. Gdzieś popełniasz błąd, ale tego nie jestem w stanie stwierdzić, gdyż przytoczone przez Ciebie kody są moje i działają, więc błąd wywołują gdzieś Twoje modyfikacje.
Zakładam iż wiesz, że kod sortujący nie sortuje kolumn FixedCols i wierszy FixedRows.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » wtorek, 8 lutego 2011, 18:09

A mógłbyś spojrzeć na tą funkcję czy może tutaj jest coś nie tak, bo ja niewiem

KOD cpp:     UKRYJ  
void __fastcall TForm1::Grid(int zmienna)
{
       int nota, punkty, kwalifikacja, miejsce1, odleglosc, belka, wiatr, scroll1;
        punkty=0, nota=0, odleglosc=0, belka=0, wiatr=0;
        scroll1=OknoWyboru->ScrollBar1->Position;


         TStringList *Lista = new TStringList;
         Lista->LoadFromFile("dane.roz");
         SetColRow(Lista->Strings[0], StringGrid1);

        for(int i = 0; i < zmienna; i++)      //ładowanie danych z pliku do StringGrida, wiersz po wierszu
         {
                 for(int j = 4; j < 7; j++)   //ładowanie danych w kolumnach od 4 do 6
                 {
                          int Size;
                          StringGrid1->Cells[j][i] = SetCellText(Lista->Strings[i + 2], Lista->Strings[1], Size, j + 1);
                          StringGrid1->ColWidths[j] = Size;

                 }
        }

        zmienna-=1;


        for(int i = zmienna; i <= zmienna; i++)           // wypełnianie panelu z danymi
         {
                nota=losuj();
                Imie->Caption=StringGrid1->Cells[1][i];
                Nazwisko->Caption=StringGrid1->Cells[2][i];
                Kraj->Caption=StringGrid1->Cells[3][i];
                Odleglosc->Caption=StringGrid1->Cells[4][i];
                Belka->Caption=StringGrid1->Cells[5][i];
                Wiatr->Caption=StringGrid1->Cells[6][i];
                odleglosc = StrToInt(StringGrid1->Cells[4][i]);
                belka = StrToInt(StringGrid1->Cells[5][i]);
                wiatr = StrToInt(StringGrid1->Cells[6][i]);
               // punkty=punkty+nota*2+odleglosc-belka+wiatr;
               punkty=odleglosc;
                Punkty->Caption=punkty;
                 for(int j = 7; j < StringGrid1->ColCount; j++)   //wypełnianie tabeli punktami
                 {
                          int Size;
                          StringGrid1->Cells[j][i] = SetCellText(Lista->Strings[i + 2], Lista->Strings[1], Size, j + 1);
                          StringGrid1->ColWidths[j] = Size;
                          StringGrid1->Cells[j][i]=punkty;

                 }
        }
        delete Lista;

        int ile = StrToInt(StringGrid1->Cells[7][1]);
        int miejsce=ile-punkty;     //obliczenie ilosci punktów jaka brakuje do pierwszego miejsca
        if(miejsce<0)
        {
                Miejsce1->Caption=0;
        }
        else
        {
                Miejsce1->Caption=miejsce;
        }
        SortGrid(StringGrid1, 7, tsDecreaseInt);   //wywołanie funkcji sortującej po kolumnie z punktami
        if(zmienna==scroll1)
        {
                ShowMessage("Koniec 1 serii wygrał "+StringGrid1->Cells[1][1]+" "+
                StringGrid1->Cells[2][1]);
                Button4->Enabled=true;
                SaveGridToFile("DrugaSeria.roz", StringGrid1, false);
                Button3->Enabled=false;
                zmienna=1;

        }
}
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 18:23

To jak ładujesz dane do tabeli nie ma znaczenia, istotne jest tylko to co się znajduje w tabeli przed sortowaniem, gdyż funkcja sortująca pobiera wartości z tabeli. Jeżeli tabela jest wypełniona prawidłowo, to sortowanie powinno działać.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » wtorek, 8 lutego 2011, 18:28

No tylko tabela jest wypełniana linia po linii znaczy kliknę raz wypełni się pierwsza linia kliknę drugi raz linia druga itd.. Więc tabela nie jest całkowicie wypełniona podczas sortowania gdyż sortowanie odbywa się po każdorazowym wypełnieniu linii. Czy to może być przez to? Jeśli tak to jak temu zaradzić?
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 18:36

Wszystkie komórki w wierszu nie muszą być wypełnione, ale sprawdź, czy sortowanie działa, gdy wszystkie wiersze mają chociaż jedną komórkę wypełnioną i będziesz wiedział. Jeżeli działa, to znaczy, że w każdym wierszu co najmniej jedna komórka musi być wypełniona.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » wtorek, 8 lutego 2011, 19:03

U mnie przy starcie są nawet 3 komórki w każdym wierszu wypełnione, więc chyba to nie tutaj jest problem. Wrzucam tutaj swój program jakbyś miał chwilkę czasu to odpal (chociażby samego execa) i zobacz co się dzieje przy sortowaniu, bo może ja coś źle tłumacze, a i pomysły mi się kończą. Oczywiście jeśli będziesz miał czas, nie nalegam.

Będę wdzięczny za każdą pomoc.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez Cyfrowy Baron » wtorek, 8 lutego 2011, 20:15

Już znalazłem błąd. To nie funkcja sortująca psuje powiązania lecz Twój kod, a konkretnie ta pętla z funkcji Grid:

KOD cpp:     UKRYJ  
for(int i = 0; i < zmienna; i++)
{
 for(int j = 4; j < 7; j++)
 {
   int Size;

  StringGrid1->Cells[ j][i] = SetCellText(Lista->Strings[i + 2], Lista->Strings[1], Size, j + 1);
  StringGrid1->ColWidths[ j] = Size;
 }
}
Zacznijmy jednak od początku. Po dwukrotnym wywołaniu funkcji Grid tabelka wygląda tak:

grid1.png


Co się nawet zgadza z zawartością pliku dane.roz:

KOD text:     UKRYJ  
;"";"";"";"";"135";"10";"1";""
;"";"";"";"";"120";"10";"4";""
;"";"";"";"";"135";"11";"2";""
;"";"";"";"";"111";"11";"3";""


Za każdym razem gdy wywołujesz funkcję Grid pobiera ona dane z tego pliku i przepisuje je do tabeli StringGrid, ale tylko do kolumn od 4 do 6, czyli tworzy powiązanie z tym co jest w kolumnach od 1 do 3. Dopóki dwa pierwsze wiersze tabeli nie są posortowane to powiązania kolumn 1-3 z kolumnami 4-6 się zgadzają, zauważ jednak, że funkcja Grid tworzy te powiązania za każdym razem gdy ją wywołasz.
Gdy po raz trzeci dodamy rekordy, tabel wygląda tak:

grid2.png


Vincent przesunął się na pierwszą pozycję. Co się stanie gdy teraz wywołasz funkcję Grid? Utworzy ona powiązania, ale nie będą się one zgadzały z tym co było wcześniej, gdyż w pliku dane.roz układ jest inny, a przecież wprowadzasz dane z tego pliku tylko do kolumn 4-6, więc powiązania zostają zepsute jeszcze przed sortowaniem:
grid3.png


Jak widzisz sortowanie na nic się tutaj zda, skoro pętla zawsze ustala porządek z pliku.

Rozwiązanie może polegać na ograniczeniu zmian tylko do pustych komórek:

KOD cpp:     UKRYJ  
        for(int i = 0; i < zmienna; i++)      //ładowanie danych z pliku do StringGrida, wiersz po wierszu
         {
          for(int j = 4; j < 7; j++)   //ładowanie danych w kolumnach od 4 do 6
          {
           int Size;
           if(StringGrid1->Cells[ j][ i].IsEmpty())
           {
           StringGrid1->Cells[ j][ i] = SetCellText(Lista->Strings[i + 2], Lista->Strings[1], Size, j + 1);
           StringGrid1->ColWidths[ j] = Size;
           }
          }
        }


Ja jednak na Twoim miejscu przemyślałbym całą koncepcję funkcji Grid. Po pierwsze trzeba podzielić ją na mniejsze bloki, czyli stworzyć dla niej kilka mniejszych funkcji. Po wtóre te pętle są raczej zbędne i niewydajne, gdyż wciąż wypełniasz to co zostało już wypełnione, co tylko prowadzi do błędów.

Tak chaotycznego i niewydajnego kodu już dawno nie widziałem.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
mufasa
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » środa, 9 lutego 2011, 01:38

Dzięki wielkie za pomoc, jeśli chodzi o funkcje Grid to wiem, że są niewydajne, nieeleganckie i wogóle nieciekawe. Więc teraz będę starał się je zoptymalizować, po prostu napisałem jak umiałem, a teraz postaram się je poprawić mam nadzieje, że wyjdzie coś z tego :)
Dzięki wielkie jeszcze raz
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Re: Sortowanie StringGrid

Nowy postprzez mufasa » środa, 9 lutego 2011, 21:53

Hej mógłbyś w wolnej chwili opowiedzieć jak ta funkcja sortuje tą tabele, gdyż robię to na projekt i na pewno zostanę o to zapytany a nie do końca wszystko rozumiem. Z góry dziękuje
Kod: Zaznacz cały
void __fastcall SortGrid(TStringGrid *Grid, int Col, TTypeSort tsSort)
{

        TStringList *SortList = new TStringList;
        String temp = "";

        for(int i = Grid->FixedRows; i < Grid->RowCount; i++)
        {
                temp = Grid->Cells[Col][i];
                if(temp.IsEmpty()) temp = " ";
                for(int z = Grid->FixedCols; z <= Grid->ColCount; z++)
                {
                        if(Grid->Cells[z][i].IsEmpty()) Grid->Cells[z][i] = " ";
                         if(z != Col)
                                 temp = temp + "^" + Grid->Cells[z][i];

                 }
                 SortList->Add(temp.SubString(0, temp.Length() - 1));
                temp = "";
        }

        switch(tsSort)
        {
                 case tsIncrease:    SortList->CustomSort(CustomSortIncrease); break;
                 case tsIncreaseInt: SortList->CustomSort(CustomSortIncreaseInt); break;
                 case tsDecrease:    SortList->CustomSort(CustomSortDecrease); break;
                 case tsDecreaseInt: SortList->CustomSort(CustomSortDecreaseInt); break;
         }

         temp = "";

        for(int i = 0; i < SortList->Count; i++)
         {
                temp = SortList->Strings[i];

                 int y = temp.Pos("^");
                Grid->Cells[Col][i + 1] = temp.SubString(1, y - 1).Trim();
                 temp = temp.Delete(1, y);
                int z;
                 for(z = Grid->FixedCols; z < Grid->ColCount; z++)
                 {
                        if(z != Col)
                        {
                                y = temp.Pos("^");
                                Grid->Cells[z][i + 1] = temp.SubString(1, y - 1).Trim();
                                temp = temp.Delete(1, y);
                        }
                }
                z++;
                y = temp.Pos("^");
                Grid->Cells[z][i + 1] = temp.SubString(1, y - 1).Trim();
                temp = temp.Delete(1, y);
        }

        delete SortList;
}
Avatar użytkownika
mufasa
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): poniedziałek, 31 stycznia 2011, 17:36
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: c++ builder 6 enterprise
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia stronaNastępna strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości