关于DBGRID的老生长谈问题...(120分)

  • 主题发起人 主题发起人 wwwwww
  • 开始时间 开始时间
W

wwwwww

Unregistered / Unconfirmed
GUEST, unregistred user!
以下有关DBGRID的问题似乎讨论过许多,但我查过以往的答案,
都不太满意(也可能遗漏了一些正确答案),请重新回答一次:
1、如何给DBGRID首列加序号,1、2、3......增加、删除、插入记录后,
序号还会自动连续?
2、如何用按ENTER有TAB的效果,在单元格中跳动?
3、更令人烦的事,如何进入单元格后,自动进入编辑状态,就像
EDIT构件,EDIT1.AUTOEDIT:=FALSE,
而非自动选择状态,一打字就将以前的内容干掉。
我想了招:向DBGRID POST一个MESSAGE,即按F2键,可以解决问题,
但有时也不好使.
4. 另外,我发现是不是D5的BUG:
一SQL语句:SQL * FROM 某库 WHERE (ID>aID) and (NAME>aName)
以下的语句就是正确的:
with ADODATASET1 do
begin PARAMSTR[0]:=edit1.text;
PARAMSTR[1]:=edit2.text;
close; open;
end;//在DBGRID中出现想要的数据
而:with ADODATASET1 do
begin PARAMSTR['id;name']:=VarArrayOf(edit1.text,edit2.text);
close; open;
end;//在DBGRID中出现想要的数据
按道理讲应疏途同归,但后一种写法运行时出错!WHY?



 
1、给dataset增加一个字段"NO",然后在afterdelete,afterinsert事件中进行处理,
tdataset.first
while not tdataset.eof do
begin
tdataset['NO']:=tdataset.recno;
tdataset.next;
end;
2、在onkeypress事件中检测key=#13,如果是的话向模拟一个tab按键的动作,然后key:=#0;
 
2.变通的方法
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
key:=#0;
if DBGrid1.SelectedIndex<>DBGrid1.FieldCount-1 then
DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1
else
DBGrid1.SelectedIndex:=0;
end;
end;

3. DBGrid1.EditorMode:=true;
 
类似 PARAMSTR['id;name']:=VarArrayOf(edit1.text,edit2.text);
的用法是 BDE 的数据控件(比如 TQuery )用的 TParams 的用法,
因为这种方法实现起来比较麻烦,TADODataset用的 TParameters
并没有实现这种写法
 
以上的问题我正在试验,先谢了各位了,结果以后再讨论,
但试验过程中又出现新问题:
我用的是ADO+SQL SERVER
在DBGRID中插入一条记录后,比如在第二、三条之间插入一条,
只要光标一离开此行,新记录就被移到DBGRID末尾去了,
象APPEND一样,
是不是因为大型数据库没有物理的连续,只有逻辑上的顺序呢?
问题在哪里?
前几个问题解决不了也倒罢了,能凑合,这是很严重的问题!
 
1、可以用autoincrement字段
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
745
SUNSTONE的Delphi笔记
S
S
回复
0
查看
754
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部