TValueListEditor->RowCount



  • High,

    der RowCount des TValueListEditor steht schon auf 2, bevor ich auch nur eine Zeile eingefügt habe.
    Damit könnte ich leben, wenn er nicht nach dem Einfügen einer Zeile immer noch auf 2 stünde.

    Weiss jemand warum er das tut, oder noch besser wie ich ihm das abgewöhnen kann ??

    Zur Demonstration: der folgende Code trägt (2mal aufgerufen) in den ersten beiden Zeilen den Schlüssel 2 ein, sofern key unique = false gesetzt ist.

    int iRow;
      AnsiString sInsertKey = IntToStr(ValueListEditor1->RowCount);
    
      // Zeile einfügen
      ValueListEditor1->InsertRow(sInsertKey, "", true);
    
      // gerade eingefügte Zeile suchen und dann die Editorposition aktualisieren
      // beim Klicken steht dann der Cursor an der akt. Position
      // ValueListEditor1->Options: goEditing muss true sein
      if (ValueListEditor1->FindRow(sInsertKey, iRow))
       {
        ValueListEditor1->Row = iRow;
       }
    


  • Mecki schrieb:

    der RowCount des TValueListEditor steht schon auf 2, bevor ich auch nur eine Zeile eingefügt habe.
    Damit könnte ich leben, wenn er nicht nach dem Einfügen einer Zeile immer noch auf 2 stünde.

    [   ][   ] Macht 2 Rows, 1 Column
    
    nach einfügen einer Zeile:
    
    [   ][   ]  
    [   ][   ] Macht 2 Rows, 2 Columns
    

    Entweder bin ich jetzt 😕 oder...



  • @fubar:
    Dann bin ich also nicht der eimnzige mit diesem Gesicht 😕

    Schade, daß den Experten dazu keine Begründung --oder gar Lösung-- einfällt 😉

    Gruß Mecki



  • Beim ersten Aufruf wird keine Zeile eingefügt sondern in die bestehende, bisher leere zweite Zeile ein Wert eingetragen. Deshalb ändert sich die Zeilenzahl erst nach dem zweiten Aufruf. Lass dir zur Kontrolle mal RowCount ausgeben.

    Was die gesuchte Lösung betrifft: was genau ist das Ziel?



  • Ziel ist eine Zeile an den ValueListEditor anzufügen und als Schlüssel eine laufande Nummer einzutragen. Meine Idee war als laufende Nummer die Zeilennummer zu benutzen, was ja auch so weit funktioniert.
    -- Bis auf die erste Zeile--

    Code siehe erster Beitrag



  • Du musst halt irgendwie prüfen, ob du dich in der ersten Zeile befindest bzw. ob diese leer ist. Zum Beispiel:

    ...
      AnsiString sInsertKey = IntToStr(ValueListEditor1->RowCount);
      if (ValueListEditor1->Keys[ValueListEditor1->Row] == "")
        sInsertKey = 1;
      ...
    


  • @Jansen:
    Danke, wenn's nicht anders geht, muss ich das halt so machen.
    Ich dachte bloß, ich hätte vielleicht irgendeinen Parameter im Objektinspektor übersehen, an dem man drehen muß damit's auch ohne explizite Abfrage läuft.



  • Geb dir mal zwei Beispiele:

    int iRow;
    String sInsertKey="1";
    ValueListEditor1->Cells [0][1]=sInsertKey;
    for(iRow=2;iRow<10;iRow++)
    {
       sInsertKey=IntToStr(ValueListEditor1->RowCount);
       ValueListEditor1->InsertRow(sInsertKey,"",true);
    }
    

    oder

    int iRow;
    bool bFirst = true;
    String sInsertKey;
    for(iRow=1;iRow<=10;iRow++)
    {
       sInsertKey=IntToStr(ValueListEditor1->RowCount-bFirst);
       ValueListEditor1->InsertRow(sInsertKey,"",true);
       bFirst=false;
    }
    


  • Mecki schrieb:

    Ich dachte bloß, ich hätte vielleicht irgendeinen Parameter im Objektinspektor übersehen, an dem man drehen muß damit's auch ohne explizite Abfrage läuft.

    Du kannst natürlich auch per Strings im OI einen Startwert vorgeben, dann wird keine Abfrage benötigt. Der springende Punkt ist halt die leere erste Zeile.


Log in to reply