我有三个记录:
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;
现在,我需要一个将记录TItem 插入 TStringGrid 或 TGrid 的程序,我不知道该怎么做。 我的TStringGrid中还有三列:
1. col_Item :string;
2. col_Quantity :SmallInt;
3. col_Price :Currency;
每当我调用 SetItem 程序时,我需要在记录中填写三个列中的三列:
结果应该是这样的:
ITEM | Quantity | Price
Bread 1 1,5
Coca cola 1 3
Fanta 2 3
..等等。
答案 0 :(得分: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)
。