虽然TDbgrid没有提供col和row属性,但是他的基类TCustomGrid却是实现了row和col属性。因此我们可以重新派生一个叫做的TMgrid的类来输出row和col属性,并将dbgrid的实例强制转换成TMgrid ,既可准确快速的获取这两个属性了,代码如下: Type TMgrid = class (TDbgrid);
… Begin … ShowMessage(IntToStr(TMgird(DbGrid1).row)); ShowMessage(IntToStr(TMgird(DbGrid1).rol)); … End;
Type
TMgrid = class (TDbgrid);
…
Begin
…
ShowMessage(IntToStr(TMgird(DbGrid1).row));
ShowMessage(IntToStr(TMgird(DbGrid1).rol));
…
End;
从这个例子中我们不难得到这样的启示,当我们无法从当前使用的类直接获取我们需要的信息时,不要急于求成而绕弯路,我们可以去考察一下它的基类(基类的基类…,一直找上去),是否为我们提供了我们需要的信息。如果有,我们可以简单的从当前类来继承一个新的类(当然你也可以从它的基类直接继承,例如上面的例子,TMgrids甚至可以从TCustomGrid类来继承。但是为了安全起见,我建议直接从当前类来继承),然后强制转换当前对象为新的类型,这时我们就可以非常容易获得我们需要的信息。
如果新增一条记录,显示什么? 如果这条记录是删除的,又显示什么?RecNo之所以有时候不准确, 是和一定的状态有关的. RecNo=-2表示dataset.DisenablControls状态.
如果是IsEmpty or state=dsinsert 就是-1.楼主要这么行号不知道具体做什么,所以需要具体问题具体分析.
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);dbgrid的Recno