Kako napolniti Combo Box z XML-jem? C#

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