实现当点击修改按钮时,弹出一个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而引起的,是吗?如何处理呢?

解决方案 »

  1.   

    第一次点击按钮的时候应该自己写代码读取,然后显示在相应地方。
    你可以将读取当前行的数据写成一个函数,分别在按钮和ONCELLCLICK里调用好了。
      

  2.   

    当然是如此了,这些我是知道的,我对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;
      

  3.   

    只是显示修改信息的窗体中的FORMCREATE事件并没有触发。我跟踪了一下,是由于之前就CREATE了,也就是frmMedicineBaseInfo_Edit <> nil