一切都可以在StringGrid1的OnSetEditText事件中写代码,procedure TForm1.FormCreate(Sender: TObject);begin with StringGrid1 do begin Cells[1,0]:= '品名'; Cells[2,0]:= '单价'; Cells[3,0]:= '数量'; Cells[4,0]:= '金额'; end;end;procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);var s, s1, s2: string; vTotal, v, v1, v2: double; i: integer;begin with StringGrid1 do begin //1.当修改数量或单价时,金额动态跟着改变(金额=单价*数量)? if ACol in [2,3] then //(金额=单价*数量)? begin s1:= Cells[2,ARow]; //单价 s2:= Cells[3,ARow]; //数量 if TryStrToFloat(s1, v1) and TryStrToFloat(s2, v2) then Cells[4,ARow]:= FloatToStr(v1*v2) else Cells[4,ARow]:= ''; end; //2.在金额显示后,动态显示总金额在Edit1.text中。 vTotal:= 0; for i:= 1 to RowCount-1 do begin s:= Cells[4,i]; if TryStrToFloat(s, v) then vTotal:= vTotal + v; end; Edit1.Text:= FloatToStr(vTotal); //如何在敲录入键时,将StringGrid中的品名 单价 数量 金额四列四行数据录入到数据库并打印小票? //弄个按纽自已打印吧,别敲一下就打一个,非把你打印机累死不可 end;end;