StringGrid-Eintrag



  • Ich habe einen StringGrid und kann in einer Zeile Daten selbst eingeben, wie kann ich mir merken, an welcher Stelle ich was eingegeben habe? Weil wenn ich danach etwas an dem Grid verändere würde das ja dann nicht mehr an derselben Stelle stehen, also muss ich mir ja merken was (z.Bsp. welche Zahl) stand in welcher Spalte! Kann mir jemand helfen?



  • Hier mal ein Beispiel:

    struct CObjectItem  :TObject
    {
     int Row;
     int Col;
     bool Changed;
      CObjectItem(int ARow, int ACol,bool AChanged)
      :Row(ARow),Col(ACol),Changed(AChanged) { }
    
    } ;
    //---------------------------------------------------------------------------
    void __fastcall TForm1::StringGrid1SetEditText(TObject *Sender, int ACol,
          int ARow, const AnsiString Value)
    {
    TStringGrid* Grid= dynamic_cast<TStringGrid*>(Sender);
    if(Grid)
     {
         CObjectItem* Item=reinterpret_cast<CObjectItem*>(Grid->Objects[ARow][ACol])  ;
         if(Item)
         {
         Item->Changed=true;
         }
         else
             Grid->Objects[ARow][ACol]=dynamic_cast<TObject*>(new CObjectItem(ARow,ACol,true));
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    for (int row=0;row<StringGrid1->RowCount  ;row++)
    {
    for (int col=0;col<StringGrid1->ColCount  ;col++)
    {
           CObjectItem* Item=reinterpret_cast<CObjectItem*>(StringGrid1->Objects[row][col])  ;
         if(Item && Item->Changed)
         {
           ShowMessage("Eintrag wurde geändert: Row-"+ IntToStr(row)+" Col-"+ IntToStr(col))  ;
         }
    }
    }
    }
    //---------------------------------------------------------------------------
    


  • Hallo,

    Sonnenschein84 schrieb:

    Weil wenn ich danach etwas an dem Grid verändere würde das ja dann nicht mehr an derselben Stelle stehen, also muss ich mir ja merken was (z.Bsp. welche Zahl) stand in welcher Spalte!

    Sorry, aber ich komme nicht klar was du meinst.
    Was veränderst du den am Grid damit es an einer anderen Stelle ist?



  • ich habe einen Kalender in dem StringGrid und ich gebe an verschiedenen Tagen eine Stundenzahl ein, aber ich gebe auch eine gesamtstundenzahl ein und die restlichen stunden werden ja dann noch per Zufall verteilt! Nun darf es aber nicht passieren, dass ich eine selbst eingegebene Stundenzahl damit überschreibe. Deswegen würde ich mir gern irgendwie merken, wo ich was geschrieben habe!



  • Lege doch einfach ein 2. StringGrid an wo du eine Kopie reinlegst (Also unsichtbar)



  • Natürlich wäre es ziemlicher Unsinn, ein unsichtbares StringGrid anzulegen.
    Korrekt ist aber der Ansatz, im Hintergrund eine Struktur vorzuhalten, in der die eigentlichen Daten verwaltet und gespeichert werden. In dieser Struktur könnte dann z.B. für jedes "Feld" noch ein bool-Wert abgelegt werden, der anzeigt, ob der Wert des zugehöigen Feldes vom User geändert wurde.

    Das (eine) StringGrid sollte lediglich als Aus- und Eingabeobjekt zur Interaktion mit dem User dienen, nicht als Datenablage.

    Sonnenschein84:
    'Ich' wird üblicherweise nur dann verwendet, wenn du dich als Programmierer meinst. Sobald du Aktionen des Benutzers beschreibst solltest du diesen auch so nennen, auch wenn das Programm nur für dich selbst gedacht ist.
    In diesem Sinne ist deine Problembeschreibung hier nämlich recht uneindeutig.



  • Jansen schrieb:

    Natürlich wäre es ziemlicher Unsinn, ein unsichtbares StringGrid anzulegen.
    Korrekt ist aber der Ansatz, im Hintergrund eine Struktur vorzuhalten, in der die eigentlichen Daten verwaltet und gespeichert werden.

    ...auch bekannt als Document/View oder als etwas ausgeprägtere Variante MVC-System... (o;

    -junix


Anmelden zum Antworten