Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi QuantumGrid Multiselect (https://www.delphipraxis.net/171977-quantumgrid-multiselect.html)

Morphie 5. Dez 2012 10:42

QuantumGrid Multiselect
 
Weiß jemand, wie man beim DevExpress QuantumGrid im Multiselect-Mode an die "selektierten Records" im DataSet kommt?
GridMode ist bei mir false.

Geht das irgendwie?

uligerhardt 5. Dez 2012 11:01

AW: QuantumGrid Multiselect
 
Zitat:

Zitat von Morphie (Beitrag 1194399)
Weiß jemand, wie man beim DevExpress QuantumGrid im Multiselect-Mode an die "selektierten Records" im DataSet kommt?
GridMode ist bei mir false.

In meinem nicht DB-gebundenen Grid benutze ich
Delphi-Quellcode:
TableView.Controller.SelectedRowCount
und
Delphi-Quellcode:
TableView.Controller.SelectedRows
. Ob sich das mit DataSets verträgt, weiß ich nicht.

Morphie 5. Dez 2012 11:03

AW: QuantumGrid Multiselect
 
Ja, das kenne ich... Da kann ich dann ja auf die einzelnen Rows zugreifen.
Ich möchte aber auf das dahinterliegende DataSet zugreifen.

Anscheinend geht das irgendwie mit Bookmarks, aber wie genau, weiß ich leider nicht.

Union 5. Dez 2012 12:45

AW: QuantumGrid Multiselect
 
Du solltest im Grid ein evtl. auf invisible gesetztes PK-Feld mitführen (ohne das funktioniert ja der non-Gridmode sowieso nicht). Wenn Du das hast, kannst Du ja auch auf das Dataset zugreifen und den entsprechenden Satz finden.

Morphie 5. Dez 2012 12:52

AW: QuantumGrid Multiselect
 
Danke, so hab ich es nun auch gemacht.

dataspider 5. Dez 2012 12:55

AW: QuantumGrid Multiselect
 
Hi,

wie Union schon sagt, du musst auf jeden Fall KeyFields den / die Feldname(n) des PK zuweisen.

Hier mal ein Beispiel, wie ich die PK - Werte hole:

Delphi-Quellcode:
procedure AssignSelectedKeyValues(AView: TcxGridDBTableView; AValues:
    TIntegerList);
Var
  I : Integer;
  RecordId: Variant;
  DataController: TcxGridDBDataController;
  Controller: TcxGridTableController;
  AKeyFields: TList;
begin
  DataController := AView.DataController;
  Controller    := AView.Controller;
  AKeyFields := TList.Create;
  try
    DataController.GetKeyDBFields(AKeyFields);
    if AKeyFields.Count = 1 then
    begin
      if Controller.SelectedRowCount = 0 then
      begin
        RecordId := DataController.GetRecordId(Controller.FocusedRecordIndex);
        if not VarIsNull(RecordId) then
          AValues.Add(RecordId);
      end
      else
      begin
        for i := 0 to Controller.SelectedRecordCount - 1 do
        begin
          RecordId := DataController.GetRecordId(Controller.SelectedRecords[i].RecordIndex);
          if not VarIsNull(RecordId) then
            AValues.Add(RecordId);
        end;
      end;
    end;
  finally
    AKeyFields.Free;
  end;
end;
Du kannst also über den RecordIndex die RecordId (PK) ermitteln.

Frank

DSCHUCH 5. Dez 2012 16:04

AW: QuantumGrid Multiselect
 
Du kannst direkt auf den RecordIndex/RecNo des DataSet zugreifen.

Folgende Codeschnipsel dazu:

Code:
var
    ARowIndex: Integer;
    ARowInfo: TcxRowInfo;
begin

with gridview ...

 ARowIndex := DataController.GetSelectedRowIndex(SelNoIten);
 ARowInfo := DataController.GetRowInfo(ARowIndex);
 Result   := DataController.Values[ARowInfo.RecordIndex, GetColumnByFieldName(FieldN).Index];

dataspider 5. Dez 2012 16:22

AW: QuantumGrid Multiselect
 
Zitat:

Zitat von DSCHUCH (Beitrag 1194471)
Du kannst direkt auf den RecordIndex/RecNo des DataSet zugreifen.

...was erfordert, dass die KeyFields auch als Spalte in der Grid vorhanden sind.
Das ist bei mir z.B. nie der Fall, da als Beispiel PK' s und FK' s den Benutzer nicht interessieren.

Frank

DSCHUCH 5. Dez 2012 16:40

AW: QuantumGrid Multiselect
 
nein, erfordert es nicht. ;) Daher der code wie von mir gepostet, das geht über den RowIndex. Das KeyField (im Unterschied zu QG3 eigentlich meist nicht mehr notwendig) benötigt man zum Zugriff auf den RecNo nicht.

dataspider 6. Dez 2012 10:04

AW: QuantumGrid Multiselect
 
Ach ja, irgendwann hatte ich das forEachRow entdeckt und finde es ganz nett.
Vielleicht nützt es ja jemandem...
Delphi-Quellcode:
...
View.DataController.ForEachRow(True, doForEachRow);
...
procedure TFRMMain.doForEachRow(ARowIndex: Integer; ARowInfo: TcxRowInfo);
var
  AKeyFieldValue: Variant;
begin
  if ARowInfo.Level = View.DataController.Groups.GroupingItemCount then
  begin
    AKeyFieldValue := View.DataController.GetRecordId(ARowInfo.RecordIndex);
    MessageDlg(IntToStr(AKeyFieldValue), mtInformation, [mbOK], 0);
  end;
end;
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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