27. december 2008 - 23:56Der er
6 kommentarer og 1 løsning
Lidt LINQ, XML, Klasser hvad er smartest?
Hej eksperter.
Jeg er newbie i C# og jeg vil gerne vide det hele :oP
Jeg er i gang med at lave et program, der har en xml-fil med nogle mysql adresser i, som jeg gerne vil loade ind i en lisrBox og når jeg vælger en værdi, så skal nogle textbox'e udfyldes med værdierne fra xml-dokumentet.
Mit spørgsmål er så, skal jeg tage værdierne ud af xml-dokumentet og gemme i en klasse? (Det er den måde jeg har gjort det på nu, dog er der enkelte ting der ikke virker)
Eller:
Skal jeg hive de rigtige værdier ud hver gang med LINQ (Jeg har prøvet denne mulighed, med havde svært ved at sammenligne min streng fra listBox, i den WHERE sætning jeg lavede.)
XDocument xmldoc = XDocument.Load("Databases.xml"); var xmlDBS = from db in xmldoc.Descendants("Database") select new { Name = db.Element("Name").Value, Server = db.Element("Server").Value, Username = db.Element("Username").Value, Password = db.Element("Password").Value };
foreach (var db in xmlDBS) { lb_account_databaseList.Items.Add(new databaseObjHolder(db.Name, db.Server, db.Username, db.Password)); }
Håber ikke jeg har misforstået hele konceptet i C# :o)
Jeg har lavet et lille eksempel som viser 3 forskellige måder at gøre det på:
using System; using System.Windows.Forms; using System.Linq; using System.Xml.Linq;
namespace E { public class Database { public string Name { get; set; } public string Server { get; set; } public string User { get; set; } public string Password { get; set; } public override string ToString() { return "[" + Name + "," + Server + "," + User + "," + Password + "]"; } } public partial class MainForm : Form { public MainForm() { InitializeComponent(); string xml = @"<?xml version='1.0'?> <alldatabases> <database> <name>Foo</name> <server>foo.xxx.dk</server> <user>root</user> <password></password> </database> <database> <name>Bar</name> <server>bar.xxx.dk</server> <user>root</user> <password></password> </database> <database> <name>Local</name> <server>localhost</server> <user>root</user> <password></password> </database> </alldatabases>"; // parse XML XDocument doc = XDocument.Parse(xml); // XML -> anonymous class -> Database class -> ListBox var dbq1 = from db in doc.Element("alldatabases").Elements("database") select new { Name = db.Element("name").Value, Server = db.Element("server").Value, User = db.Element("user").Value, Password = db.Element("password").Value }; foreach(var db in dbq1) { listBox1.Items.Add(new Database { Name = db.Name, Server = db.Server, User = db.User, Password = db.Password }); } // XML -> Database class -> ListBox var dbq2 = from db in doc.Element("alldatabases").Elements("database") select new Database { Name = db.Element("name").Value, Server = db.Element("server").Value, User = db.Element("user").Value, Password = db.Element("password").Value }; foreach(var db in dbq2) { listBox2.Items.Add(db); } // XML -> anonymous class -> ListBox var dbq3 = from db in doc.Element("alldatabases").Elements("database") select new { Name = db.Element("name").Value, Server = db.Element("server").Value, User = db.Element("user").Value, Password = db.Element("password").Value }; foreach(var db in dbq3) { listBox3.Items.Add(db); } // setup listboxes listBox1.DisplayMember = "Name"; listBox1.SelectedIndex = 0; listBox2.DisplayMember = "Name"; listBox2.SelectedIndex = 0; listBox3.DisplayMember = "Name"; listBox3.SelectedIndex = 0; } void Button1Click(object sender, EventArgs e) { MessageBox.Show(listBox1.SelectedIndex + " " + listBox2.SelectedIndex + " " + listBox3.SelectedIndex); MessageBox.Show(listBox1.SelectedItem + " " + listBox2.SelectedItem + " " + listBox3.SelectedItem); MessageBox.Show(listBox1.SelectedItem.GetType().Name + " " + listBox2.SelectedItem.GetType().Name + " " + listBox3.SelectedItem.GetType().Name); } } }
Jeg vil anbefale metode #2, fordi der kan du bruge det selected objekt som Database.
Jeg ved ikke helt om det er mig der ikke fatter det helt, men jeg har en listBox og fire textBoxes. Når formen loader, så skal mit xml loades og når jeg vælger en database pålisten skal alle textBoxes udfyldes med de tilhørende data.
Jeg ved ikke hvordan jeg skal få data'erne ud af min listBox og ud i felterne. Jeg vil gerne vide metoden for at hente, splitte data op i variabler, så de kan bruges uafhængigt af hinanden.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.