【问题标题】:Retrieving an item from a list based on selected value根据所选值从列表中检索项目
【发布时间】:2015-04-15 13:20:25
【问题描述】:

retrieveFixtureReport() 函数返回一个报表列表,每个报表都包含一个 PlayerID。我正在尝试设置我的标签以反映从 cmbSelectedPlayer 中选择的选定报告。列表中的每个报告都包含一个唯一的 PlayerID。我尝试了各种不同的方法来访问所选报告的属性,包括 LINQ,但到目前为止都没有成功。 For Each 循环似乎不是仅选择一个报告的正确选项,它还阻止我从 cmbSelectedPlayer 中选择其他 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"

任何建议将不胜感激。

【问题讨论】:

  • 你能展示如何加载组合框吗?
  • 我已编辑问题以显示组合框的填充方式。

标签: vb.net linq list foreach


【解决方案1】:

如果您的组合框绑定到 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

【讨论】:

  • 我已编辑问题以显示组合框的填充方式。这没问题,我的问题是根据组合框中所选项目的 PlayerID 检索单个报告
  • 这个PlayerList的底层类型是什么?
  • 我有另一个类叫做 Player(PlayerID 和 PlayerFullName 在 PlayerList 中使用),PlayerID 在 Player 和 Report 类中都可以找到
  • 我事先尝试过类似的事情,我的问题是试图为我的标签声明 rpt,例如:UC_Menu_Scout1.lblRptPosition.Text = rpt.PositionPlayed
  • 您需要使用变量而不是 LINQ 变量。再看一遍。
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 2022-10-07
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多