【问题标题】:List view not updating in vb.net列表视图未在 vb.net 中更新
【发布时间】:2014-07-14 12:16:21
【问题描述】:

我正在尝试使用 VB.net 将来自 Web 服务的播放列表信息显示到列表视图对象中

我已经设法从服务中获取 XML 并将其转换为字符串,并创建了一个循环以将信息输入到列表视图中。问题是它总是多次输入第一首歌的信息

此处显示来自 Web 服务的结果

for 循环内部的控制台日志是:

<name>Test Song one</name><artist>The tested</artist><album>To test</album>
<name>Test two</name><artist>the Tested</artist><album>To test</album>
<name>Test 3</name><artist>Tested</artist><album>To test</album>

下面是这个方法的代码:

        serviceReturn = service.getList(txtPlaylist.Text)
        MessageBox.Show(serviceReturn)
        Dim doc As New XmlDocument

        Dim result As XmlElement = doc.CreateElement("playlist")
        result.InnerXml = serviceReturn
        Dim lstName As XmlNode = result.SelectSingleNode("/name")

        Dim results As XmlNodeList
        results = result.GetElementsByTagName("song")
        lstSong.Items.Add(lstName.InnerText)
        Dim songNod As XmlNode
        Dim listName As ListViewItem
        For Each songNod In results
            listName = New ListViewItem
            Console.WriteLine(songNod.InnerXml)
            Dim lstSongName As XmlNode = songNod.SelectSingleNode("/song/name")
            Dim lstSongArtist As XmlNode = songNod.SelectSingleNode("/song/artist")
            Dim lstSongAlbum As XmlNode = songNod.SelectSingleNode("/song/album")

            listName = New ListViewItem(lstSongName.InnerText)
            listName.SubItems.Add(lstSongArtist.InnerText)
            listName.SubItems.Add(lstSongAlbum.InnerText)
            detailedView.Items.Add(listName)
            listName = Nothing
            lstSongName = Nothing
            lstSongArtist = Nothing
            lstSongAlbum = Nothing

        Next

谁能指出为什么每次都打印第一首歌?

任何帮助将不胜感激。

【问题讨论】:

  • 您需要添加新的 ListViewItems - 在 For/Each 循环的开头添加 listName = New ListViewItem
  • 我试过了,运行程序时得到了相同的输出
  • 我在上面的代码中添加了这一行,就在 console.writeLine() 之前
  • 很抱歉在两次中断之间没有看到它(如果有的话) - 去掉 listName = Nothing 行 - 它们是对象,所以你不想杀死你刚刚添加的那个。 (你现在有 2 个新闻)
  • 三遍确保结果不是第一项。这可能是读取问题,而不是列表视图。

标签: xml vb.net listview xpath


【解决方案1】:

尝试以这种方式更改您的 XPath 表达式

    Dim lstSongName As XmlNode = songNod.SelectSingleNode("./name")
    Dim lstSongArtist As XmlNode = songNod.SelectSingleNode("./artist")
    Dim lstSongAlbum As XmlNode = songNod.SelectSingleNode("./album")

您需要引用当前节点,就像现在一样,您总是从/playlist/song 引用相同的第一个节点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多