Laden...

Dynamisch Xml DataGid aufbauen und in XML zurückschreiben.

Erstellt von JensW vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.267 Views
J
JensW Themenstarter:in
19 Beiträge seit 2008
vor 15 Jahren
Dynamisch Xml DataGid aufbauen und in XML zurückschreiben.

Hallo,

ich meinem Monentanem Projekt muss ich Dynamisch ein Datagrid aufbauen, die Daten kommen aus einer xml. alles Klar geht. wie nun kann ich Änderungen zurückschreiben. Ich habe schon einiges ausprobiert aber ich bin glaube ich zu doof.

Ich habe mich an einem Silverlight Beispiel orientiert und eine Dataloader Class für das laden der xml geschrieben.

public class DataLoader
    {
        public DataLoader(string xmlFile)
        {
            WebClient dataService = new WebClient();
            dataService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(dataService_DownloadStringCompleted);
            dataService.DownloadStringAsync(new Uri("http://localhost:4966/mlpWeb/Data/" + xmlFile));
        }
    void dataService_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            try
            {
                LoadedEventArgs args = new LoadedEventArgs
                {
                    Data = XDocument.Parse(e.Result)
                };
                DataLoaded(this, args);
            }
            catch
            {
                throw;
            }
        }
        public delegate void LoadedEventHandler(object sender, LoadedEventArgs args);   
        public event LoadedEventHandler DataLoaded;
    }
    public class LoadedEventArgs : EventArgs
    {
        public XDocument Data { get; set; }
    }
   
}

Dann noche eine Klasse als Helper welche mir die datei zerpflückt

public class Helper
    {
        public static IEnumerable<tabeldef> erzeugeteileliste(XDocument xDocument)
        {
            IEnumerable<tabeldef> teile = from teil in xDocument.Descendants("result")
                                        select new tabeldef
                                        {
                                            ID = (string)teil.Attribute("id"),
                                            Raum = (string)teil.Attribute("raum"),
                                            Etage = (string)teil.Attribute("etage"),
                                            Eingang = (string)teil.Attribute("eingang"),
                                            Ausgang = (string)teil.Attribute("ausgang"),
                                            Funktion = (string)teil.Attribute("funktion"),
                                            Status = (string)teil.Attribute("status"),
                                            Title = (string)teil.Element("titel").Value,
                                            Bauteileingang = (string)teil.Element("bauteileingang").Value,
                                            Funktioneingang = (string)teil.Element("funktioneingang").Value,
                                            Bauteilausgang = (string)teil.Element("bauteilausgang").Value,
                                            Funktionausgang = (string)teil.Element("funktionausgang").Value,
                                            Media = teil.Element("media")
                                        };
            return teile;
        }
    }
}

So und auf der XAML hab ich ein Datagrid welches ich dann über folgenden abschnitt befülle gaht super aber das updaten...??? kann ich den feldern events zuweisen bzw. aufrufen über fielchange oder gridchange oder so. und wie schreibe ich dann in die endsprechenden zeilen der xml datei zurück. Hab Ihr ne Idee.

void TeileLoader_DataLoaded(object sender, LoadedEventArgs args)
        {
            teile = Helper.erzeugeteileliste(args.Data);
            steuerungsliste.ItemsSource = teile;
        }

VIELEN DANK

582 Beiträge seit 2008
vor 15 Jahren

Hallo JensW.

Achte bitte beim nächsten Mal ein wenig auf deine Rechtschreibung. Das ist im ersten Moment sehr schwer zu lesen.

Zu deiner Frage. Die Daten kommen aus XML. Soweit klar.
Aber soll es ein Silverlight oder ein WPF Projekt werden?

Bei WPF gibt es dutzende Möglichkeiten XML zu lesen, bearbeiten und speichern. Eines der mächtigsten ist XMLDocument bzw XMLDataDocument (DataSet). Am sichersten ist es eine dieser Varianten zu verwenden.

Alternativ kann man auch XMLReader und XMLWriter verwenden. Hier muß man allerdings den kompletten Serialisierungsprozess selbst verwalten, ist aber deutlich schneller.

Bei XML kannst du immer nur eine ganze Datei schreiben, nicht einzelne Datensätze wie bei Datenbanken. Beim Lesen ist dies begrenzt möglich.

Gruß dat Tala

J
JensW Themenstarter:in
19 Beiträge seit 2008
vor 15 Jahren

Es soll ein Silverlight Projekt werden, oder ist es eigentlich schon.

Ich bin mir nur noch nicht Sicher ob ich das so mit einer xml hinbekomme.

Ein Projektmitglied programmiert gerade eine Schnittstelle welche mir eine xml liefert. Sagen wir mal config.xml, ich arbeite mit dieser und baue mir meine Fenster bzw. Datagrid auf, nun soll man in Datagrid Änderungen machen können und diese sollen dann in eine andere xml geschrieben werden welche dann von der Schnittstelle abgearbeitet wird und einen neue config.xml für das Silverlight Projekt kommt zustande welche ich wiederum lese und so weiter.

Hat jemand eine kleine Hilfe wie ich mir eine Class sende und lese XML schreiben soll.

Hatte mir das so gedacht Dataloader.cs in dieser dann readxml und write oder so als Funktion.

Da ich eigentlich noch Anfänger bin wäre ich um jede Hilfe wenn geht mit Code dankbar.

Danke schon mal...

582 Beiträge seit 2008
vor 15 Jahren

Die einfachste Variante ist, das du für deine XML ein DataSet anlegst und genau mit diesen DataSet arbeitest. Das Dataset übernimmt dann das schreiben und lesen der XML.

Gruß dat Tala

J
JensW Themenstarter:in
19 Beiträge seit 2008
vor 15 Jahren

Ja das wäre nicht schlecht aber ich kann den Verweis System.Data nicht benutzen da ich in Silverlight arbeite oder gibt es da was ?

582 Beiträge seit 2008
vor 15 Jahren

Ich habe leider nie mit Silverlight gearbeitet.

Gruß dat Tala

S
5 Beiträge seit 2008
vor 15 Jahren
XML WebService in Silverlight anzeigen

Hallo,

ich hab' volgendes Problem. Ich möchte mit Silverlight eine Web-Dienst anzeigen, die SQL-Datenbank Abfrage ausführt. So sieht die Code vom Web-Dienst aus:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;
using System.Xml;

[WebService(Name = "MyWebService", Description = "Einfach gucken", Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Um das Aufrufen dieses Webdiensts aus einem Skript mit ASP.NET AJAX zuzulassen, heben Sie die Auskommentierung der folgenden Zeile auf.
// [System.Web.Script.Services.ScriptService]
public class MyWebService : System.Web.Services.WebService
{
public MyWebService () {

    //Auskommentierung der folgenden Zeile bei Verwendung von Designkomponenten aufheben   
    //InitializeComponent();   
}  
[WebMethod(Description = &quot;Zurückgeben von aktiven Vendors bei Name angeordnet&quot;)]  
public string GetVendorList()  
{  
    SqlConnection SqlConn;  
    XmlReader rdr;  
    string ret = &quot;&quot;;  

    try  
    {  
        string connStr = @&quot;Data Source=NEXUS\SQLEXPRESS;Initial Catalog=AdventureWorks;Integrated Security=True&quot;;  
        SqlConn = new SqlConnection(connStr);  
        SqlConn.Open();  

        string sqlString = &quot;SELECT VendorID, AccountNumber, Name, CreditRating &quot; +  
            &quot;FROM Purchasing.Vendor &quot; +  
            //&quot;WHERE ActiveFlag = True&quot; +  
            &quot;ORDER BY Name &quot; +  
            &quot;FOR XML AUTO &quot;;  

        //string sqlString = &quot;SELECT * FROM Customers ORDER BY Name FOR XML AUTO&quot;;  

        SqlCommand command = new SqlCommand(sqlString, SqlConn);  

        rdr = command.ExecuteXmlReader();  
        rdr.Read();  
        while (rdr.ReadState != ReadState.EndOfFile)  
        {  
            ret += rdr.ReadOuterXml();  
        }  

        ret = &quot;&lt;vendors&gt;&quot; + ret + &quot;&lt;/vendors&gt;&quot;;  
        SqlConn.Close();  
        rdr.Close();  
    }  
    catch (Exception)  
    {  
           
    }  
    return ret;  
}  

    

}

Das Problem dabei ist, dass Silverlight kein ADO.NET unterstützt. So muss ich zu Solverlight Projekt diese Web-Dienst hinzufügen und dann in einem Control(z.B. DataGrid oder ListBox) anzeigen. Wäre dankbar für jede Hilfe