【问题标题】:VFP Grid with multiselect具有多选功能的 VFP 网格
【发布时间】:2012-11-20 08:27:40
【问题描述】:

我正在尝试在网格上实现多记录选择功能。
它与http://www.tek-tips.com/faqs.cfm?fid=3831非常相似
它添加了一个带有复选框的额外列。我想要那些复选框!

但这取决于基础表中的额外逻辑字段。它需要创建一个继承CHECKBOX 的类clscheck。我不确定为什么复选框需要这个 CLICK 过程。

 PROCEDURE CLICK
    IF DODEFAULT()
        KEYBOARD '{DNARROW}'
    ENDIF
 ENDPROC

当我删除它时,行选择没有按预期正常工作。为什么会这样?

这是我的要求:
1) 我不想在基础表中添加额外的逻辑字段。
2)要使用网格中的控件,我认为 AllowCellSelection 必须是 .T。我想要 AllowCellSelection = .F.,因为除了复选框之外,我不需要使用网格中的任何控件。我只需要使用复选框。其他列将是只读的。
3) 我可以在基础表中选择没有逻辑字段的列表吗?
4) 我可以删除 KEYBOARD '{DNARROW}' 的使用吗?

事实上,我有一个网格是 AllowCellSelection = .F.,但它只提供单一选择。
我需要通过多项选择来增强它,因此,我只想添加一个带有复选框的额外列,以便用户知道他可以选择多条记录。
不需要傻瓜用户不熟悉的Shift+Click或Ctrl+Click。

我找到了这个 - http://www.tek-tips.com/faqs.cfm?fid=433
它还依赖于一个额外的逻辑字段,它依赖于 Shift+Click 和 Ctrl+Click。

【问题讨论】:

    标签: grid multi-select foxpro visual-foxpro


    【解决方案1】:

    您所看到的对于多选网格来说很常见。我过去曾使用过与此类似的方法。但是,您害怕基础表中的额外列。这可能/不是真的。您不必总是更新 ORIGINAL 表,而是您要呈现给用户的临时 CURSOR。例如:如果您想在表格中显示员工列表。不,您不想继续将此列添加到原始员工表中,因为其他任何尝试进行多选的人都可能错误地获得您的选择。但是,如果您拉入自己的本地光标并呈现给用户,那么没问题。示例...

    Thisform.YourGrid.RecordSource = "Employees"
    (bound directly to your employee table -- not necessarily the right thing)
    

    use in select( "C_MultiPickEmployees" )
    select ;
          .F. as IsChosen, ;
          E.* ;
       from ;
          Employees E;
       into ;
          cursor C_MultiPickEmployees READWRITE
    
    Thisform.YourGrid.RecordSource = "C_MultiPickEmployees"
    

    现在,您有了额外的列,而无需处理基础表的问题。如果您想进一步过滤所显示的内容 - 例如某个部门/部门的员工,只需将其添加到 WHERE 子句中,如果需要,添加一个 Order By 即可。

    至于“允许单元格选择”,我从来没有处理过。我只是在第一列添加一个“复选框”并设置

    Thisform.YourGrid.Column[1].CurrentControl = "CheckBoxControl"
    (基于它添加到列中的名称)。

    然后,设置第 1 列的“ControlSource”=“C_MultiPickEmployees.IsChosen”,您应该已经完成​​了。

    至于“CLICK”事件试图强制向下箭头。这更适用于自动滚动到下一条记录,因此您只需单击、单击、单击多个条目。

    希望这有助于你澄清事情。

    【讨论】:

    • 感谢 DRapp。你的被注意到了。那么,复选框的CLICK事件是必须的吗?当我点击一个复选框时,光标会移动到下一条记录,对吧?
    • @Sithu,如果你想这样自动化它......是的。
    • 关于AllowCellSelection,是.T。默认情况下,这使文本框可访问。这不是我想要的。因此,我的网格有“AllowCellSelection = .F.”。如果我添加复选框,我必须将其设置为 .T。这将使其他控件不必要地访问。有什么想法吗?
    • @Sithu,您始终可以将所有 OTHER 列设置为“ReadOnly = .T”。因此用户无法编辑这些,但将复选框列保留为“ReadOnly = .F”。因此用户可以根据需要选择/取消选择。
    • 嗨 DRapp,我回到这个话题。只读 = .T。使控件不可编辑,但我们仍然可以访问它们,即鼠标指针是文本,并且指针仍然可以放在文本框中。在我看来,这实际上不是一个好主意。 FoxPro 更可行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多