在 visual fox pro 中准确填充列表框

Populating a listbox accurately in visual fox pro

enter image description here我在填充列表框时遇到问题,例如,我想在 active = "1" 的位置填充它,以便显示 active = "1" 的数据和 active="0" 的数据仍然隐藏,

此列表显示猫名 "hey now" 和 "shiet",它们具有 active = "0":

我希望它们只在我的列表框中显示 active = 1

您可以使用 3 (SQL) 的 RowSourceType 并提供所需的 SQL 轻松地做到这一点。您可以根据需要在设计器中或代码中执行此操作。在设计 window 中,您使用 PEM sheet(Properties-Events-Methods window)来执行此操作,而不是构建器(不幸的是构建器没有 SQL 选项):

  • 将 RowSourceType 设置为 3(SQL 语句)

  • 将 RowSource 设置为:

    select CatName, CategoryId 从 tbl_Category where Active="1" into cursor crsMyList

就是这样。当您 运行 您的表单时,它将仅列出 Active="1" 的类别名称(顺便说一句,如果 Active 字段是数字,则删除引号)。

您只需使用 crsMyList 别名即可获得 selected 行的值,例如:

selectedCategoryId = crsMyList.CategoryId
selectedCategoryName = crsMyList.CatName

作为另一个答案,您也可以在代码中执行此操作,实际上在代码中更容易。此外,当 SQL 很长时,您可能需要在代码中执行(属性 window 不允许您在那里输入长 SQL 字符串,限制为 255 个字符)。

下面是美国客户(示例中)代码清单中的完整示例:

Public oForm
oForm = CreateObject('MyForm')
m.oForm.Show()

Define Class myForm as Form
    Height=440
    Width=400
    DataSession=2

    Add Object lstCustomersInUSA as listbox with top=20, left=10, height=400, Width=200
    Add Object btnShowSelectedInfo as CommandButton with Top=20, Left = 220,Caption="Show Selected"

    Procedure lstCustomersInUSA.Init
       this.RowSourceType = 3
       Text to this.RowSource pretext 15 noshow
       Select Company, Contact, Cust_id
         from (_samples+'data\Customer')
         where country = 'USA'
         into cursor crsSample
         nofilter
       EndText
    EndProc

    Procedure btnShowSelectedInfo.Click
    If thisform.lstCustomersInUSA.ListIndex = 0
        MessageBox("None selectedyet")
        Return
    endif
    Local lcInfo
    Text to m.lcInfo textmerge pretext 3 noshow
       Id: << crsSample.Cust_id >>
       Company: << crsSample.Company >>
       Contact: << crsSample.Contact >>
    EndText
    MessageBox( m.lcInfo, 0+4096, 'Selected Customer', 5000)
    endproc
enddefine

注意:如果您想在设计器中使用表单对此进行测试,那么假设您添加了一个名为 "lstCustomersInUSA" 的列表框和一个名为 "btnShowSelectedInfo" 的按钮,请执行以下操作:

  • 双击列表框和select 初始化方法。复制并粘贴上面 "Procedure lstCustomersInUSA.Init" 中的代码。
  • 对按钮执行相同操作,并在其点击方法中复制并粘贴上述 "Procedure btnShowSelectedInfo.Click" 中的代码。 运行表格。