シンプルになると思ったことを解決するために少し時間を無駄にしました。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;
の選択された行のデータが表示されます。何が選択されたかを判断するために使用できるOnPicklistClickのようなもの。データベースの次のフィールドは説明であり、ピックリストから選択されたものに基づいて変更されます。私の質問に答える時間をとってくれてありがとう。 –