根据所选值从列表中检索项目

Retrieving an item from a list based on selected value

函数retrieveFixtureReport() returns一个Report列表,每个Report包含一个PlayerID。我试图设置我的标签以反映从 cmbSelectedPlayer 选择的 selected 报告。列表中的每个报告都包含一个唯一的 PlayerID。我已经尝试了多种不同的方法来访问 selected 报告的属性,包括 LINQ,但到目前为止都没有成功。 For Each 循环似乎不是 select 只有一个报告的正确选项,它还阻止我从 cmbSelectedPlayer selecting 其他 PlayerID(仅显示列表中的最后一个报告)。代码如下所示:

Public Sub setFixtureReport()

            'If UC_Menu_Scout1.cmbSelectedPlayer.SelectedItem IsNot Nothing Then

            If UC_Menu_Scout1.cmbSelectedPlayer.Items.Count > 0 Then

                Dim getPlayerReport = _
                (From rpt As Report In retrieveFixtureReport() _
                Where rpt.PlayerID = UC_Menu_Scout1.cmbSelectedPlayer.SelectedItem.PlayerID) '.AsEnumerable

                'For Each rpt As Report In getPlayerReport()

                'For Each rpt As Report In retrieveFixtureReport.Where(Function(x) x.PlayerID = UC_Menu_Scout1.cmbSelectedPlayer.SelectedItem.PlayerID)

                'Dim rpt As Report = getPlayerReport 'retrieveFixtureReport(0)

                '*****General Information
                UC_Menu_Scout1.lblRptPosition.Text = rpt.PositionPlayed
                UC_Menu_Scout1.lblFoot.Text = rpt.PreferredFoot
                UC_Menu_Scout1.txtComments.Text = rpt.Comments
                UC_Menu_Scout1.lblStatus.Text = rpt.MonitorStatus

                'Next

                setColours()
                'End If
            End If
        End Sub

组合框 cmbSelectedPlayer 由 playerList 填充(这也添加到 retrieveFixxtureReport 中):

UC_Menu_Scout1.cmbSelectedPlayer.DataSource = playerList
        UC_Menu_Scout1.cmbSelectedPlayer.DisplayMember = "PlayerFullName"
        UC_Menu_Scout1.cmbSelectedPlayer.ValueMember = "PlayerID"

如有任何建议,我们将不胜感激。

如果您的组合框绑定到 List(Of Player),那么您需要做的就是将 SelectedItem 转换为它的类型:

Dim player = TryCast(UC_Menu_Scout1.cmbSelectedPlayer.SelectedItem, Player)
If Not player Is Nothing Then
  Dim getPlayerReport = (From rpt As Report In retrieveFixtureReport()
                         Where rpt.PlayerID = player.PlayerID).FirstOrDefault()
  If Not getPlayerReport Is Nothing Then
    UC_Menu_Scout1.lblRptPosition.Text = getPlayerReport.PositionPlayed
    UC_Menu_Scout1.lblFoot.Text = getPlayerReport.PreferredFoot
    UC_Menu_Scout1.txtComments.Text = getPlayerReport.Comments
    UC_Menu_Scout1.lblStatus.Text = getPlayerReport.MonitorStatus
  End If
End If