加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何实现IsFirstRecord和IsLastRecord?

发布时间:2020-12-15 09:28:36 所属栏目:大数据 来源:网络整理
导读:我喜欢在用户点击它们时没有意义的情况下禁用控件. 一个特殊情况是一组自定义菜单按钮,用于模拟标准TDBNavigator的第一个,前一个,下一个和最后一个按钮. 当用户单击第一个按钮时,第一个和前一个按钮都被禁用. 当用户然后单击下一个和前一个按钮时,基础TDataS
我喜欢在用户点击它们时没有意义的情况下禁用控件.

一个特殊情况是一组自定义菜单按钮,用于模拟标准TDBNavigator的第一个,前一个,下一个和最后一个按钮.

当用户单击第一个按钮时,第一个和前一个按钮都被禁用.

当用户然后单击下一个和前一个按钮时,基础TDataSet与之前的记录位于同一记录中,但是仍然启用了第一个和前一个按钮.

当前的实现如下所示:

NavigationFirstButton.Enabled := not DataSet.IsEmpty and not DataSet.Bof;
NavigationPriorButton.Enabled := not DataSet.IsEmpty and not DataSet.Bof;
NavigationNextButton.Enabled  := not DataSet.IsEmpty and not DataSet.Eof;
NavigationLastButton.Enabled  := not DataSet.IsEmpty and not DataSet.Eof;

Bof和Eof不是禁用按钮的正确方法,因为我必须事先知道当前记录是否是第一个/最后一个记录.

所以我想用IsFirstRecord和IsLastRecord方法重写它:

function IsFirstRecord(ADataSet: TDataSet): Boolean;
begin
    Result := ADataSet.RecNo = 0;
end;

function IsLastRecord(ADataSet: TDataSet): Boolean;
begin
    Result := ADataSet.RecNo = ADataSet.RecordCount - 1;
end;

我不认为这是一个好主意,因为我已经看到第一条记录RecNo = 0的情况并非如此. (即过滤后的TADSQuery)

IsFirstRecord和IsLastRecord的可靠实现是什么?甚至可以使用当前的TDataSet架构吗?

解决方法

你可以尝试这样的事情:

function IsFirstRecord(ADataSet: TDataSet): Boolean;
var
  BmStr: TBookmarkStr;
begin
  Result := not ADataSet.IsEmpty;
  if not Result then Exit;
  Result := ADataSet.Bof;
  // if ADataSet is already at BOF there is no point to continue
  if not Result then
  begin
    ADataSet.DisableControls;
    try
      BmStr := ADataSet.Bookmark;
      try
        ADataSet.Prior;
        Result := ADataSet.Bof;
      finally
        ADataSet.Bookmark := BmStr;
      end;
    finally
      ADataSet.EnableControls;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsFirstRecord(ADODataSet1) then
    ShowMessage('First')
  else
    ShowMessage('Not First');
end;

对于IsLastRecord实现,只需替换:

ADataSet.Prior -> ADataSet.Next
ADataSet.Bof -> ADataSet.Eof

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读