AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TAdvStrinGrid mit ComboBox mehrere Spalten füllen

TAdvStrinGrid mit ComboBox mehrere Spalten füllen

Ein Thema von norwegen60 · begonnen am 21. Mär 2020 · letzter Beitrag vom 22. Mär 2020
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#1

TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 21. Mär 2020, 09:47
Hallo zusammen,

ich verwende in Delphi XE eine TADVStringrid und möchte nun in dieser folgendes realisieren
  • Spalte 2 und 3 (können auch mehr sein) enthalten Werte, die nicht einzeln editiert werden können. Diese Werte sollen alle über eine ComboBox-Liste ausgewählt werden
  • d.h. egal ob ich Spalte 2 oder 3 anklicke, geht immer unter Spalte 2 eine zweispaltige ComboBox auf
  • Sobald ich einen Eintrag ausgewählt habe, wird der Wert aus Combo-Spalte 1 in Spalte 2 geschrieben und der Wert aus CB 2 in Grid 3
Hat jemand eine Idee, wie sich das mit Bordmitteln der ADV realisieren lässt.
Der Einstiegscode ist
Delphi-Quellcode:
procedure TForm4.bt3Click(Sender: TObject);
var
  dc: TDropDownColumn;
  di: TDropDownItem;
begin
  dc := sg2.GridDropDown.Columns.Add;
  dc.ColumnType := ctText;
  dc := sg2.GridDropDown.Columns.Add;
  dc.ColumnType := ctText;

  di := sg2.GridDropDown.Items.Add;
  di.Text.Add('Text 1');
  di.Text.Add('Add zu Text1');

  di := sg2.GridDropDown.Items.Add;
  di.Text.Add('Text 2');
  di.Text.Add('Add zu Text2');

  di := sg2.GridDropDown.Items.Add;
  di.Text.Add('Text 3');
  di.Text.Add('Add zu Text3');

  sg2.GridDropDown.LookupColumn := 1; // Damit fehlt aber der Text in Splate 3
end;


procedure TForm4.sg2GetEditorType(Sender: TObject; ACol, ARow: Integer; var AEditor: TEditorType);
begin
  if ACol in [2, 3] then
    AEditor := edGridDropDown; // Hier sollte Code hin, der vorgiebt, dass Spalte 2 angewählt
end;
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.447 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 21. Mär 2020, 14:26
Vielleicht so, wie in der Hilfe beschrieben? Oder verstehe ich da was falsch?

Delphi-Quellcode:
procedure TForm15.gridGetEditorProp(Sender: TObject; ACol, ARow: Integer;
  AEditLink: TEditLink);
begin
  case ACol of
    1:begin
        grid.ClearComboString;
        grid.AddComboString('Berlin');
        grid.AddComboString('Paris');
        grid.AddComboString('London');
        grid.AddComboString('New York');
      end;
    2:begin
        grid.ClearComboString;
        grid.AddComboString('Germany');
        grid.AddComboString('France');
        grid.AddComboString('United Kingdom');
        grid.AddComboString('United States');
      end;
   end;
end;

procedure TForm15.gridGetEditorType(Sender: TObject; ACol, ARow: Integer;
  var AEditor: TEditorType);
begin
  case ACol of
  1: AEditor := edComboList;
  2: AEditor := edComboList;
  end;
end;
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (21. Mär 2020 um 14:31 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 21. Mär 2020, 14:37
Dass es so geht, ist mir schon klar.
Was ich aber will, ist dass die Auswahl auf ein mal stattfindet. In deinem Ansatz wählt er zuerst in Col1 Berlin und kann dann in Col2 France auswählen, was natürlich falsch ist
Meine Frage: Egal ob er in Spalte 1 oder 2 klickt, bekommt er eine ComboGrid
Code:
Berlin  Germany
Paris   France
London  United Kingdom
Und je nach Auswahl werden diese beiden zusammengehörenden Begriffet in Spalte 1 und 2 geschrieben

Und damit das ganze schön aussieht, soll die Combo so stehen, dass die Stadt unter Spalte 1 und das Land unter Spalte 2 steht. Das bedeutet, dass die Combo immer linksbündig zu Spalte 1 stehen soll, was bei Klicke in Spalte 1 automatisch gegeben ist. Bei Klick in Spalte würde die Combo aber linksbündig zu Spalte 2 stehen
Darum zwei Möglichkeiten
  1. Click in Spalte 2 wird so umgebogen, dass er wie Klick in Spalte 1 behandelt wird
  2. oder, Combo lässt sich verschieben
Für beide weiß ich aber nicht wie

Und wenn die Combo verschoben, bzw, der Aufruf in Spalte 1 gelenkt wurde, brauche ich noch die Möglicjkeit, die beiden Werte der Combo auszulesen.
Das geht natürlich mit dem in Spalte 1 geschriebenen Wert => dann durch Liste suchen => den Satz ermitteln.
Aber vielleicht gibt es ja einen eleganteren Ansatz

Geändert von norwegen60 (21. Mär 2020 um 14:44 Uhr)
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
256 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 21. Mär 2020, 18:24
Ich war mal in einer ähnlichen Situation. Leider finde ich das entsprechende Projekt nicht mehr.
Es lief aber alles auf eine Ableitung "Editlink" hinaus. Also einen eigenen Editor.

Vielleicht hilft das weiter.
Schau dir dazu mal die bereits vorhandenen EditLink Komponenten von TMS an.
Chris
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 21. Mär 2020, 22:03
Nachdem ich gesehen hatte, dass es mit edGridDropDown eine einfache Möglichkeit gibt eine Combo mit Spalten zu erstellen, hatte ich eigentlich die Hoffung, dass damit meine Aufgabenstellung auch einfach zu implementieren ist.
Wenn ich da jetzt aber doch was eigenes bauen muss, kann ich auch bei der vorhanden Lösung bleiben. Da wird auf das Grid ein zweites Grid gelegt wird, in dem dann die Auswahlen stehen. Sobald man eine Doppelklickt, wird die ausgewählte Zeile spaltenweise übertragen.

Schade.
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
256 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 22. Mär 2020, 09:17
Ich habe nicht gesagt das es nicht anders geht.
Was mit deinem Beispiel funktioniert ist folgendes.

Delphi-Quellcode:
procedure TFormx.sg2EditChange(Sender: TObject; ACol, ARow: Integer; Value: string);
var
  di: TDropDownItem;
  colIndex: Integer;
begin
  if ACol = 2 then
  begin
    sg2.GridDropDown.LookupColumn := 0;
    colIndex := sg2.GridDropDown.Items.IndexInColumn(0, Value);

    if colIndex > -1 then
    begin
      di := sg2.GridDropDown.Items[colIndex];
      sg2.Cells[3, ARow] := di.Text[1];
    end;
  end
  else if ACol = 3 then
  begin
    sg2.GridDropDown.LookupColumn := 1;
    colIndex := sg2.GridDropDown.Items.IndexInColumn(1, Value);

    if colIndex > -1 then
    begin
      di := sg2.GridDropDown.Items[colIndex];
      sg2.Cells[2, ARow] := di.Text[0];
    end;
  end;
end;
Ist als Showcase. Geht bestimmt elleganter.
Chris
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 22. Mär 2020, 16:20
Super, ein Schritt weiter und etwas mehr Verständnis meinerseits.
Delphi-Quellcode:
sg2.GridDropDown.LookupColumn;
sg2.GridDropDown.Items.IndexInColumn(0, Value);
sg2.GridDropDown.Items[colIndex];
waren mir nicht geläufig.

Giebt es noch einen Tip wie ich die Combo immer linksbündig zu Spalte 2 öffnen kann, bzw. meinen Klick in Spalte 3 in einen Klick in Spalte 2 umleite?

Gerd
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
256 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen

  Alt 22. Mär 2020, 16:47
Mit ein paar Schaltern unter Navigation und/oder MouseActions sollte folgendes gehen

Delphi-Quellcode:
procedure TFormx.sg2SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
  if ACol = 3 then
  begin
    CanSelect := False;
    sg2.EditCell(2, ARow);
  end;
end;
Chris
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 13:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf