CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

DBGRID的问题

楼主jn_rice(江南大米)2003-06-02 16:56:21 在 Delphi / 数据库相关 提问

使用DBGRID添加数据,在一行里面添加的时候,要求回车就跳转到同一行行下一格内  
  当最后一行的时候就跳转到下一行!我原先用listview,因为修改数据某列数据的时候比较麻烦,所以改用DBgrid,忘经验人事不吝赐教!:) 问题点数:0、回复次数:28Top

1 楼mrfanghansheng(☆☆☆木鱼☆☆☆)回复于 2003-06-02 17:01:05 得分 0

在dogrid的keydown事件中加入下列代码  
   
  if   (Key   =   13)   then  
  begin  
      dogrid1.dataset.next;  
  end;Top

2 楼wave_f(小浪花)回复于 2003-06-02 17:03:11 得分 0

我也有同样的问题啊!Top

3 楼wave_f(小浪花)回复于 2003-06-02 17:05:14 得分 0

TO:   mrfanghansheng(☆☆☆木鱼☆☆☆)    
   
  还是不行啊!Top

4 楼yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜)回复于 2003-06-02 17:05:24 得分 0

if   (Key   =   #13)   then//上面的大哥少了   #    
  begin  
      dbgrid1.DataSource.dataset.next;//他写成dogrid  
  end;  
  Top

5 楼yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜)回复于 2003-06-02 17:07:48 得分 0

怪楼主没把问题说清楚,  
   
  你的意思应该是这样的吧:  
   
  使用DBGRID添加数据,在一行里面添加的时候,要求回车就跳转到同一行行下一列内  
  当最后一列的时候就跳转到下一行!  
   
  是这个意思吧?Top

6 楼jn_rice(江南大米)回复于 2003-06-02 17:09:34 得分 0

procedure   TForm1.FormKeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      if   Key   =   #13   then                                                             {回车键   }  
   
          if   not   (ActiveControl   is   TDBGridEh)   then   begin   {   if   not   on   a   TDBGrid   }  
              Key   :=   #0;                                                                   {   eat   enter   key   }  
              Perform(WM_NEXTDLGCTL,   0,   0);                             {   move   to   next   control   }  
          end  
          else   if   (ActiveControl   is   TDBGridEh)   then             {   if   it   is   a   TDBGrid   }  
              with   TDBGridEh(ActiveControl)   do  
                  if   selectedindex   <   (fieldcount   -1)   then     {   increment   the   field   }  
                      selectedindex   :=   selectedindex   +1  
                  else  
                      selectedindex   :=   0;  
   
  end;  
  我这样实现了ENTER替代TAB键的功能!但如何实现换行呢???Top

7 楼wave_f(小浪花)回复于 2003-06-02 17:09:42 得分 0

procedure   TForm1.DBGrid1KeyDown(Sender:   TObject;   var   Key:   Word;  
      Shift:   TShiftState);  
  begin  
  if   (Key   =   13)   then  
  begin  
    dbgrid1.DataSource.DataSet.Next;  
  end;  
   
  end;  
   
  这样还可以;但楼主的意思好像不是这样哟.应该是按回车时移动列,当此条记录移动到最后一列时,光标回跳到下一步条记录的第一列,我再出100分,请高手解答Top

8 楼mrfanghansheng(☆☆☆木鱼☆☆☆)回复于 2003-06-02 17:09:53 得分 0

对不起,没测试随便写的,应该是:  
   
      if   (Key   =   13)   then  
      begin  
          if   DBGrid1.SelectedIndex<>DBGrid1.Columns.Count-1   then  
          DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1  
          else  
          begin  
          dbgrid1.DataSource.dataset.next;  
          DBGrid1.SelectedIndex:=0;  
          end;  
      end;Top

9 楼bitsbird(一瓢 在路上...)回复于 2003-06-02 17:11:18 得分 0

if   key=#13   then    
  begin  
      dbgrid1.dataset.next;  
  end;Top

10 楼mrfanghansheng(☆☆☆木鱼☆☆☆)回复于 2003-06-02 17:11:31 得分 0

上面的我才测试了,现在可行,  
   
  对不起,还没怎么看就写了第一段错误代码,现在好了Top

11 楼haoco()回复于 2003-06-02 17:13:25 得分 0

 
  procedure   TfrmMain.DBGrid1KeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      inherited;  
      if   DBGrid1.SelectedIndex<DBGrid1.Columns.Count-1   then  
          DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1  
      else  
      begin  
          DBGrid1.DataSource.DataSet.Post;  
          DBGrid1.DataSource.DataSet.Append;  
          DBGrid1.SelectedIndex:=0;  
      end;  
  end;  
  Top

12 楼haoco()回复于 2003-06-02 17:15:30 得分 0

忘了加一个判断是否按下回车键了Top

13 楼mrfanghansheng(☆☆☆木鱼☆☆☆)回复于 2003-06-02 17:17:54 得分 0

to:haoco(程序员)    
   
        呵呵,老兄也很急哦……你这样的append方法加上了新增数据地功能Top

14 楼haoco()回复于 2003-06-02 17:28:44 得分 0

不新增数据,那怎么才能在DBGrid中加入一个空行Top

15 楼gxmark(晓明)回复于 2003-06-02 17:32:05 得分 0

procedure   TForm1.DBGrid1KeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      inherited;  
      if   (key=#13)   then  
                  if   DBGrid1.SelectedIndex<DBGrid1.Columns.Count-1   then  
                                  DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1  
                  else  
                  begin  
                                  dbgrid1.DataSource.DataSet.Next;  
                                  dbgrid1.SelectedIndex:=0;  
                  end;  
  end;  
   
  综合大家的意见,我用上面的代码实验了一下,通过!  
  如果大家不信,可以试试!Top

16 楼bbs791109(小别)回复于 2003-06-02 17:47:45 得分 0

procedure   TForm1.DBGrid1KeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      if   (key=#13)   then  
                  if   DBGrid1.SelectedIndex<DBGrid1.Columns.Count-1   then  
                                  DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1  
                  else  
                  begin  
                                  dbgrid1.DataSource.DataSet.Next;  
                                  dbgrid1.SelectedIndex:=0;  
                  end;  
  end;Top

17 楼things(Loving You)回复于 2003-06-02 20:12:36 得分 0

he   he   :)Top

18 楼sixgj(轰炸机)回复于 2003-06-02 20:21:40 得分 0

 
  【其实楼主的意思就是使回车键有tab键的功能】,但大家都只注意了右移动不太注意在到数据最后时移动到下一行,我这有个方法大家可以参考一下了。  
   
  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★  
   
  procedure   TForm1.DBGrid1KeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
   
  if   Key   =   #13   then  
   
      if   DBGrid1.SelectedIndex<(DBGrid1.fieldcount-1)     then  
        TDBGrid(ActiveControl).SelectedIndex   :=   TDBGrid(ActiveControl).SelectedIndex   +   1  
          else  
              begin  
                    if   not   table1.Eof   then  
                    begin  
                    table1.Next;  
                    DBGrid1.SelectedIndex:=0;  
                    end;  
              end;  
  end;  
   
  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★  
   
  Top

19 楼chinabird79(降龙V伏虎)回复于 2003-06-03 02:20:27 得分 0

无法实现自动换到下一条记录啊,  
   
  只能在本记录上左右移Top

20 楼jn_rice(江南大米)回复于 2003-06-03 08:50:01 得分 0

郁闷,haoco(程序员)   理解的意思是对的,可我这里总是试不出来啊!Top

21 楼jn_rice(江南大米)回复于 2003-06-03 08:59:53 得分 0

我继续说清楚我的问题吧,昨天下班前贴的太急了!我做一个销售前台,原来是使用listview写的,因为修改列数据太繁琐了,必须从edit赋值执行!为了减少操作,人家建议我用DBgrid实现格式:  
  序号     条码                       名称           单价       数量     小计              
  1           1234567890123     XXXXXX       1.00       1.00       1.00  
  2  
  ……  
  开始自动光标定位到条码那个单元格,扫入条码,自动填充“名称”,“单价”字段,然后跳转到数量单元格,修改完毕enter,新增一行,重复上述过程!最后一次提交!  
  我要疯了,原先用listview全写好了的,结果为了减少操作员按键次数,以及操作习惯,要做这么大修改啊!解决问题我再追加300分!谢谢了!Top

22 楼jn_rice(江南大米)回复于 2003-06-03 09:29:17 得分 0

upTop

23 楼tanlijun37(天下)回复于 2003-06-03 09:56:48 得分 0

dbgrid的onkeydown事件  
  if   key=13   then  
          begin  
              if   dbgrid1.DataSource.DataSet.Eof   then  
                  dbgrid1.DataSource.DataSet.Append;  
              if   dbgrid1.SelectedIndex<dbgrid1.FieldCount-1   then  
                  begin  
                      //去查询  
                      dbgrid1.Fields[1].Value:=查询结果;  
                      dbgrid1.fields[2].Value:=查询结果;  
                      dbgrid1.SelectedIndex:=dbgrid1.SelectedIndex+3  
                  end  
              else  
                  begin  
                      dbgrid1.DataSource.DataSet.Next;  
                      dbgrid1.SelectedIndex:=0;  
                  end;  
          end;  
  还不可以吗?Top

24 楼eloner(老吴)回复于 2003-06-03 10:34:50 得分 0

procedure   TForm1.FormKeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      if   Key   =   #13   then                                                             {回车键   }  
   
          if   not   (ActiveControl   is   TDBGridEh)   then   begin   {   if   not   on   a   TDBGrid   }  
              Key   :=   #0;                                                                   {   eat   enter   key   }  
              Perform(WM_NEXTDLGCTL,   0,   0);                             {   move   to   next   control   }  
          end  
          else   if   (ActiveControl   is   TDBGridEh)   then             {   if   it   is   a   TDBGrid   }  
              with   TDBGridEh(ActiveControl)   do  
                  if   selectedindex   <   (fieldcount   -1)   then     {   increment   the   field   }  
                      selectedindex   :=   selectedindex   +1  
                  else  
                  begin  
                      dbgrid1.DataSource.DataSet.Next;  
                      selectedindex   :=   0;  
                  end;  
  end;  
  要解决append或insert   或delete最好的方法就是在内存中操作,  
  这样,你那几个问题都可以解决了,如果不懂怎么在内存中操作,可以和我发邮件loner_meme@163.comTop

25 楼mrfanghansheng(☆☆☆木鱼☆☆☆)回复于 2003-06-03 15:32:58 得分 0

还没解决么???奇怪!我这里试都是好好的……Top

26 楼jn_rice(江南大米)回复于 2003-06-03 16:15:59 得分 0

没有啊!头晕了!出现BUG了,我是用MySQL,开始是用MySQL网站提供的DLL连接库做的,后来因为使用DBGRID没有办法了,使用了MyODBC+ADO,接着绝对是BUG,显示的FLOAT竟然出错,1.20显示成1.20000000004678之类的数字了!改BDE就没问题!  
    mrfanghansheng(☆☆☆木鱼☆☆☆)把你的DEMO发给我吧?wsqrock@msn.com谢谢了,如果成功我会另外开贴给分!  
  谢谢各位了!Top

27 楼jn_rice(江南大米)回复于 2003-06-03 16:26:59 得分 0

不用先Append;我如何直接就可以在DBGRID里面修改啊!我以前一直使用listview对DBGRID不怎么用,没有想到现在亏大了!!  
  Top

28 楼jn_rice(江南大米)回复于 2003-06-04 09:16:52 得分 0

大家使用过SQLSERVER的企业管理器吧,在里面添加新记录的时候,是个DBGRID,回车就相当于TAB移动到下一格,  
  这个我已经实现了,问题是我的空DBGRID不能输入数据啊!请赐教啊!即使输入的我要求按了保存键再一次提交的!那这个临时的空表怎么实现呢?Top

相关问题

  • dbgrid
  • DBGRID
  • DBGrid
  • dbGrid
  • DBGrid
  • dbgrid$$$$$$
  • ado+dbgrid
  • 关于dbgrid
  • 关于dbgrid?急!!
  • DBGrid 控件

关键词

  • 数据
  • dbgrid
  • 一行
  • activecontrol
  • selectedindex
  • tdbgrideh
  • 添加
  • 跳转
  • 时候
  • dataset

得分解答快速导航

  • 帖主:jn_rice

相关链接

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

广告也精彩

反馈

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