2017-05-09 4 views
0

Ich verliere zuvor ausgewählte Lookupdata nach dem Filtern eines Datasets, das mit der Spalte in CxGrid vom Typ DBlookupcombox verbunden ist. finden Sie unten die Details.Löschen zuvor ausgewählter Daten nach Filtern eines Datasets in CxGrid

Wir haben eine cxGrid mit Säulen

ID | Name | Place 
1 | abc | Place1 
2 | xyz | Place5 
3 | lmn | 
4 | opq | 
5 | rst | 


and another table Client 
ClientID | Name 
1  | abc 
2  | xyz 
3  | lmn 
4  | opq 
5  | rst 

In database, there is a table PlaceMapping 
PlaceMappingID| ClientID | Place 
    1   | 1  | Place1 
    2   | 1  | Place2 
    3   | 2  | Place1 
    4   | 2  | Place5 
    5   | 2  | Place6 

Basierend auf der ID wir den „Place“ von Tisch PlaceMapping sind holen, die vom Typ DBLookupComboBox ist (unter Eigenschaften von cxgrid haben wir diese Option).

Wir haben den Filter für das Ereignis "GetPropertiesForEdit" der CxGrid-Spalte Place hinzugefügt. Die Place-Lookup-Combobox erhält die korrekten Werte , die angezeigt werden sollen, nachdem der Benutzer ein Element auswählt und den Fokus von dem ausgewählten Element ändert. Es geht leer.

Ich hatte versucht, den Filter für Place-Spalte entfernen, die gut funktioniert, aber es bekommt alle Werte von Orten.

Beispiel: Für die ID "1" erhalten wir eine Lookup-Combobox mit den Werten Place1 und Place2.

Für ID "2" erhalten wir Nachschlagen mit Werten Place1, Place5, Place6.

Jede Hilfe wirklich geschätzt.

+1

"nachdem der Benutzer ein Element auswählt und den Fokus vom ausgewählten Element ändert" Was ist der Status (TDataSetState) des cxGrid-Datasets, wenn diese Fokusänderung auftritt? Wie auch immer, ich denke, dass q ein MCVE benötigt (siehe StackOverflow/Help/mcve). – MartynA

+0

@MartynA Der Datensatz befindet sich im Durchsuchen-Modus. – mano

Antwort

1

Got zwei Möglichkeiten für mich arbeiten:

Way 1: Erstellen Sie zwei Lookup-Tabellen. Die erste Tabelle ist an den Spalteneditor gebunden. Es muss alle Zeilen enthalten, um die Suchwerte in allen View-Datensätzen korrekt anzuzeigen. Die zweite Tabelle sollte nach dem Öffnen dem In-Place-Editor zugewiesen werden. Diese Tabelle wird gefiltert, um ein begrenztes Re-Cord-Set zu enthalten, das für das aktuelle Feld/den Datensatz passend ist.

Anstelle einer gefilterten Tabelle können Sie eine Abfrage verwenden, die die WHERE-Klausel mit den entsprechenden Parametern enthält.

Weg 2: Anstatt zusätzliche Datensätze zu erstellen, können Sie das Drop-Down-Lookup Grid direkt filtern. Dieses Grid enthält einen eigenen Data Controller und Sie können alle seine Eigenschaften und Methoden ähnlich wie bei einer Grid-Ansicht verwenden.

Gemeinsamer Teil: Das Table View-Objekt verfügt über das OnInitEdit-Ereignis, mit dem Sie den In-Place-Editor einrichten können, bevor er angezeigt wird. Sie sollten dieses Ereignis verwenden, um Kombinationsfeldelemente zu füllen, Suchlisten zu filtern und andere Editoreigenschaften zu ändern. Die Verwendung der OnPopup- oder OnInitPopup-Ereignisse des Editors ist in dieser Situation aus zwei Gründen jedoch nicht sinnvoll: a) Der Editor benötigt korrekte Suchdaten, um einen Bearbeitungsfeldwert anzuzeigen. b) Ein Benutzer kann den Bearbeitungswert ändern, ohne die Dropdown-Liste zu öffnen, indem er beispielsweise eine Spaltenzelle eingibt.

Innerhalb des OnInitEdit-Ereignishandlers wir: 1) überprüfen, ob die Spalte diejenige ist, deren Editor wir ändern müssen; 2) Bilden eines Filters für die Hilfs-Nachschlagetabelle unter Verwendung eines Wertes des aktuellen View-Datensatzes; 3) Möglichkeit 1: Ersetze die Listenquelle des Editors durch die Datenquelle, die an die gefilterte (Hilfs-) Nachschlagetabelle bindet; Weg 2: Legen Sie den Filter des Data Controller nachschlagen fest.

+0

Ich bin froh, dass du es geschafft hast, das selbst auszuarbeiten, +1 für das Posten deiner Antwort, um zukünftigen Lesern zu helfen. Wenn ich dieses q gefragt hätte, hätte ich Code eingefügt, der a) die verwendeten Datensätze erstellt und auffüllt und b) das TcxGrid konfiguriert, um das zu tun, was ich versuche zu tun. Der Grund dafür ist, dass Leser nur dann in der Lage sind zu helfen, wenn sie das Problem reproduzieren können. Ohne Setup-Code wäre es viel zu rätselhaft, ein Testprojekt aufzubauen, insbesondere mit dem TcxGrid, da es eine große Vielfalt an Konfigurationsoptionen, Betriebsmodi und In-Place-Editoren bietet. – MartynA

+0

@MartynA Ja, notiert – mano

Verwandte Themen