To, co hledáte je asi podmínka v XPath, která vybere pouze prvek, který jste specifikoval prvním ComboBoxem. Mohlo by jít o něco takového:
nastaveni.SelectNodes("/prehled_kategorii/kat[@id=" & <id kategorie> & "]/podkat")
Doporučuji však nepoužívat XmlDocument ale novější implementaci XML ve Visual Basicu - XDocument:
Module VbNet
Sub Main()
Dim source = <?xml version="1.0" encoding="utf-8"?>
<prehled_kategorii>
<kat id="1" nazev="BBQ">
<podkat id="1" nazev="Pevné podpalovače"/>
<podkat id="2" nazev="Tekuté podpalovače"/>
<podkat id="3" nazev="Gelové podpalovače"/>
<podkat id="4" nazev="LAO"/>
<podkat id="5" nazev="Paliva do biokrbů"/>
<podkat id="6" nazev="Uhlí a brikety"/>
<podkat id="7" nazev="Ostatní sortiment"/>
</kat>
<kat id="2" nazev="Technické kapaliny">
<podkat id="1" nazev="Lihy"/>
<podkat id="2" nazev="Aceton"/>
<podkat id="3" nazev="Toluen"/>
<podkat id="4" nazev="Xylen"/>
<podkat id="5" nazev="Technické benzíny"/>
<podkat id="6" nazev="Lakové benzíny"/>
<podkat id="7" nazev="Petrolej D"/>
<podkat id="8" nazev="Petrolej techn."/>
<podkat id="9" nazev="Benzínové čističe"/>
<podkat id="10" nazev="Toluenové čističe"/>
<podkat id="11" nazev="Ostatní látky"/>
<podkat id="12" nazev="Ostatní směsi"/>
</kat>
</prehled_kategorii>
' kategorie
source.<prehled_kategorii>.<kat>.ToList().ForEach(Sub(k) Console.WriteLine(k.@id & ": " & k.@nazev))
Console.WriteLine()
Dim index As Integer
Console.WriteLine("Id: ")
Integer.TryParse(Console.ReadLine(), index)
' podkategorie
source.<prehled_kategorii>.<kat>.Where(Function(k) k.@id = index.ToString()).<podkat>.ToList().ForEach(Sub(p) Console.WriteLine(p.@id & ": " & p.@nazev))
Console.ReadLine()
End Sub
End Module
Ze souboru lze vytvořit instanci třídy XDocument pomocí metody XDocument.Load. Jak vidíte, kód se zjednoduší. Snadno získáte seznam kategorií (který můžete do ComboBoxu naplnit třeba přes vlasnost DataSource).
' Form.Load
ComboBox1.DataSource = source.<prehled_kategorii>.<kat>
' ComboBox1.SelectedItemChanged
ComboBox2.DataSource = source.<prehled_kategorii>.<kat>.Where(Function(k) k.@id = DirectCast(ComboBox1.SelectedItem, XElement).@id).<podkat>
Lze použít také indexer, ale ten ve Vašem případě použít nelze, protože id kategorií nekorespondují s jejich pořadími. Pro zajímavost však:
source.<prehled_kategorii>.<kat>(2).<podkat>
By vracelo podkategorie třetí (z pohledu pořadí umístění v DOM) kategorie.
|