Inspiriert durch Joh's beitrag unter: viewtopic.php?f=18&t=15278 habe ich meine Anwendung erweitert und sortiere mein TStringgrid nach einer neu Befüllung wieder gleich.
Dann dachte ich mir, wieso nur neu sortieren, wäre es nicht Cool, wenn der Code auch gleich den Datensatz anwählt, welcher vorher angewählt war (insofern es ihn noch gibt)...
Und nun wird es strange hier erst mal mein (sehr vereinfachter) Code, der das selbe verhalten aufweist:
Code: Alles auswählen
Procedure TForm1.Button1Click(Sender: TObject);
Var
j, i: Integer;
p: String;
Begin
j := StringGrid1.SortColumn;
// Spalte 1 hat nur Primärschlüssel, also reicht es sich diesen Wert zu speichern
p := '';
If StringGrid1.Selection.Top <> -1 Then Begin
p := StringGrid1.Cells[1, StringGrid1.Selection.Top];
End;
StringGrid1.RowCount := 10;
RandSeed := 0;
For i := 0 To 1000 Do Begin
StringGrid1.Cells[random(100) Mod StringGrid1.ColCount, random(100) Mod StringGrid1.RowCount] := inttostr(random(100));
End;
If j <> -1 Then Begin
StringGrid1.SortColRow(true, j);
End;
// Suchen ob der Primärschlüssel im Stringgrid noch vorhanden ist und diesen dann erneut auswählen.
If p <> '' Then Begin
For j := 1 To StringGrid1.RowCount - 1 Do Begin
If StringGrid1.cells[1, j] = p Then Begin
StringGrid1.Selection := rect(0, j, StringGrid1.ColCount - 1, j);
break;
End;
End;
End;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Button1Click(Nil);
End
Dann einmal auf "Path" klicken um das Stringgrid nach der Spalte Path zu sortieren, dann selektiert man mit der Maus die Zeile mit der 44 in Path. Ein Klick auf den Recreate Button löst nun den Fehler aus:
Wie man sehen kann, wird die Zeile mit der 44 korrekt angewählt, aber die 66 als einzelne "Zelle" eben auch, woran liegt das ? es sind auch immer unterschiedliche Zellen.
=> Ich vermute, wie beim letzten mal auch, dass mein Code hier nicht so ist wie die Entwickler der LCL das geplant haben. Doch es gibt keine Routine "SelectRow" oder sowas, ..
Wie würdet ihr das lösen ? Hat jemand eine Variante die im Obigen Szenario funktioniert ?