Gibt es eine Möglichkeit herauszufinden, welche Zeile in einem TDBGrid aktuell ist?Ermitteln der aktuellen Zeile in Delphi TDBGrid
Antwort
Ich bin nicht sicher, ob ich Ihre Frage verstehe, aber ich werde eine Antwort versuchen und vielleicht können Sie klären, ob das nicht das ist, was Sie fragen.
Da ein TDBGrid an eine DataSource gebunden ist, entspricht die aktuelle Zeile der aktuellen Zeile in der Datenquelle. Sie können die DataSource abfragen, indem Sie entweder einen Primärschlüsselwert oder die RecNo-Eigenschaft betrachten, um festzustellen, welcher Datensatz der aktuelle ist.
Wenn Sie nicht auf die Datenquelle angewiesen sein möchten, um eine Datensatzanzahl und einen aktuellen Datensatz bereitzustellen (z. B. weil Sie einen unidirektionalen Cursor auf einem Remote-Server verwenden), dann greifen Sie auf die Eigenschaften des Die zugrundeliegende Gitterkontrolle kann verwendet werden.
Eine ähnliche StackOverflow-Frage finden Sie unter this answer.
Sie haben angefangen, das Richtige zu sagen, aber der Link, den Sie angegeben haben, zeigt nur, wie Sie den Datensatz erhalten, aber die wichtigsten (RecNo oder Row oder CurrentRow, etc.) können nicht direkt aus dem Grid erhalten werden. Sorry –
@Carlos: Was hält Sie davon ab, zu schreiben? Zeile: = TDummyGrid (MyDBGrid) .Row' anstelle von 'RowCount: = TDummyGrid (MyDBGrid) .RowCount'? Ein kleines bisschen Denken ist erforderlich, weißt du ... – mghie
Nun ... Ich möchte alternative Farben auf meinem Gitter zeigen, aber die ROW-Eigenschaft ist nicht "persistent" zwischen den Cursor ändert, dh, wenn Sie den Cursor bewegen Wenn Sie die Auswahl ändern, ändert sich die ROW-Eigenschaft für ALLE sichtbaren Zeilen gleichzeitig. Ich brauche eine Möglichkeit, jede Linie einzeln und unabhängig von der aktuell ausgewählten Reihe zu identifizieren. Jetzt verwende ich die RecNo des verknüpften Datasets, aber in unidirektionalen Datasets ist diese Eigenschaft nutzlos. Wie Sie sehen können, ist ein kleines Stück Denken erforderlich, aber Sie waren die Faulen. Sorry ... –
Sie können es wie folgt tun:
1 - eine lokale Klasse definieren, das eine Kopie von TDBGrid ist (dies wird Ihnen private Methoden zugreifen):
type
THackDBGrid = class(TDBGrid);
2 - Dann können Sie werfen Ihre Klasse lokal definiert und von privaten Methoden ziehen, wie in:
function TfrmMain.GetFieldValue(colnum : integer): string;
begin
Result := THackDBGrid(grdMain).GetFieldValue(colnum);
end;
Oder die Reihe zu bekommen #:
function CurrentRowNumber: integer;
Result := THackDBGrid(grdMain).Row;
end;
Diese Technik ist auch in anderen Situationen nützlich, aber ich kann keinen Kredit beanspruchen. I got it from here.
Ich denke, Sie müssen eine Frage zur Klärung Ihrer Frage, meinst du die Zeile in der Abfrage oder die Zeile in der DBGrid? –