![]() |
DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Hallöle...8-)
Ich bräuchte mal eure Hilfe: SOLL: Ich möchte per SQL einen Datensatz einfügen. Nach dem Insert soll das Grid aktualisiert werden und die neue "ID" fokussiert werden. Highlight wäre dann.. der Datensatz fokussiert in den sichtbaren Bereich. (ggf. Filter ausblenden) Alle Varianten, die ich probiert habe, funktionieren nicht...:cry: Der Focus, incl. Selection, steht entweder auf dem Ersten Datensatz oder irgendwo...:? Beispiel:
Delphi-Quellcode:
procedure TfoBlubb.btnCopyClick(Sender: TObject);
var NewID: Integer; begin NewID := FLogic.Copy(Query.FieldByName('ID').AsInteger); gtvBlubb.DataController.RefreshExternalData; TToolsDevExpress.SelectRecord(gtvAssignment, 'ID', NewID); pgcContent.ActivePage := tsLayout; end; . . . class function TToolsDevExpress.SelectRecord(View: TcxGridTableView; FieldNameID: string; CurrentID: Integer): Boolean; var I: Integer; ColumnIndex: Integer; begin Result := False; ColumnIndex := TcxGridDBDataController(View.DataController).GetItemByFieldName(FieldNameID).Index; View.DataController.ClearSelection; for I := 0 to View.DataController.RecordCount - 1 do begin if View.DataController.Values[I, ColumnIndex] = CurrentID then begin View.DataController.SelectRows(I, I); View.DataController.FocusedRowIndex := I; Result := True; if Result then begin Break; end; end; end; end; Was mache ich falsch? :roll: Gibt es eine bessere Methode? Danke... |
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Hi
Ist der Grid evt. sortiert? Wenn ja, funktioniert es korrekt wenn du die Sortierung mal rausnimmst? Liebe Grüsse |
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Hast Du Dir mal die Property TopRowIndex angeschaut? Den Wert solltest Du vor dem Schließen merken und nach dem Öffnen wieder setzen.
|
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Hey,
versuch mal das hier: View.Controller.FocusRecord(i, false); View.Controller.FocusedColumn := "Name der Tabellenspalte"; Setzt er Die hier den Focus schonmal in die richtige Zeile? for I := 0 to View.DataController.RecordCount - 1 do ... geht nämlich über die Records in der Tabelle. for i := 0 to View.DataController.RowCount - 1 do... nimmt die Zeile. Deshalb wird bei View.DataController.FocusedRowIndex := I für i wenn Du über die Records iterierst der Recordindex genommen und nicht der Rowindex. LG Mirko |
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Moin...:P
Sorry für die späte Rückmeldung. :wink: Ich hatte mal ein Wochenende ohne Arbeit...dafür den Garten...was auch Arbeit entspricht. :stupid: Zum Thema: Danke für die Rückmeldungen. Zitat:
Zitat:
Zitat:
Ergebnis: Ich habe mit den Vorschlägen herumgespielt...:wink:
Delphi-Quellcode:
Die ersten Tests waren erfolgreich und werden beobachtet... Der neue Datensatz wird eingefügt und fokusiert... :thumb:
class function TToolsDevExpress.SelectRecord(View: TcxGridTableView; FieldNameID: string; CurrentID: Integer): Boolean;
var I: Integer; ColumnIndex: Integer; begin Result := False; ColumnIndex := TcxGridDBDataController(View.DataController).GetItemByFieldName(FieldNameID).Index; View.DataController.ClearSelection; for I := 0 to View.DataController.RowCount - 1 do begin if View.DataController.Values[I, ColumnIndex] = CurrentID then begin View.DataController.FocusedRecordIndex := I; //FocusedRowIndex geht nicht...immer erster Datensatz :-) View.Controller.FocusedRecord.Selected := True; Result := True; if Result then begin Break; end; end; end; end; DevExpress = learning by doing :stupid: Danke... |
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Das der RecordIndex hier dem RowIndex entspricht muss nicht immer so sein.
Delphi-Quellcode:
class function TToolsDevExpress.SelectRecord(View: TcxGridTableView; FieldNameID: string; CurrentID: Integer): Boolean; var I: Integer; ColumnIndex: Integer; recidx : Integer; begin Result := False; ColumnIndex := TcxGridDBDataController(View.DataController).GetItemByFieldName(FieldNameID).Index; View.DataController.ClearSelection; for I := 0 to View.DataController.RowCount - 1 do begin recidx := View.ViewData.Rows[I].RecordIndex; if View.DataController.Values[recidx, ColumnIndex] = CurrentID then <-- I ist hier der Rowindex, DataController.Values will aber den RecordIndex und das kann hier zu Fehlern führen begin View.DataController.FocusedRecordIndex := recidx; View.Controller.FocusedRecord.Selected := True; Result := True; if Result then begin Break; end; end; end; end; |
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Liste der Anhänge anzeigen (Anzahl: 2)
Moin...8-)
Zitat:
Die Änderung habe ich übernommen...:thumb: |
AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Du kannst Dir das so vorstellen, dass der Rowindex die Reihenfolge der Zeilen von 0 bis x aufsteigend in Deiner Tabelle ist.
Der RecordIndex ist sowas wie die Nummerierung des Datensatzes der eingefügt wurde. Sagen wir Du hast eine Zeile in deiner Tabelle. In diesem Fall ist, wenn nichts gelöscht wurde, der RecordIndex = RowIndex und zwar 0. Wenn Du darüber jetzt eine Zeile einfügst, ist der RowIndex dieser neuen Zeile 0, der RecordIndex aber 1. Mirko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz