为何修改DATAGRID中数据时,第一次并没有读出需要修改的行信息?
实现当点击修改按钮时,弹出一个FORM并读出选中的DATAGRID中的行信息,但不知为何,第一次点击修改时不会显示该行的记录,并发现FORMCREATE事件没有触发,为何会这样呢?
if frmMedicineBaseInfo_Edit = nil then
frmMedicineBaseInfo_Edit := TfrmMedicineBaseInfo_Edit.Create(self);
frmMedicineBaseInfo_Edit.ShowModal;
frmMedicineBaseInfo_Edit.Free;
frmMedicineBaseInfo_Edit := nil;
我想可能是因为frmMedicineBaseInfo_Edit <> nil而引起的,是吗?如何处理呢?
问题点数:20、回复次数:4Top
1 楼andy_1027(天地昊天)回复于 2006-07-02 22:47:30 得分 0
第一次点击按钮的时候应该自己写代码读取,然后显示在相应地方。
你可以将读取当前行的数据写成一个函数,分别在按钮和ONCELLCLICK里调用好了。Top
2 楼fivehun2005(弱弱)回复于 2006-07-02 23:05:36 得分 0
当然是如此了,这些我是知道的,我对DELPHI还是比较熟的。
//点击修改按钮显示修改窗体
procedure TfrmMedicineBaseInfo.btnEditClick(Sender: TObject);
begin
M_NO := adoqMedicineBaseInfo.FieldByName('M_NO').AsString;
if frmMedicineBaseInfo_Edit = nil then
frmMedicineBaseInfo_Edit := TfrmMedicineBaseInfo_Edit.Create(self);
frmMedicineBaseInfo_Edit.ShowModal;
frmMedicineBaseInfo_Edit.Free;
frmMedicineBaseInfo_Edit := nil;
end;
//点击修改后,显示的窗体
procedure TfrmMedicineBaseInfo_Edit.FormCreate(Sender: TObject);
var
sqlStr : String;
begin
//读取剂型列表
sqlStr := 'select TypeID, TypeName from MedicineType order by TypeID';
QrOpenSql(adoqTmp, sqlStr);
M_TypeList := TStringList.Create();
while not adoqTmp.Eof do
begin
cmbM_Type.Items.Add(adoqTmp.FieldByName('TypeName').AsString);
M_TypeList.Add(adoqTmp.FieldByName('TypeID').AsString);
adoqTmp.Next;
end;
//读取单位列表
sqlStr := 'select UnitID, UnitName from MedicineUnit order by UnitID';
QrOpenSql(adoqTmp, sqlStr);
M_UnitList := TStringList.Create();
while not adoqTmp.Eof do
begin
cmbM_Unit.Items.Add(adoqTmp.FieldByName('UnitName').AsString);
M_UnitList.Add(adoqTmp.FieldByName('UnitID').AsString);
adoqTmp.Next;
end;
//读取药品信息
sqlStr := 'select M_NO, M_Name, M_PY, M_Style, M_Type, M_Produce, M_Unit, '
+ 'InStockPrice, SalePrice from Medicine '
+ 'where M_NO = '''+FrmMedicineBaseInfo.M_NO+'''';
QrOpenSql(adoqTmp, sqlStr);
edtM_NO.Text := adoqTmp.FieldByName('M_NO').AsString;
edtM_Name.Text := adoqTmp.FieldByName('M_Name').AsString;
edtM_PY.Text := adoqTmp.FieldByName('M_PY').AsString;
edtM_Style.Text := adoqTmp.FieldByName('M_Style').AsString;
cmbM_Type.ItemIndex := cmbM_Type.Items.IndexOf(adoqTmp.FieldByName('M_Type').AsString);
edtM_Produce.Text := adoqTmp.FieldByName('M_Produce').AsString;
cmbM_Unit.ItemIndex := cmbM_Unit.Items.IndexOf(adoqTmp.FieldByName('M_Unit').AsString);
edtInStockPrice.Text := adoqTmp.FieldByName('InStockPrice').AsString;
edtSalePrice.Text := adoqTmp.FieldByName('SalePrice').AsString;
end;Top
3 楼fivehun2005(弱弱)回复于 2006-07-02 23:09:10 得分 0
只是显示修改信息的窗体中的FORMCREATE事件并没有触发。我跟踪了一下,是由于之前就CREATE了,也就是frmMedicineBaseInfo_Edit <> nilTop
4 楼fivehun2005(弱弱)回复于 2006-07-02 23:09:33 得分 0
不知该如何处理,以前也是这么做的,没有出现过问题,真怪。Top




