如何实现Dbgrid的第一列从1开始,依次的增加 (50分)

  • 主题发起人 主题发起人 jmsczb
  • 开始时间 开始时间
J

jmsczb

Unregistered / Unconfirmed
GUEST, unregistred user!
程序开始的时候使Dbgrid的地一行的第一列为1,当输入新的行后,dbgrid的第二行
的第一列为2,依次类推,请问该如何实现!
 
让第一列对应一个计算字段
 

cell(i,i)=i
 
大家怎么不说话呀,难道很难吗,不会吧,我是不太熟悉,所以请大家指点!是不是嫌分少啊,
呵呵,少的话,在加呀,不过怎么您也的说点:(
可否具体点,我连的是adoquery
 
1。不用dbgrid,改用stringgrid!自己一行一行加内容。
2。在dbgrid前,再加一个listbox配合一下,造成一个假象[:D][:D][:D]
 
如果你的DataSet支持RecNo:
1.加一个整数型计算字段,假定为f;
2.OnCalcFields: f.AsInteger := DBGrid1.DataSet.RecNo;

否则很麻烦了
 
假设:
Table1:TTable;
DS1: TDataSource;
DBGrid1:TDBGrid;

DBGrid1 <-----DS1 <----Table1;

1.定义一个全局变量 xh:integer;
2.在Table1中新加一个计算字段xh.
3.在Table1的BeforeOpen事件中 xh:=0;
4.在Table1的 onCalcFields事件里写:
Table1xh.value:=xh;
inc(xh);

搞定。
 
w8u:
你的方法在用跳动访问记录时应该会出错,有时(通常)OnCalcFields会被
调用多次-每当需要该字段值时-如显示.只要记录量超过一屏.
 
1.加一个整数型计算字段,假定为f;
procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
ADOQuery1.fieldbyName('f').asinteger:=dataset.RecNo;
end;


 
建一个临时表
假设你是要从A表查出结果则可以
建一个新表B,在A表的基础上加一个自动增加的字段
Insert B Select * from A
Select * from B

 
to jmsczb:
请问你如何实现输入的?
 
直接在dbgrid里输入,回车换行,保存
 
这样编号很麻烦的,我劝你不要这样用,否则,碰到删除,修改、刷新都会出现
多重计算的问题,序号会乱的, 你必须自己编码来维护它。我也是过,没有得到
一个完美的方案。
 
判断连接dbgrid的表(query)的的当前状态,如果时新增,则程序赋值为max(xh)+1。这样,
序号字段可以设为readonly,它的赋值可以程序完成(在query的insertafter事件后执行)。
 
照说,一般的数据录入都会分两页,第一页采用文本框的形式录入单个记录,第二页采用
列表的形式,显示全部数据。
我觉得在列表中直接做这件事很烦琐,不如在定义ACCESS表时,将第一列(一般都是序号吧不要!)

 
TMD!我的回答怎么只发送了一半?
总之,在第一页录入除序号以外的其他字段,在ACCESS中编写一段代码实现
该字段的编号,这个字段不能设为关键字,但是不用着急,我后面会提到,
DIM AA AS recordset
dim sql as string
dim i as integer
sql="select * from tablename"
run this sql
set aa= this result
aa.movefirst
aa.fields("no")=1
i=1
while not aa.eof
i=i+1
aa.fields("no")=i
aa.movenext
wend
在第二页上用dbgrid与此表相连,你一定会的。
这样,实现了序号为关键字段的效果,不需要手工录入。
 
后退
顶部