【问题标题】:Populating a listbox accurately in visual fox pro在visual fox pro中准确填充列表框
【发布时间】:2018-07-22 16:23:27
【问题描述】:

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

这个列表显示了猫名“hey now”和“shiet”,它们的活跃=“0”:

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

【问题讨论】:

  • 我没有使用任何代码,我只是简单地右键单击列表框并点击生成器。我用选定的字段填写了列表。
  • 是的,我在问我是否可以使用代码而不是仅仅点击东西,我是 fox pro 的新手,我不知道用什么代码来填充我的列表框,等于1,你看到照片了吗?
  • @CharlesMay,你在 VFP 中哪里使用 xsd(你可能很少但在这里无关紧要)?您在哪里右键单击并执行 Fill.GetData()? OP 正在谈论 VFP,您可能会在 .Net 的上下文中回复(即使在那里我也怀疑我会那样做)。

标签: c# visual-foxpro foxpro


【解决方案1】:

您可以使用 RowSourceType 为 3 (SQL) 并提供所需的 SQL 轻松完成此操作。您可以在设计器中或在代码中执行此操作,无论您喜欢哪种方式。在设计窗口中,您使用 PEM 表(Properties-Events-Methods 窗口)来执行此操作,而不是构建器(不幸的是构建器没有 SQL 选项):

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

  • 将行源设置为:

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

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

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

selectedCategoryId = crsMyList.CategoryId
selectedCategoryName = crsMyList.CatName

【讨论】:

  • 非常感谢。这行得通!我在互联网上找不到简单的答案。再次感谢。 :)
【解决方案2】:

作为另一个答案,您也可以在代码中执行此操作,实际上在代码中更容易。此外,当您的 SQL 很长时,您可能需要在代码中执行(属性窗口不允许您在此处输入长 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”的按钮,请执行以下操作:

  • 双击列表框并选择初始化方法。复制并粘贴上面“Procedure lstCustomersInUSA.Init”中的代码。
  • 对按钮执行相同操作,并在其单击方法中复制并粘贴上面“Procedure btnShowSelectedInfo.Click”中的代码。 运行表单。

【讨论】:

  • 必须同意,虽然我同时使用了设计器和代码,但我发现使用代码提供了更大的灵活性,尤其是在创建选择语句和组织数据的显示方式方面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多