2016-05-09 8 views
0

Ich habe ein bisschen Zeit verschwendet, um etwas auszuarbeiten, von dem ich dachte, dass es einfach wäre.Was wurde in einer columns.picklist ausgewählt?

Ich habe eine Datenbank mit mehreren Tabellen (MySQL). Eine Tabelle enthält "Komponenten" und eine andere enthält "Produkte". Produkte werden beispielsweise mit Komponenten erstellt; Produkt ABC könnte aus 3 x Schrauben, 4 x Schrauben, 1 kg Frischluft usw. bestehen! Mache ich bisher Sinn?

Die Komponenten werden in einem DBGrid angezeigt. Wenn der Benutzer einen Fehler macht und eine "Komponente" zu einem "Produkt" hinzufügen möchte, erscheint eine Auswahlliste mit allen Komponenten (aus einer anderen Tabelle), aus denen sie auswählen können.

Jetzt ist hier mein Problem! Wenn etwas aus der Spalte [i] .picklist ausgewählt ist (dies ist Teil eines DBGrid), weiß ich, was ausgewählt wurde. Ich dachte, es würde ein Ereignis ausgelöst werden, aber es scheint nicht zu sein.

Ich muss wissen, welches Element ausgewählt wurde, damit ich eine passende Beschreibung für das nächste Feld abrufen kann.

Es gibt 3 Felder, sie sind KOMPONENTE, BESCHREIBUNG, MENGE. Nur COMPONENT und QUANTITY können vom Benutzer bearbeitet werden.

Ich hoffe, ich mache hier einen Sinn.

Hier ist der Code, den ich jetzt verwende (so chaotisch wie es ist);

procedure TForm1.CompletePolesSourceStateChange(Sender: TObject); 
var 
    loop: Integer; 
    Tmp: string; 
begin 

    case CompletePolesSource.state of 
    dsInsert: 
     begin 
     CompVals.Clear; // Is a tstringlist created elsewhere 
     CompVals.Delimiter := '|'; 
     CompVals.QuoteChar := '"'; 

     PoleComponentsGrid.Columns[0].readonly := false; // Is readonly when not in DSInsert 

     PoleComponentsGrid.Columns[0].PickList.Clear; // Clear other crap 

     { 
      Now add Parts to a Name/Value list (CODE/DESCRIPTION) so I can later 
      get the description without looking it up in the other table. 
     } 

     for loop := 1 to componentstable.RecordCount do // Get CODE from other table 
     begin 
      componentstable.RecNo := loop; 
      tmp := componentstable.Fieldbyname('CODE').asstring + '=' + componentstable.Fieldbyname('ITEM').asstring; 
      CompVals.Add(tmp); 
      PoleComponentsGrid.Columns.Items[0].PickList.Add(tmp); 
     end; 

     PoleComponentsGrid.Columns.Items[0].readonly := true; 

     end; 
    end; 
end; 

Antwort

-1

die Daten der ausgewählten Zeilen der DBTabelle

procedure TFrmPrincipal.btnShowSelectedRowsClick(Sender: TObject); 
var 
    i: Integer; 
    aux: string; 
begin 
    for i := 0 to DBGrid1.SelectedRows.Count - 1 do 
    begin 
     ClientDataSet1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i])); 
     aux := aux + IntToStr(ClientDataSet1.RecNo) + ' - ' + 
     ClientDataSet1.FieldByName('CUSTOMER').AsString + #13; 
    end; 
    ShowMessage(‘Selected Rows: ‘ + #13 + aux); 
end; 
+0

zeigt Dies Ich denke, was ich suchte ein Ereignis ausgelöst wird, wurde, wenn ein Element aus der Auswahlliste ausgewählt ist. Etwas wie OnPicklistClick, mit dem ich bestimmen konnte, was ausgewählt wurde. Das nächste Feld in der Datenbank ist eine Beschreibung und ändert sich basierend auf dem, was in der Auswahlliste ausgewählt ist. Danke, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten. –