Grid 具有多选功能的VFP网格

Grid 具有多选功能的VFP网格,grid,multi-select,foxpro,visual-foxpro,Grid,Multi Select,Foxpro,Visual Foxpro,我正在尝试在网格上实现多记录选择功能。 它与 它会添加一个带有复选框的额外列。我想要那些复选框 但它取决于基础表中的一个额外逻辑字段。它需要创建一个继承复选框的类clscheck。我不确定为什么复选框需要此单击过程 PROCEDURE CLICK IF DODEFAULT() KEYBOARD '{DNARROW}' ENDIF ENDPROC 当我删除它时,行选择没有按预期正常工作。为什么会这样 这是我的要求: 1) 我不想在基础表中添加额外的逻辑字段。

我正在尝试在网格上实现多记录选择功能。
它与
它会添加一个带有复选框的额外列。我想要那些复选框

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

 PROCEDURE CLICK
    IF DODEFAULT()
        KEYBOARD '{DNARROW}'
    ENDIF
 ENDPROC
当我删除它时,行选择没有按预期正常工作。为什么会这样

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

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

我找到了这个-

它还依赖于一个额外的逻辑字段,它依赖于Shift+单击和Ctrl+单击

对于多选栅格,您看到的情况非常常见。我过去也用过类似的方法。但是,您担心基础表中的额外列。那可能是/不是真的。您不必总是更新原始表,而是向用户显示一个临时光标。例如:如果要在表中显示员工列表。不,您不希望继续将此列添加到原始employee表中,因为其他尝试执行multi-select的人可能会错误地获得您的选择。但是,如果您拉入自己的本地光标并呈现给用户,则没有问题。例如

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

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

至于“允许细胞选择”,我从来没有处理过。我只需在第一列中添加一个“复选框”并设置

Thisform.YourGrid.Column[1]。CurrentControl=“CheckBoxControl”
(根据名称添加到列中)

然后,将第1列的“ControlSource”设置为“C_MultiPickEmployees.IsChosen”,您应该完成大部分工作

至于试图强制向下箭头的“单击”事件。这更适用于自动滚动到下一条记录,这样您就可以单击、单击、单击多个条目


希望这有助于澄清问题。

谢谢DRapp。你的很有名。那么,复选框的单击事件是必须的吗?当我点击一个复选框时,光标会移动到下一条记录,对吗?@Sithu,如果你想这样自动化它的话。。。是的。关于AllowCellSelection,它是.T。默认情况下,这使文本框可访问。这不是我想要的。因此,我的网格具有“AllowCellSelection=.F.”。如果我添加复选框,我必须设置它。这将使其他控件不必要地可访问。有什么想法吗?@Sithu,你可以将所有其他列设置为“ReadOnly=.T.”,这样用户就不能编辑这些列,而将复选框列保留为“ReadOnly=.F.”,这样用户就可以根据需要选择/取消选择。嗨,德拉普,我回到这个话题上了。只读=.T。使控件不可编辑,但我们仍然可以访问它们,即鼠标指针是文本,指针仍然可以放置在文本框中。在我看来,这其实不是一个好主意。FoxPro更可行?
use in select( "C_MultiPickEmployees" )
select ;
      .F. as IsChosen, ;
      E.* ;
   from ;
      Employees E;
   into ;
      cursor C_MultiPickEmployees READWRITE

Thisform.YourGrid.RecordSource = "C_MultiPickEmployees"