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 TAdvStringGrid und Grouping (https://www.delphipraxis.net/139423-tadvstringgrid-und-grouping.html)

Sherlock 28. Aug 2009 15:25


TAdvStringGrid und Grouping
 
Ich würde gerne im AdVStringGrid Gruppieren und als InPlaceEditor Comboboxen verwenden. Das stellt mich vor folgendes Problem:
ComboBoxen müssen über das OnGetEditorType Ereignis festgelgt werden. Momentan mache ich das in einem kleinen Testprojekt ganz naiv über
Delphi-Quellcode:
procedure TForm1.aGridGetEditorType(Sender: TObject; ACol,
  ARow: Integer; var AEditor: TEditorType);
begin
    if ((ACol = 2) or (ACol = 5) or (ACol = 8)) and ((ARow = 10) or (ARow = 20)) then
    begin
      AEditor := edComboList;
      if aGrid.Combobox.Items.Count = 0 then
      begin
        aGrid.ClearComboString;
        aGrid.Combobox.Items.Assign(MyItemList);
      end;
    end;
end;
Das führt dazu, daß an 6 Stellen im Grid ComboBoxen auftauchen die alle den gleichen Inhalt haben (aus Faulheit so gewollt). Und ich bin zufrieden.
Wenn ich nun aber eine Gruppe reduziere, dann stimmt die Abzählerei ja Zeilenweise nicht mehr. Dann werden die Comboboxen plötzlich in unerwarteten Zellen angezeigt.

Wie kann ich das Problem lösen? Meine Idee ist zur Zeit zu ermitteln, welche Gruppe reduziert wurde und wieviele Zeilen dadurch wo weggefallen sind. Das kommt mir aber echt etwas bekloppt vor. Mir wärs ja lieber, die ausgeblendeten rows wären nur versteckt uund noch im Zählbereich....aber es scheint nicht so zu sein.

Schönes Wochenende,
Sherlock

sx2008 29. Aug 2009 02:12

Re: TAdvStringGrid und Grouping
 
Ohne jetzt AdvStringGrid zu kennen würde ich mal sagen, du müstest den Spaltennamen anstelle der Nummer abfragen:
Delphi-Quellcode:
procedure TForm1.aGridGetEditorType(Sender: TObject; ACol,
  ARow: Integer; var AEditor: TEditorType);
var
  colname:string;
begin
   // wie du genau an den Spaltennamen herankommst liegt bei Dir
   // so könnte es aussehen
   colname := TAdvStringGrid(Sender).Columns[ACol].Caption;
//    if ((ACol = 2) or (ACol = 5) or (ACol = 8)) and ((ARow = 10) or (ARow = 20)) then
   if StrIsOneOf(colname, ['Bruttopreis', 'Nettopreis', 'Artikelnr']) and ((ARow = 10) or (ARow = 20)) then
   begin
StrIsOneOf() ist eine kleine nützliche Funktion aus der JCL um die If-Bedingung zu vereinfachen.

Sherlock 31. Aug 2009 07:18

Re: TAdvStringGrid und Grouping
 
Hehehe, das wär ja was, wenn denn beim Gruppieren die Spalten ausgeblendet werden würden...es werden aber Reihen ausgebelndet. Andererseits bringst Du mich dann auf die Idee nach der Beschriftung der ersten Zelle einer Reihe zu schauen, davon könnte ich es abhängig machen.

Vielen Dank für die Inspiration!

Sherlock


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