Kako napolniti Combo Box z XML-jem? C#
 
mckmck 23. jan 2014 12:15:22 Pridružen od:
11. maj 2012
519 objav
190 45 46
#1

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>
všeč(0) ni všeč(0) spam(0)
 
Spartacus 23. jan 2014 12:19:04 Pridružen od:
23. dec 2007
642 objav
828 38 4
#2

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 :)


všeč(0) ni všeč(0) spam(0)
 
mckmck 23. jan 2014 12:31:29 Pridružen od:
11. maj 2012
519 objav
190 45 46
#3

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 ?


všeč(0) ni všeč(0) spam(0)
 
Spartacus 23. jan 2014 12:45:01 Pridružen od:
23. dec 2007
642 objav
828 38 4
#4

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)


všeč(0) ni všeč(0) spam(0)
 
mckmck 24. jan 2014 10:53:25 Pridružen od:
11. maj 2012
519 objav
190 45 46
#5

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>


všeč(0) ni všeč(0) spam(0)
 
Spartacus 24. jan 2014 12:35:01 Pridružen od:
23. dec 2007
642 objav
828 38 4
#6

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);
}
}
všeč(0) ni všeč(0) spam(0)
 
mckmck 24. jan 2014 14:34:46 Pridružen od:
11. maj 2012
519 objav
190 45 46
#7

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!!!


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se