【问题标题】:How to know that user selected some row in DBGrid?如何知道用户在 DBGrid 中选择了某行?
【发布时间】:2015-08-25 08:10:40
【问题描述】:

我在 DBGrid 之外有 DBGrid 和“删除”按钮。我如何确定该用户在 DBGrid 中选择了一些字符串?因为如果表单打开并且在 DBGrid 中没有选择字符串,并且用户单击了“删除”按钮 - 我需要向他显示警告框“没有选择字符串!选择要删除的字符串。”

【问题讨论】:

    标签: delphi c++builder


    【解决方案1】:

    您没有说明您的网格是否设置为使用 dgRowSelect 和/或 dgMultiSelect。如果是,则当前选定行的列表可通过 SelectedRows 属性作为书签列表使用。

    如果没有选定的记录,则此列表将为空,因此:

    if myGrid.SelectedRows.Count = 0 then
      // Nothing selected!
    

    【讨论】:

    • 这仅在dgMultiSelect 为真时有效。然后用户可以删除多条记录。
    • 是的,关于这一点的问题还不清楚,这就是为什么我特别指出“If 它是 [set to dgMultiSelect]”?
    【解决方案2】:

    您需要查看 DBGrid1.SelectedRows

    procedure TForm24.Button1Click(Sender: TObject);
    var
      BookmarkList: TBookmarkList;
      Bookmark: TBookmark;
      i: Integer;
    begin
      BookmarkList := DBGrid1.SelectedRows;
    
      if BookmarkList.Count = 0 then
        ShowMessage('No strings selected! Select the string you want to delete')
      else
      begin
        for i := 0 to BookmarkList.Count - 1 do
        begin
          ClientDataSet1.GotoBookmark(BookmarkList[i]);
          ClientDataSet1.Delete;
        end;
      end;
    end;
    

    【讨论】:

    • DBGrid1->DataSource->DataSet->IsEmpty()。该字符串始终显示为 FALSE。即使在 DBGRID 中选择了一些字符串。
    • @Jens - 我认为您可能会将“选定记录”的概念与 当前 记录混淆。总有一条当前记录,除非数据集为空,但根据网格的设置,可能有 o、1 条或多条记录选中
    • 奇怪,但DBGrid1->SelectedRows->Count 总是显示 0。即使选择了行。 dgRowSelect 为真。我解决了这个问题,将 dgAlwaysShowSelected 更改为 TRUE。现在总是选择某行。
    • @Art - 您确实需要发布更多代码来展示您的实现期望网格如何工作、它是如何配置的,以及为什么当前行为不符合您的需求和期望。跨度>
    • 我看到这个答案现在已经被接受了,我认为这个答案很糟糕,因为这个答案的原始版本是错误的,而替换版本只有在我评论它的错误后才更新,现在是基于在修改此答案之前发布的 my 答案上。确实很差的形式。恕我直言。但只要阿特解决了他的问题,这才是最重要的。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多