Laden...

XML -> DataGrid

Letzter Beitrag vor 17 Jahren 17 Posts 2.917 Views
XML -> DataGrid

Hallo,

gibt es ein Tutorial wie ich Daten aus einer XML-Datei in ein Datagrid laden kann?
Elemente sollen dabei die Spaltenbezeichnungen sein.

Danke
Peter

Das erste hat sich erledigt,....allerdings habe ich ein kleines Problem bzw. Wunsch.

ich möchte diese XML-Datei


<?xml version="1.0" encoding="ISO-8859-1"?>
<Umweltkennzahlen>
<Costcenter id="PMA">
<Kennzahl id="Strom">
<Wert>930,1</Wert>
<Einheit>kWh</Einheit>
</Kennzahl>
<Kennzahl id="Wasser">
<Wert>34023</Wert>
<Einheit>m^3</Einheit>
</Kennzahl>
<Kennzahl id="irgendwas">
<Wert>35634</Wert>
<Einheit>l</Einheit>
</Kennzahl>
</Costcenter>
</Umweltkennzahlen>

So darstellen wie im Anhang. Leider muss ich mich erstmal durch die Hierarchie klicken. Was muss ich machen?

Hier der CodeSchnipsel


		void LadenToolStripMenuItemClick(object sender, System.EventArgs e)
		{
			OpenFileDialog xmlfileopen = new OpenFileDialog();
            xmlfileopen.Title = "XML-Datei öffnen";
            xmlfileopen.Filter = "XML-Datei (*.xml)|*.xml";
            if (xmlfileopen.ShowDialog() == DialogResult.OK)
            {
	            try{
            	FileLabel.Text = xmlfileopen.FileName;
	            this.KennzahlenDaten = new DataSet("Kennzahlen des CostCenters");
	            this.KennzahlenDaten.ReadXml(xmlfileopen.OpenFile());
				this.tab_daten.DataSource = this.KennzahlenDaten;
				this.tab_daten.DataMember = "Umweltkennzahlen";
	            }
	            catch{

	            }

            }

du hast einen falschen Ansatz gewählt! Leichte wäre es die daten in ein Dataset zu Laden.
Mit Dataset.loadxml()
danach einfach das dataset an das grid binden!
ISt wohl die einfachste Möglichkeit

tab_daten ist eigentlich ein Grid.

also ich hab es mal so versucht jedoch bekomm ich dann nichts mehr angezeigt



/*
 * Erstellt mit SharpDevelop.
 * Benutzer: klofisch
 * Datum: 08.12.2006
 * Zeit: 20:47
 * 
 * Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
 */

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Xml;

namespace Kennzahlenadmin
{
	/// <summary>
	/// Description of MainForm.
	/// </summary>
	public partial class MainForm
	{

		[STAThread]
		public static void Main(string[] args)
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			Application.Run(new MainForm());
		}
//		public DataSet KennzahlenDaten;	
		public MainForm()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		void LadenToolStripMenuItemClick(object sender, System.EventArgs e)
		{
			OpenFileDialog xmlfileopen = new OpenFileDialog();
            xmlfileopen.Title = "XML-Datei öffnen";
            xmlfileopen.Filter = "XML-Datei (*.xml)|*.xml";
            if (xmlfileopen.ShowDialog() == DialogResult.OK)
            {
	            try{
            	FileLabel.Text = xmlfileopen.FileName;
	            DataSet KennzahlenDaten = new DataSet();
//				XmlDocument xmlinput1 = new XmlDocument();
//				xmlinput1 = KennzahlenDaten.ReadXml(xmlfileopen.OpenFile());
	            this.tab_daten.DataSource = KennzahlenDaten.loadxml(xmlfileopen.OpenFile());
				this.tab_daten.DataMember = "Umweltkennzahlen";
	            }
	            catch{

	            }

            }
		}
		private void XMLRead()
		{
			
			
		}
	}
}



Erstmal ein gesundes neues Jahr.

Hallo Klofisch,
ich weiss nicht ob es noch aktuell ist.
Bin gerade selber am Forschen bezüglich XML-DataSet und habe das mal gleich ausprobiert und so klappt es bei mir und ich erhalte die Darstellung wie im gezeigten Bild.


DataSet KennzahlenDaten = new DataSet();
KennzahlenDaten.ReadXml(xmlfileopen.OpenFile());
this.tab_daten.DataSource = KennzahlenDaten.Tables["Kennzahl"];

Gruß falangkinjau

Vielen Dank. Ein Frage hab ich dann noch 🙂)
Wie kann ich die Costcenter-id aus in ein Testfeld schreiben,...also quasi als Überschrift?

Danke
Peter

Hallo,

so:


this.tab_daten.CaptionText = String.Format("Kostentstelle: {0}", (KennzahlenDaten.Tables["CostCenter"]).Rows[0][1].ToString());

Aber Achtung, das ist nur die Richtung. Sobald dein XML weitere CostCenter hat, dann mußt du dir das dynamisch gestalten. Dann hast du bzw. der Anwender die Wahl.


...(KennzahlenDaten.Tables["CostCenter"]).Rows[?][1].ToString()

Gruß falangkinjau

na da soll nix ausgewählt werden,.....brauch es nur als Info.

Vielen Dank,.....
Peter

mmh Wie bekomm ich es hin das eine Datei auch genau so geschrieben wird?

Bis jetzt kam nur das mit WriteXml raus 😦. Muss ich da mit ner XSD oder so hantieren?



<?xml version="1.0" standalone="yes"?>
<CostCenter>
  <Kennzahlen>
    <Bezeichnung>kehf</Bezeichnung>
    <Wert>9898</Wert>
    <Einheit>kjh</Einheit>
  </Kennzahlen>
  <Kennzahlen>
    <Bezeichnung>iuoho</Bezeichnung>
    <Wert>9809</Wert>
    <Einheit>kjlhbkj</Einheit>
  </Kennzahlen>
  <Kennzahlen>
    <Bezeichnung>8790</Bezeichnung>
    <Wert>89798</Wert>
    <Einheit>oihuhgol</Einheit>
  </Kennzahlen>
</CostCenter>

Hallo klofisch,

ich kann nur vermuten was du meinst.

Wo und auf was genau wendest du WriteXML an? Soll die Struktur des XML-File genau so aussehen wie am Anfang, also mit Umweltkennzahlentag?
Codeschnipsel!

Gruß falangkinjau

Ja also ich habe ein DataGrid in dem die Daten eingetragen werden sollen, als Quelle hat es ein Dataset. Beim Speichern der Daten soll eine XML-Datei rauskommen, die genauso aufgebaut ist, wie die oben im Thread.

Hallo klofisch,

da hast du bestimmt einen Dreher in deinem Code.

Du brauchst dein DataSet nur zu speichern und im XML-File sollten alle Daten stehen. Natürlich auch die, die der User geändert und mit einem Enter bestätigt hat.

Dein Beispiel hat bei mir hier so funktioniert.


KennzahlenDaten.WriteXml( @"PathUndDatei");

Gruß falangkinjau

Hallo, Leute!
Neulich wollte ich mal ein Programm schreiben, in dem ich eine XML-Datei einlesen, darstellen und verändern kann. Zum Darstellen wollte ich gerne eine Datagrid verwenden. Ich hab aba kein Plan wie ich da Daten einfüge...
HILFE!!!
🙁 😭

Hallo gobbo,

bitte Formatierungen sparsam benutzen ==> unnötige Formatierungen entfernt.

Xml in DataTable oder DataSet einlesen und dieses an das DataGrid binden. Alles weitere in den SDK-/MSDN-Doku, die auch Codebeispiel mitbringt.

herbivore

thx
wo finde ich die?

Wie kann ich jetzt wenn ich mein xml in mein dataset eingelesen habe in der Tabelle aus einer Spalte eine Checkbox machen?
Also angenommen ich habe die Werte True & False das er dann aus der Spalte "Bool" ne Checkbox macht.

mFg Chris