访问 ComboBox 绑定和选定值

Posted

技术标签:

【中文标题】访问 ComboBox 绑定和选定值【英文标题】:Access ComboBox binding and Selected Value 【发布时间】:2018-07-24 22:17:03 【问题描述】:

我正在尝试创建一个用于输入数据的简单表单。我有两个表格,工作和报告。报告表是指具有一对多的作业(一份作业,多份报告)。浏览报告时,我希望列出所有作业的组合框将相应的作业显示为所选值。这在 .NET 环境中很容易,但我不明白如何在组合框的属性表中进行设置。我的 ComboBox 记录源来自一个查询:

SELECT Jobs.UID, Jobs.Projectcode, Jobs.Projectname, Jobs.Owner, Jobs.Contractor
FROM Jobs
ORDER BY Jobs.[Projectcode];

表单基于连接表的查询:

SELECT Report.ID, Report.ReportNumber, Report.ReportDate, Report.Temperature, Report.Weather, Report.Progress, Report.PeopleatOAC, Report.Trades, Jobs.UID, Jobs.Projectname, Jobs.Owner, Jobs.Contractor
FROM Report
INNER JOIN Jobs ON Jobs.UID = Report.JobID
UNION ALL SELECT  Report.ID, Report.ReportNumber, Report.ReportDate, 
Report.Temperature, Report.Weather, Report.Progress, Report.PeopleatOAC, 
Report.Trades, Jobs.UID, Jobs.Projectname, Jobs.Owner, Jobs.Contractor
FROM Report
LEFT JOIN Jobs ON Jobs.UID = Report.JobID WHERE (((Report.JobID) Is Null))
ORDER BY Report.ID;

按照我的设置方式,报告可以有一个空作业字段。因此,我希望能够从组合框中选择一个工作来更新报告表,并且如果当前记录具有与之关联的 jobID,我希望组合框反映正确的工作。这可能吗?

【问题讨论】:

【参考方案1】:

我已经实现了一个绑定到当前事件的表单,该表单根据 JobID 设置组合框值(或清除它)。以及绑定到组合框的更改事件以使用选择更新数据库。这工作得很好,但与 C#、WPF 和 MVVM 相比,VBA 感觉非常有限。

对于遇到类似问题的人来说,这里有 2 个 VBA 函数:

Private Sub Form_Current()
Dim JobID As Integer
Dim i As Integer
Dim TempVal As Variant
Dim TestVal As Integer

TempVal = Me.JobID.Value
If Me.JobID.Value <> Empty Then
JobID = Me.JobID.Value
Else: JobID = -2
End If



With Me.JobCodeCombo
    If (JobID >= 0) Then
       For i = 0 To .ListCount - 1
          TestVal = .Column(0, i)
          If .Column(0, i) = JobID Then
             .Value = .ItemData(i)
             Exit For
          End If
       Next
    Else
        Me.JobCodeCombo = Null
    End If
End With

End Sub

Private Sub JobCodeCombo_Change()
    Dim ReportID As Long
    Dim JobID As Long
    Dim dbs As DAO.Database
    Dim qdfUpdateJobID As DAO.QueryDef
    Dim CurrentRecord As Long

    CurrentRecord = Me.CurrentRecord
    Set dbs = CurrentDb
    Set qdfUpdateJobID = dbs.QueryDefs("UpdateReportWithJobID")

    ReportID = Me.ReportID.Value
    JobID = Me.JobCodeCombo.Column(0)

    qdfUpdateJobID.Parameters(0).Value = JobID
    qdfUpdateJobID.Parameters(1).Value = ReportID
    qdfUpdateJobID.Execute
    qdfUpdateJobID.Close
    DoCmd.Save acForm, "Form1"
    Me.Requery
    DoCmd.GoToRecord acDataForm, "Form1", acGoTo, CurrentRecord
End Sub

从第二个函数调用的查询是我的访问文件中的一个简单更新查询,它有两个参数:

PARAMETERS [P1] Long, [P2] Long;
UPDATE Report SET JobID = P1
WHERE [ID] = P2;

【讨论】:

以上是关于访问 ComboBox 绑定和选定值的主要内容,如果未能解决你的问题,请参考以下文章

WPF MVVM 将 ComboBox 绑定到 Datagrid 选定项

如何在 ComboBox 中将“附加属性”定义为“SelectedValuePath”?

WPF中,ComboBox值显示问题

访问 2007 组合框上的选定值未显示在多个记录上

C# 如何在一个Datagridview 的 某一个cell里面 绑定一个自定义的combobox

如何在 MFC C++ 中将 CString 值列表添加到 ComboBox 中? [关闭]