StringGrid und RadioGroup Problem



    StringGrid1->Cells[2][nummer] = Genre->Items->Strings[Genre->ItemIndex];
    
    void __fastcall TForm1::floeschenClick(TObject *Sender)
    {
     int todelete=StringGrid1->Selection.Top;
     for( int i= todelete+1; i< StringGrid1->RowCount;i++)
     {
       StringGrid1->Cells[0][i-1] = StringGrid1->Cells[0][i];
       StringGrid1->Cells[1][i-1] = StringGrid1->Cells[1][i];
       StringGrid1->Cells[2][i-1] = StringGrid1->Cells[2][i];
     }
     if(StringGrid1->RowCount>2) StringGrid1->RowCount--;
     else StringGrid1->Rows[1]->Clear();
    }
    

    3.Nicht gleich immer aus der Haut fahren.Manchmal braucht es halt bis jemand kommt und sich der Sache annimmt ... 😉



  • Vielen Dank für deine Hilfe!!!

    jetzt gibt es noch ein kleines Problem

    hier war es so, das die Zeilen Nr. automatisch nachkorrigiert wird wenn man einen Eintrag löscht!

    StringGrid1->Cells[0][i-1] = StringGrid1->Cells[0][i-1];
    

    durch das entfernen der "-1" ist diese Funktion nicht mehr gegeben

    StringGrid1->Cells[0][i-1] = StringGrid1->Cells[0][i];
    

    hast du evtl. eine Lösung zu diesem Problem



  • Du läst das

    StringGrid1->Cells[0][i-1] = StringGrid1->Cells[0][i-1];
    

    komplett raus.



  • das hat geklappt!
    was mir jetzt noch beim löschen aufgefallen ist, es bleibt immer ein Eintrag stehen den ich nicht löschen kann?!
    Direkt in der 2 Zeile



  • Du meinst eine leere Zeile bleibt stehen ?
    Das hängt hiermit zusammen:

    if(StringGrid1->RowCount>2) StringGrid1->RowCount--;
     else StringGrid1->Rows[1]->Clear();
    

    In einem StringGrid muss die Anzahl von Rows (Rowcount) immer größer als die der fixierten Rows (FixedRows) sein. Ansonsten fällt die Fixierung weg.

    Kannst du hiermit probieren:

    if(StringGrid1->RowCount>1) StringGrid1->RowCount--;
     else StringGrid1->Rows[1]->Clear();
    


  • nicht ganz!
    wenn ich z.b 5 Filme eintrage und alle 5 Filme nacheinander lösche werden effektiv nur die Filme 2-5 geölscht, film 1 bleibt stehen und lässt sich nicht löschen!

    hier wird auch das FixRow gelöscht

    if(StringGrid1->RowCount>1) StringGrid1->RowCount--;
     else StringGrid1->Rows[1]->Clear();
    


  • Wieviel fixierte Rows hast du denn ?

    void __fastcall TForm1::floeschenClick(TObject *Sender)
    {
     int todelete=StringGrid1->Selection.Top; //todelete = Selektierte Row
     for( int i= todelete+1; i< StringGrid1->RowCount;i++)     // alle Zeilen
     {                                                         // hinter todelete
       StringGrid1->Cells[0][i-1] = StringGrid1->Cells[0][i-1];// um eine Pos 
       StringGrid1->Cells[1][i-1] = StringGrid1->Cells[1][i];  // verschieben
       StringGrid1->Cells[2][i-1] = StringGrid1->Cells[2][i];
     }
     //wenn mehr als 2 Rows im Grid sind(1 fixierte + 1 Eintrag) Rowcount  
     //runterzählen ansonsten alles in Zeile 1 löschen.
     if(StringGrid1->RowCount>2) StringGrid1->RowCount--;
     else StringGrid1->Rows[1]->Clear();
    }
    


  • mit dem folgendem Code bleibt das FixRows erhalten, Nr.,Filmname und Genre werden gelöscht, egal wie ich die Löschung der Einträge vornehme!

    if(StringGrid1->RowCount>2) StringGrid1->RowCount--;
     else StringGrid1->Rows[1]->Clear();
    


  • Sehe gerade das Problem in deiner hinzufügen Funktion

    void __fastcall TfMain::fhinzuClick(TObject *Sender) 
    { 
     int nummer = 0 ; 
        if ( Genre -> ItemIndex!=-1)                       //wenn bei RadioGroub nichts aktiviert, keine Funktion 
        { 
           nummer = StringGrid1->RowCount-1;              //speichert RowCounts 
           StringGrid1->Cells[0][nummer] = nummer;        //(Zeilen) und Schreiben 
           StringGrid1->Cells[1][nummer] = eZ1->Text;     //übernimmt Text aus Edit und schreibt in Zelle 
           StringGrid1->Cells[2][nummer] = Genre->Items->GetText(); //Fehler!!Genre 
           StringGrid1->RowCount++;                       //nächste Zeile überlauf 
           } 
    }
    

    ändern nach:

    void __fastcall TfMain::fhinzuClick(TObject *Sender) 
    { 
     int nummer = 0 ; 
        if ( Genre -> ItemIndex!=-1)                       //wenn bei RadioGroub nichts aktiviert, keine Funktion 
        { 
           nummer = StringGrid1->RowCount-1;              //speichert RowCounts 
           StringGrid1->RowCount++;                       //nächste Zeile überlauf 
           StringGrid1->Cells[0][nummer] = nummer;        //(Zeilen) und Schreiben 
           StringGrid1->Cells[1][nummer] = eZ1->Text;     //übernimmt Text aus Edit und schreibt in Zelle 
           StringGrid1->Cells[2][nummer] = Genre->Items->GetText(); //Fehler!!Genre 
    
        } 
    }
    


  • Sorry, etwas schnell gepostet. So müsste es funktionieren.

    void __fastcall TForm1::fhinzufuegenClick(TObject *Sender)
    {
        int nummer = 0 ;
        if ( Genre -> ItemIndex!=-1)
        {
             if(StringGrid1->Cells[0][1]!="") StringGrid1->RowCount ++;
             nummer = StringGrid1->RowCount-1;              //speichert RowCounts
             StringGrid1->Cells[0][nummer] = nummer;        //(Zeilen) und Schreiben
             StringGrid1->Cells[1][nummer] = eZ1->Text;     //übernimmt Text aus Edit und schreibt in Zelle
             StringGrid1->Cells[2][nummer] = Genre->Items->Strings[Genre->ItemIndex];
        }
    }
    


  • Dank deiner Hilfe konnte ich die restlichen fehlerchen ausbessern!
    Das Programm funktionoiert 1A
    Danke

    ------------------------

    Wollte ich jetzt das ganze noch abspeichern und wieder einlesen können, müsste ich das über ein Memo machen?





  • Ps.:Besser währe sowas mit einer Datenbank zu lösen.


Anmelden zum Antworten