DataGrid kann sich nicht mit Werten füllen lassen:
-
Ich habe eine Xmldatei, die ich einlesen will, um sie dann in eine Datenbank zu schreiben. Jetzt will ich die Xmldatei aber noch zusätzlich in einem Datagrid darstellen. Deshalb habe ich eine Datatable erstellt und mit den dazugehörigen Werten gefüllt. Soweit geht das ja auch ganz gut, aber wenn ich jetzt das Datagrid mit Werten füllen will, kommt eine Fehlermeldung:
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio Projects\WindowsApplication1\Form1.cs(242): An object reference is required for the nonstatic field, method, or property 'WindowsApplication1.Form1.logGrid'
Das ist der Quelltext dieser Zeile(und noch der von ein paar vorher):
//Was geschieht, wenn eine neue Xml-Datei gefunden wird? dataexchange.xml dxcXml=new dataexchange.xml(); dxcXml.praseXmlDoc(eventAction.FullPath); //Hier soll das LogGrid gefüllt werden:(Die nachfolgende Zeile verursacht den Fehler) logGrid.DataSource=dxcXml.MyDTable.DefaultView;
Was muss ich machen, damit ich das DataGrid befüllen kann?
mfg
Lutz
-
1. was ist dataexchange.xml??
2. warum nicht einfach so: logGrid.DataSource=dxcXml.MyDTable; ??
-
zu 1. "dataexcahnge" ist der Namespace für meine XML-Klasse "xml"
zu 2. logGrid.DataSource=dxcXml.MyDTable; geht auch nicht!Muss ich das LogGrid irgentwie initialisieren? Ich habe es einfach und und dann auser dem logGrid.DataSource=dxcXml.MyDTable; nichts damit gemacht.
-
ich habe jetzt keine zeit das zu testen, aber ich vermute, das problem liegt an deiner parse-funktion.
es ist nämlich so, dass DataGrid erstellt für die Darstellung einer Tabelle, sofern nicht vorhanden, ein TableStyle und in de Style für jede Spalte ein DataColumnStyle. Damit Deine Tabelle einem TableStyle zugeördnet werden kann, wird in dem TableStyle die Eigenschaft MappingName verwendet, die mit dem Namen der Tabelle korrespondiert. Das Gleiche gilt auch für die Spalten.
Und meine Vermutung ist, dass die Spalten keinen Namen haben.
-
Ok, ich schicke hier mal den Code, wie ich die DataTable erstelle und mit Werten fülle:
using System; using System.Xml; using System.Data; namespace dataexchange { /// <summary> /// Hier sind alle Funktionen, die etwas mit dem Datenaustausch zu tuen haben! /// </summary> public class xml { //Dataset initialisieren: public DataTable MyDTable = new DataTable("Elemente"); DataColumn MyDColumn = null; DataRow MyRow = null; public xml() { // // TODO: Add constructor logic here // } public void praseXmlDoc(string location) { //HIer wird das Dokument geprast XmlTextReader xmlReader=new XmlTextReader(location); while(xmlReader.Read()) { //Hier wird das Ding eingelesen if (xmlReader.HasAttributes) { for (int i = 0; i < xmlReader.AttributeCount; i++) { xmlReader.MoveToAttribute(i); MyDColumn = MyDTable.Columns.Add(xmlReader.Name); MyRow = MyDTable.NewRow(); MyRow[xmlReader.Name]=xmlReader.Value; } } } } } }
Das ist jetzt die Klasse xml!
DataTable ist eine globale Variable, die die Datatable enhält.
-
Wenn du noch deine XML Datei postet, dann versuche ich am WE Zeit zum Testen zu finden.
-
Ok, Schonmal vielen Dank im Vorraus!
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <OF_TEXTMESSAGE MessageId="192" SendAt="28.11.2003 16:44:44" Sender="Admin" Receiver="MCT123456" Version="1.0"> <Text>Hier ist die Nachricht</Text> </OF_TEXTMESSAGE>
-
Keine Ahnung, was du da falsch machst. Bei mir hat einwandsfrei funktioniert.
private void button1_Click(object sender, System.EventArgs e) { DataGrid dataGrid1 = new DataGrid(); dataGrid1.Parent = this; xml x = new xml(); x.praseXmlDoc(@"D:\Projects (.NET)\WindowsApplication1\test.xml"); dataGrid1.DataSource = x.MyDTable; }
Bist du sicher, dass dein DataGrid zum Zeitpunkt des Aufrufes überhaupt existiert?
-
Ich hab es im VStudioeditor ordnungsgemäß getsetzt! Das ist ja das, was mich stutzig macht!
Ich glaube ich probiere das mal in einem neuen Projekt aus, und gucke nach, woran das liegt!
BESTEN DANK FÜR DEINE HILFE