2016-04-07 7 views
0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Xml.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace AS3_S5_CraigFenton 
{ 
    public partial class Form1 : Form 
    { 
     List<House> houseListings = new List<House>(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void buttongetListings_Click(object sender, EventArgs e) 
     { 
      if (openFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       XElement root = XElement.Load(openFileDialog1.FileName); 

       foreach(var House in root.Elements("House")) 
       { 
        House h = new House(); 

        h.HouseCode = House.Element("HouseCode").Value; 
        h.HouseType = House.Element("HouseType").Value; 
        h.Neighborhood = House.Element("HouseNeighborhood").Value; 
        h.Price = decimal.Parse(House.Element("Price").Value); 
        h.Bedrooms = int.Parse(House.Element("Bedrooms").Value); 

        houseListings.Add(h); 
       } 

       listViewlistings.Items.Clear(); 

       var sortedHouse = 
        from House in houseListings 
        orderby House.HouseType, House.Price 
        select House; 

       foreach (House h in sortedHouse) 
       { 
        ListViewItem listingsItem = new ListViewItem(); 

        listingsItem.Text = h.HouseCode; 
        listingsItem.SubItems.Add(h.HouseType); 
        listingsItem.SubItems.Add(h.Neighborhood); 
        listingsItem.SubItems.Add(h.Price.Tostring(0)); 
        listingsItem.SubItems.Add(h.Bedrooms.Tostring()); 

       } 


      } 
     } 
    } 
} 

Mein Fehler, den ich bekomme ist Int.parse kann nicht in .tostring konvertiert werden? Was mache ich falsch. Ich versuche, eine XML-Datei zu lesen und in eine Listview mit fünf Spalten zu posten. Ich habe diesen Fehler zu beheben und versuchen, nur die Datei zu importieren.C# Linq und Xml Lesung

+1

Können Sie in einem Versuch fangen und den Stack-Trace buchen? – codemonkeyliketab

+0

Wie sieht die XML-Datei aus? –

+0

Stellen Sie sicher, dass Sie kein 1/2 Badezimmer oder Schlafzimmer haben, was in der Immobilienbranche üblich ist. – jdweng

Antwort

0

Möglicherweise möchten Sie mit der Int32.TryParse() Methode prüfen, die evaluieren und eine boolean zurückgeben, um anzuzeigen, wenn Ihr Wert richtig oder nicht analysiert werden konnte:

int bedrooms; 
if(Int32.TryParse(House.Element("Bedrooms").Value, out bedrooms)) 
{ 
    // Your parse was successful, so set it 
    h.Bedrooms = bedrooms; 
} 
else 
{ 
    // Otherwise it wasn't in the correct format (a breakpoint 
    // here would be useful 
} 

Es ist wahrscheinlich, dass die Verwendung von Raumnummern könnte jedoch ausgedrückt werden als ein Doppel (zB 2.5 Schlafzimmer oder 3.5 Badezimmer), also sollten Sie überlegen, wie Sie mit diesen umgehen könnten, da diese allgemeinen Szenarien sind.

Darüber hinaus haben Sie ein paar Anrufe zu .Tostring(), die Sie sicherstellen sollten, dass Sie die richtige .ToString() verwenden, um Compiler-Probleme zu vermeiden.