1

我正在尝试在网格上实现多记录选择功能。它与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。

4

1 回答 1

2

您所看到的对于多选网格来说很常见。我过去曾使用过与此类似的方法。但是,您害怕基础表中的额外列。这可能/不是真的。您不必总是更新 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”事件。这更适用于自动滚动到下一条记录,因此您只需单击、单击、单击多个条目。

希望这有助于为您澄清事情。

于 2012-11-20T08:40:27.947 回答