![]() |
TAdvStrinGrid mit ComboBox mehrere Spalten füllen
Hallo zusammen,
ich verwende in Delphi XE eine TADVStringrid und möchte nun in dieser folgendes realisieren
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; |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
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; |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
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:
Und je nach Auswahl werden diese beiden zusammengehörenden Begriffet in Spalte 1 und 2 geschrieben
Berlin Germany
Paris France London United Kingdom 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
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 |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
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 ![]() Schau dir dazu mal die bereits vorhandenen EditLink Komponenten von TMS an. |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
Nachdem ich gesehen hatte, dass es mit
Delphi-Quellcode:
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.
edGridDropDown
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. |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
Ich habe nicht gesagt das es nicht anders geht.
Was mit deinem Beispiel funktioniert ist folgendes.
Delphi-Quellcode:
Ist als Showcase. Geht bestimmt elleganter.
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; |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
Super, ein Schritt weiter und etwas mehr Verständnis meinerseits.
Delphi-Quellcode:
waren mir nicht geläufig.
sg2.GridDropDown.LookupColumn;
sg2.GridDropDown.Items.IndexInColumn(0, Value); sg2.GridDropDown.Items[colIndex]; 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 |
AW: TAdvStrinGrid mit ComboBox mehrere Spalten füllen
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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