2016-11-21 8 views
1

からグリッドにデータを挿入するには、私が提出された3でレコードを持っている:どのように記録

type 
    TItem = record 

    Item : String; 
    Quantity: SmallInt; 
    Price : Currency; 
end; 

また、私はレコードに値を設定するための手順があります。

function TForm1.SetItem(item:string;quan:SmallInt;price:Currency):TItem; 
    var It :TItem; 
    begin 
      It.Item :=item; 
      It.Quantity:= quan; 
      It.Price:=price; 
     Result :=It; 
    end; 

さて、私は挿入するための手順を必要としますレコードTアイテムTStringGridまたはTGridと私はそれを行う方法がわかりません。 私もTStringGridに3つの列があります。

1. col_Item  :string; 
2. col_Quantity :SmallInt; 
3. col_Price :Currency; 

たびに私はレコードから提出されたこの3つの列3に挿入する必要がある手順にSetItem関数を呼び出すとき:

結果は次のようにする必要があります:

ITEM  | Quantity | Price 

Bread   1   1,5 
Coca cola  1   3 
Fanta   2   3 

などである。

+2

プロシージャSetItem()は役に立ちません。これは、TItem型のレコードを作成し、値で塗りつぶし、戻さずにスローします。 – GuidoG

+0

@GuidoG更新に関する質問があります。間違いです。私が必要としていることが明らかであることを助けてくれますか? – Dejan

+0

Firemonkeyアプリケーション? –

答えて

1

最初にグリッド(TGrid)はデータを保存しないため、f.exのようなデータストレージを提供する必要があります。 TDataArr = array of TItem;。グリッドは、セルに表示するデータを必要とするとき、それはOnGetValue()イベントを呼び出します。

procedure TForm4.Grid1GetValue(Sender: TObject; const Col, Row: Integer; 
    var Value: TValue); 
begin 
    if Row > (Length(DataArr)-1) then exit; 
    case Col of 
    0: Value := DataArr[Row].Item; 
    1: Value := DataArr[Row].Quantity; 
    2: Value := DataArr[Row].Price; 
    end; 
end; 

グリッドでDISPLY文字列への暗黙的な変換があります。

あなたは、グリッド内のデータを編集すると、変更がOnSetValueイベントをトリガー:

procedure TForm4.Grid1SetValue(Sender: TObject; const Col, Row: Integer; 
    const Value: TValue); 
begin 
    if Row > (Length(DataArr)-1) then exit; 
    case Col of 
    0: DataArr[Row].Item := Value.AsString; 
    1: DataArr[Row].Quantity := StrToInt(Value.AsString); 
    2: DataArr[Row].Price := StrToCurr(Value.AsString); 
    end; 
end; 

のでStrToInt(Value.AsString)StrToCurr(Value.AsString)、他の方法で暗黙的な変換があるように思えません。

+0

ありがとうございました.................. – Dejan

+0

大歓迎です! –

関連する問題