AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi DevExpress: Nach SQL Insert den neuen Datensatz fokussieren
Thema durchsuchen
Ansicht
Themen-Optionen

DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

Ein Thema von haentschman · begonnen am 29. Apr 2022 · letzter Beitrag vom 3. Mai 2022
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 29. Apr 2022, 10:44
Hallöle...

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... 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? Gibt es eine bessere Methode?

Danke...
  Mit Zitat antworten Zitat
tamasker

Registriert seit: 16. Mai 2017
3 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 29. Apr 2022, 13:14
Hi

Ist der Grid evt. sortiert? Wenn ja, funktioniert es korrekt wenn du die Sortierung mal rausnimmst?

Liebe Grüsse
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 29. Apr 2022, 15:18
Hast Du Dir mal die Property TopRowIndex angeschaut? Den Wert solltest Du vor dem Schließen merken und nach dem Öffnen wieder setzen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#4

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 30. Apr 2022, 22:46
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 2. Mai 2022, 07:36
Moin...

Sorry für die späte Rückmeldung. Ich hatte mal ein Wochenende ohne Arbeit...dafür den Garten...was auch Arbeit entspricht.

Zum Thema:
Danke für die Rückmeldungen.

Zitat:
Ist der Grid evt. sortiert? Wenn ja, funktioniert es korrekt wenn du die Sortierung mal rausnimmst?
Grid ist sortiert. Wenn die Sortierung auf der Nummer steht, die Nummer dann eingefügt wird, steht der Datensatz als Erstes und wird damit fokusiert. Ist die Sortierung anders, ist zwar der Datensatz selektiert aber nicht fokusiert.
Zitat:
Hast Du Dir mal die Property TopRowIndex angeschaut?
Wenn ich richtig gelesen habe, ist der dafür da, den fokusierten Datensatz in den sichtbaren Bereich zu rücken. Oder?
Zitat:
Setzt er Die hier den Focus schonmal in die richtige Zeile?
Nein...

Ergebnis:
Ich habe mit den Vorschlägen herumgespielt...
Delphi-Quellcode:
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;
Die ersten Tests waren erfolgreich und werden beobachtet... Der neue Datensatz wird eingefügt und fokusiert...

DevExpress = learning by doing

Danke...

Geändert von haentschman ( 2. Mai 2022 um 07:40 Uhr)
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#6

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 2. Mai 2022, 21:37
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;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#7

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 3. Mai 2022, 06:26
Moin...
Zitat:
Das der RecordIndex hier dem RowIndex entspricht muss nicht immer so sein.
...das werde ich nie begreifen. Den Unterschied Row,Record usw...

Die Änderung habe ich übernommen...
Miniaturansicht angehängter Grafiken
vor.png   nach.png  
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#8

AW: DevExpress: Nach SQL Insert den neuen Datensatz fokussieren

  Alt 3. Mai 2022, 14:17
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz