2016-05-09 2 views
0

シンプルになると思ったことを解決するために少し時間を無駄にしました。columns.picklist内で選択されたものは?

私は複数のテーブル(MySQL)を持つデータベースを持っています。 「コンポーネント」を含む1つのテーブルと「製品」を含む別のテーブル。製品は、たとえばコンポーネントを使用して構築されます。製品ABCは、3本のネジ、4本のボルト、1キロの新鮮な空気などで構成されています。これまでのところ私は理解していますか?

コンポーネントはDBGridに表示されます。ユーザーが間違いを犯して別の「コンポーネント」を「製品」に追加したい場合は、そのコンポーネントを選択するための(別の表の)すべてのコンポーネントをリストした選択リストが表示されます。

ここに私の問題があります!何かが列[i] .picklist(これはDBGridの一部です)から選択されたとき、どのように選択されたのかを知ります。私は事件が起こると思ったが、そうではないようだ。

次のフィールドの適切な説明を取得できるように、どのアイテムが選択されたかを知る必要があります。

3つのフィールドがあり、COMPONENT、DESCRIPTION、QUANTITYです。 COMPONENTとQUANTITYだけがユーザーによって編集可能です。

私はここでいくつかの意味を作りたいと思っています。

ここでは私が今使っているコードです(それはあたかも乱雑です)。

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; 

答えて

-1

これは私がピックリストから項目を選択したときにイベントがトリガされた探していたものと思いますDBGridの

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

の選択された行のデータが表示されます。何が選択されたかを判断するために使用できるOnPicklistClickのようなもの。データベースの次のフィールドは説明であり、ピックリストから選択されたものに基づいて変更されます。私の質問に答える時間をとってくれてありがとう。 –

関連する問題