首页 > 解决方案 > XML 文件未显示在 Datagrid 视图 Visual Basic 中

问题描述

我应该输出每个球员的全名和击球率的显示。

我可以让 XML 文件在列表框中显示团队名称,但是当涉及到数据网格视图时,只显示列标题。

在尝试显示球员姓名和击球率方面,我哪里出错了?

Public Class frmBaseball
    Dim baseballdata As XElement = XElement.Load("Baseball.xml")

    Private Sub frmBaseball_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' get team names from base ball data and filters by player
        Dim teamQuery = From player In baseballdata.Descendants("player")
                        Let teamName = player.<team>.Value
                        Order By teamName Ascending
                        Select teamName
                        Distinct
        ' displays team names in listbox
        lstTeams.DataSource = teamQuery.ToList
    End Sub

    Private Sub lstTeams_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstTeams.SelectedIndexChanged
        ' Puts the player name and batting whose average was above the norm of team mates
        Dim selectedteam = lstTeams.Text
        Dim averagequery = From player In baseballdata.Descendants("player")
                           Let teamName = player.<team>.Value
                           Let hit = CDbl(player.<hits>.Value)
                           Let atbats = CDbl(player.<atbats>.Value)
                           Let playeraverage = hit / atbats
                           Where teamName = lstTeams.Text
                           Select playeraverage
        Dim teamaverage As Double = averagequery.Average
        Dim playerQuery = From player In baseballdata.Descendants("player")
                          Let playername = player.<name>.Value
                          Let teamName = player.<team>.Value
                          Let playeratbats = CDbl(player.<atbats>.Value)
                          Let playerhits = CDbl(player.<hits>.Value)
                          Let playeraverage = playerhits / playeratbats
                          Let formattedPlayerAverage = FormatNumber(playeraverage, 3)
                          Where teamName = selectedteam And playeraverage > teamaverage
                          Order By formattedPlayerAverage Descending
                          Select playername, formattedPlayerAverage

        ' Display player details in the data grid view
        dgvDisplay.DataSource = playerQuery.ToList
        dgvDisplay.CurrentCell = Nothing
        ' Set Column names to data grid view
        dgvDisplay.Columns("playername").HeaderText = "Player"
        dgvDisplay.Columns("formattedPlayerAverage").HeaderText = "Batting Average"

    End Sub
End Class

XML 文件示例:

<?xml version="1.0"?>
<!-- This file contains data on major league baseball players.-->
<Major_League_Baseball>
  <player>
    <name>Miguel Cabrera</name>
    <team>Tigers</team>
    <atBats>429</atBats>
    <hits>145</hits>
  </player>
  <player>
    <name>Dee Gordon</name>
    <team>Marlins</team>
    <atBats>615</atBats>
    <hits>205</hits>
  </player>
  <player>
    <name>Bryce Harper</name>
    <team>Nationals</team>
    <atBats>521</atBats>
    <hits>172</hits>
  </player>
  <player>
    <name>Paul Goldschmidt</name>
    <team>Diamondbacks</team>
    <atBats>567</atBats>
    <hits>182</hits>
  </player>
  <player>
    <name>Xander Bogaerts</name>
    <team>Red Sox</team>
    <atBats>613</atBats>
    <hits>196</hits>
  </player>
  <player>
    <name>Buster Posey</name>
    <team>Giants</team>
    <atBats>557</atBats>
    <hits>177</hits>
  </player>
  <player>
    <name>A.J. Pollock</name>
    <team>Diamondbacks</team>
    <atBats>609</atBats>
    <hits>192</hits>
  </player>
  <player>
    <name>Yunel Escobar</name>
    <team>Nationals</team>
    <atBats>535</atBats>
    <hits>168</hits>
  </player>
  <player>
    <name>Joey Votto</name>
    <team>Reds</team>
    <atBats>545</atBats>
    <hits>171</hits>
  </player>
  <player>
    <name>Jose Altuve</name>
    <team>Astros</team>
    <atBats>638</atBats>
    <hits>200</hits>
  </player>
  <player>
    <name>David Peralta</name>
    <team>Diamondbacks</team>
    <atBats>462</atBats>
    <hits>144</hits>
  </player>
  <player>
    <name>Michael Brantley</name>
    <team>Indians</team>
    <atBats>529</atBats>
    <hits>164</hits>
  </player>
  <player>
    <name>Lorenzo Cain</name>
    <team>Royals</team>
    <atBats>551</atBats>
    <hits>169</hits>
  </player>
</Major_League_Baseball>

标签: xmlvb.netdatagridview

解决方案


我不是 XML 专家,但是,代码似乎获得了无限的价值,teamaverage.因为它teamaverage是“无穷大”,那么所有玩家的平均值不会大于“无穷大”,并且在给定“Where”子句的情况下不会产生任何玩家.

Where teamName = selectedteam And playeraverage > teamaverage

在我的小测试中,出现这种情况的原因是代码中的拼写错误。

在这两个查询中,代码都有……</p>

Let atbats = CDbl(player.<atbats>.Value)

Let playeratbats = CDbl(player.<atbats>.Value)

根据提供的 XML,这应该是atBats大写的“B”。在此更改之后,代码按预期工作。

Let atbats = CDbl(player.<atBats>.Value)
Let playeratbats = CDbl(player.<atBats>.Value)

推荐阅读