CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

为何修改DATAGRID中数据时,第一次并没有读出需要修改的行信息?

楼主fivehun2005(弱弱)2006-07-02 22:40:35 在 Delphi / 语言基础/算法/系统设计 提问

实现当点击修改按钮时,弹出一个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

相关问题

关键词

得分解答快速导航

  • 帖主:fivehun2005

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo