DBGRID的问题
使用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




