具有多选的VFP网格

时间:2012-11-20 08:27:41

标签: grid multi-select foxpro visual-foxpro

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

1 个答案:

答案 0 :(得分:2)

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

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

VS

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”事件。这更适用于自动滚动到下一条记录,因此您只需单击,单击,单击即可显示多个条目。

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