Frage zur FAQ (StringGrid leeren)



  • Hallo,
    da ich ein braver Junge bin, habe ich zunächst in der FAQ nachgeschaut :D. Ich suchte nämlich eine Lösung mein StringGrid zu leeren. Dort habe ich etwa diesen Code gefunden:

    for (int i = 0; i < grid->RowCount; i++)
      for (int j = 0; j < grid->ColCount; j++)
       grid->Cells[i][j] = "";
     grid->RowCount = 20;
     grid->ColCount=8;
     grid->FixedRows=1;
    

    Nun ist mein Problem, dass dies nicht funktioniert. Die schon beschriebenen Zellen werden nicht wieder geleert. Ich habe einfach mal zum Test das hier geschrieben:

    grid->Cells[i][j] = "Test";
    

    Nun wurden zwar in alle Zellen "Test" geschrieben, doch die schon vollen wurden einfach übergangen!

    Was mache ich falsch?
    Vielen Dank
    lg, freakC++



  • Hallo FreakC,

    ein StringGrid darfst Du nur leeren, wenn auch die
    gelöschten Zeilen bereits angezeigt werden.

    In Deinem Code löscht Du Anzahl Spalten und Zeilen und
    erst danach setzt Du mit RowCount usw. das Grid neu auf.

    Korrekt und einfacher geht es so:

    Integer iAnz;
    
    Grid->RowCount=10;
    Grid->ColCount=5;
    Grid->FixedCol=1;   //...usw.
    
    //... sonstiger Code
    
    iAnz=Grid->RowCount;
    for(int i1=Grid->FixedCol;i1<iAnz;i1++) { Grid->Rows[i1]->Clear(); }
    

    Ich setze in StringGrids generell nur Spalte 1 und zeichne dann
    den Inhalt der Zeilen im OwnerDraw. Vorteil: Bei größeren StringGrids
    wesentlich schneller als alle Zellen einzeln zu beschreiben 😉

    Gruss Stefan



  • Hallo Stefan7124,
    das verstehe ich noch nicht so ganz. Ich habe ein großes StringGrid und da steht schon was drin. Nun wird es neu beschrieben und mit meinen Code sollten doch alle Zellen überschrieben werden. Danach wird nun das leere StringGrid mit einem neuen Format angezeigt.

    Warum darf ich das nicht machen??? 😕

    Vielen Dank
    lg, freakC++



  • freakC++ schrieb:

    for (int i = 0; i < grid->RowCount; i++)
          for (int j = 0; j < grid->ColCount; j++)
             grid->Cells[i][j] = "";
    

    Tausche in Cells die Variablen oder in den Schleifen RowCount/ColCount tauschen.

    mfg
    kpeter



  • Hallo FreakC

    in Deinem Beispielcode fragst Du doch in Deinen
    Schleifen mit den Parametern RowCount und ColCount
    die Anzahl der Spalten und Felder ab. Danach setzt
    Du das RowCount auf 20 und ColCount auf 8. Wenn jetzt aber
    vor Deinen Schleifen das RowCount z.B. nur auf 10 steht,
    dann löscht Du auch nur die Zellen bis Zeile 10. Hattest
    Du aber vorher schon mal das RowCount z.B. auf 30, dann werden
    diese weiteren bereits mal vorhanden 20 Zeilen nicht bearbeitet.

    Den Satz verstehe ich leider nicht:
    Danach wird nun das leere StringGrid mit einem neuen Format angezeigt. 😕

    Gruss Stefan



  • Hallo

    Wenn du i und j beim []-Operator vertauscht, funktioniert es.

    for (int i = 0; i < grid->RowCount; i++)
      for (int j = 0; j < grid->ColCount; j++)
       grid->Cells[j][i] = "";
    

    Die Zeilen danach haben mit dem Leeren nichts mehr zu tun.
    Ich werde auch gleich mal den FAQ-Eintrag überprüfen.

    bis bald
    akari



  • akari schrieb:

    Wenn du i und j beim []-Operator vertauscht, funktioniert es.

    Ist das nun wesentlich anders als in meinem Posting?

    😉 Ich meine mal nur...



  • Hallo

    @ kpeter : Ich habe deinen Post wohl nur überflogen, tut mir leid.

    bis bald
    akari



  • Hallo Stefan7124, kpeter, akari,

    vielen Dank für eure Antworten. Ich habe einfach die Variablen getauscht und es funktioniert. Das die Lösung so einfach ist, habe ich nicht gedacht, aber ich bin ja ehrlich und habe einfach die FAQ kopiert und habe einfach mal vertraut, dass diese fehlerfrei ist...tja ist vielleicht doch ganz gut, wenn man sie mal wieder ausprobiert 😉

    bis dann
    lg, freakC++


Anmelden zum Antworten