XML do DataGridView - jak skonwertować kolumnę do double?

0

Witam.

Wysyłam plik xml do dataGridView1, chciałbym aby działało sortowanie kolumny 3 (Columns[2]) według double, a nie string. Jak mogę ustawić tą kolumnę na double?

private void LoaddataGridView1()
        {
            XmlDataDocument xmldata = new XmlDataDocument();
            xmldata.DataSet.ReadXml(Application.StartupPath + "\\pojazdy.xml");

            dataGridView1.DataSource = xmldata.DataSet;
            dataGridView1.DataMember = "pojazd";
            MessageBox.Show("Ok");
            dataGridView1.Columns[0].HeaderCell.Value = "Nazwa";
            dataGridView1.Columns[1].HeaderCell.Value = "Wielkość baku";
            dataGridView1.Columns[2].HeaderCell.Value = "Średnie spalanie";
            

            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                dataGridView1.Rows[i].Cells[2].Value = double.Parse(dataGridView1[2, i].Value.ToString());
            }

        }
 

Pozdrawiam i z góry dziękuję za odpowiedź.

0

Ustaw jej format:

this.dataGridView1.DefaultCellStyle.Format = "N2";
0

Nie sortuje liczb poprawnie. Sortuje tylko pierwszą cyfrę z każdego (dla niego 10 jest mniejsze od 2 bo czyta tylko cyfrę 1)

public void LoaddataGridView1()
        {
            XmlDataDocument xmldata = new XmlDataDocument();
            xmldata.DataSet.ReadXml(Application.StartupPath + "\\pojazdy.xml");

            dataGridView1.DataSource = xmldata.DataSet;
            dataGridView1.DataMember = "pojazd";
            
            dataGridView1.Columns[0].HeaderCell.Value = "Nazwa";
            dataGridView1.Columns[1].HeaderCell.Value = "Wielkość baku";
            dataGridView1.Columns[2].HeaderCell.Value = "Średnie spalanie";
            

            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                this.dataGridView1.DefaultCellStyle.Format = "N2";

                dataGridView1.Rows[i].Cells[2].Value = double.Parse(dataGridView1[2, i].Value.ToString());
               
                
            }
 
0

U mnie działa. ;P

Jak wyglądają te dane? Możesz pokazać fragment pliku?

0
somekind napisał(a):

U mnie działa. ;P

Jak wyglądają te dane? Możesz pokazać fragment pliku?

Plik xml, chodzi o <sredniespalanie>

<?xml version="1.0" encoding="ISO-8859-1"?>
<pojazdy>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>2</wielkoscbaku>
    <sredniespalanie>2</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>megane</nazwa>
    <wielkoscbaku>4</wielkoscbaku>
    <sredniespalanie>2</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>2</wielkoscbaku>
    <sredniespalanie>10,5</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>2</wielkoscbaku>
    <sredniespalanie>11,5</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>2</wielkoscbaku>
    <sredniespalanie>2,5</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>2</wielkoscbaku>
    <sredniespalanie>4</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>2</wielkoscbaku>
    <sredniespalanie>8</sredniespalanie>
  </pojazd>
  <pojazd>
    <nazwa>tss</nazwa>
    <wielkoscbaku>30</wielkoscbaku>
    <sredniespalanie>20,2</sredniespalanie>
  </pojazd>
</pojazdy>
0

Problem polega na tym, że takie coś jak: 20,2 to dla programu jest tekst, a nie liczba. Separatorem dziesiętnym w typie double jest kropka, a nie przecinek, jak w Twoim, polskim pliku.

Podczas parsowania musisz wymusić, aby zostały zastosowane odpowiednie ustawienia regionalne, np. tak:

var polishCulture = new CultureInfo("pl-PL");
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    dataGridView1.Rows[i].Cells[2].Value = double.Parse(dataGridView1[2, i].Value.ToString(), polishCulture);
}

No i uzywanie XmlDataDocument jest nieco ryzykowne. Kiedyś to przestanie działać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1