问题:如何在使用 DBNavigator 的时候,用户点了 “+” 符号,对应的 DataSet 不是执行 Insert 而是执行 Append,达到新纪录始终出现在 DBGrid 的最底部的效果?
办法:通过修改 DBNavigator 的代码来实现。
但我们不能去修改 DBNavigator 的源代码。DBNavigator 有一个 Buttons 属性,但是属于 Portected 的,在其它地方无法访问到。对于 Delphi 的语法来说,可以这样处理:在需要访问 DBNavigator 的 Protected 区的成员的单元,声明一个新的类,继承 DBNavigator,因为 Delphi 的语法规定 Protected 区的成员在本单元可以访问,因此就可以访问被保护的 Buttons 属性了。
原理讲完,看代码:
var
DBNavigator: TDBNavigator;
begin
DBNavigator := ((Sender as TControl).Parent as TDBNavigator);
if Assigned(DBNavigator.DataSource) and (DBNavigator.DataSource.State <> dsInactive) then
begin
if Assigned(DBNavigator.BeforeAction) then
DBNavigator.BeforeAction(DBNavigator, nbInsert);
DBNavigator.DataSource.DataSet.Append;
if Assigned(DBNavigator.OnClick) then
DBNavigator.OnClick(DBNavigator, nbInsert);
end;