Kako napolniti Combo Box z XML-jem? C#
2 naročnika
2 naročnika
Pozdravljeni.
Zanima me kako bi v C# napolnil Combo Box z XML-jem?
Sedaj sem naredil to:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace Avtorski_Honorar
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
XmlDocument doc = new XmlDocument();
doc.Load("XML.xml");
XmlNodeList colorList = doc.SelectNodes("record");
foreach (XmlNode dataSource in colorList)
{
comPosta.Items.Add(dataSource.Attributes["PostnaStevilka,NazivPoste"].Value.ToString());
}
vendar mi noče napolniti.
XML pa je tak kot xml :) :
<record>
<PostnaStevilka>8341</PostnaStevilka>
<NazivPoste>Adlešiči</NazivPoste>
</record>
<record>
<PostnaStevilka>5270</PostnaStevilka>
<NazivPoste>Ajdovščina</NazivPoste>
</record>
6 odgovorov
Takole: http://stackoverflow.com/questions/4721436/binding-xml-to-combobox ?
Sicer pa:
dataSource.Attributes[**"PostnaStevilka,NazivPoste"**].Value.ToString()
Tole ne bo šlo skozi, indekserja ne moreš uporabit tako, da bi mu kar z vejico naštepal, kaj ti mora vrnit - bo treba kar vsakega posebej :)
Sem poskusil tudi vsako posebej pa mi še vedno ne naredi.
Pri tej:
comboBox1.DataSource = obj.Descendants("record").Select(x => new
{
ManagerDesig = x.Attribute("PostnaStevilka).Value,
ManagerID = x.Attribute("NazivPoste").Value
})
.ToList();
mi tisti obj ni jasen kaj naj tam tja??
Pri tej drugi pa tudi manjka pomoje
XDocument obj = XDocument.Load("Managers.xml");
da ve iz katerega dokumenta naj on pobira ?
Ti gledaš ".Attributes", teh pa nimaš. Glede na tvoj XML moraš gledat dataSource.Item["PostnaStevilka"] in dataSource.Item["NazivPoste"].
(nisem testiral te opcije, pišem iz glave)
Ponovno pozdravljeni.
Sedaj mi je uspelo napolniti combo-ta in sicer tako:
{
try
{
StreamReader sr = new StreamReader(@"C:\GameTest\Avtorski_Honorar\Avtorski_Honorar\bin\Debug\XML.xml");
string line = sr.ReadLine();
while (line != null)
{
comPosta.Items.Add(line);
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Napaka: " + ex.Message);
}
Problem je, da mi zapolni s telim XML-jem tudi recimo <PostnaStevilka></PostnaStevilka>
Evo, preverjena koda tvojega prvega primera. Ampak bodi pozoren, da bo XML well-formed - torej, da ima root node (v primer sem dodal <records>). Drugače bo prišlo do napake.
Če izvirni XML tega nima, preberi XML kot string, mu sam dodaj root node in uporabi LoadXml (kot v mojem primeru).
protected void Page_Load(object sender, EventArgs e)
{
string xmlString = @"<records><record>
<PostnaStevilka>8341</PostnaStevilka>
<NazivPoste>Adlešiči</NazivPoste>
</record>
<record>
<PostnaStevilka>5270</PostnaStevilka>
<NazivPoste>Ajdovščina</NazivPoste>
</record></records>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
XmlNodeList colorList = doc.SelectNodes("records//record");
foreach (XmlNode dataSource in colorList)
{
comPosta.Items.Add(dataSource["PostnaStevilka"].InnerText + " " + dataSource["NazivPoste"].InnerText);
}
}
Spartacus:
Evo, preverjena koda tvojega prvega primera. Ampak bodi pozoren, da bo XML well-formed - torej, da ima root node (v primer sem dodal <records>). Drugače bo prišlo do napake.Če izvirni XML tega nima, preberi XML kot string, mu sam dodaj root node in uporabi LoadXml (kot v mojem primeru).
protected void Page_Load(object sender, EventArgs e) { string xmlString = @"<records><record> <PostnaStevilka>8341</PostnaStevilka> <NazivPoste>Adlešiči</NazivPoste> </record> <record> <PostnaStevilka>5270</PostnaStevilka> <NazivPoste>Ajdovščina</NazivPoste> </record></records>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlString); XmlNodeList colorList = doc.SelectNodes("records//record"); foreach (XmlNode dataSource in colorList) { comPosta.Items.Add(dataSource["PostnaStevilka"].InnerText + " " + dataSource["NazivPoste"].InnerText); } }
Super hvala ti!!!