Не удается получить DataTable для сортировки - PullRequest
3 голосов
/ 20 октября 2011

Я пытаюсь выполнить простую сортировку в DataTable, но безуспешно.Код C # указан в списке, но что нужно для исправлений:

using System;
using System.Data;
using System.Xml;

namespace XMLParser
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            DataTable table = new DataTable();
            table.Columns.Add("code", typeof (string));

            table.Columns.Add("changePricePercentage", typeof (double));
            // Create a new XmlDocument  
            XmlDocument doc = new XmlDocument();

            // Load data  
            doc.Load(@"C:\Users\ratman\.jstock\1.0.6\Canada\watchlist\My Watchlist\realtimestock.xml");

            XmlNodeList nodes = doc.SelectNodes("//org.yccheok.jstock.engine.Stock");
            int x = 0;
            foreach (XmlElement element in nodes)
            {
                table.Rows.Add(
                    element.SelectSingleNode("code").InnerText,
                    element.SelectSingleNode("changePricePercentage").InnerText);
                Console.WriteLine(
                    "{0}: {1} {2}",
                    x,
                    element.SelectSingleNode("code").InnerText,
                    element.SelectSingleNode("changePricePercentage").InnerText);
                ++x;
            }
            Console.ReadKey();

            DataTable t = null;
            t = table.Copy();
            t.DefaultView.Sort = "[" + t.Columns[0].ColumnName + "] asc";

            //output to console for debugging
            for (int i = 0; i < t.Rows.Count; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    Console.Write(table.Rows[i].ItemArray[j].ToString() + "\t");
                }
            }

            Console.ReadKey();
        }
    }
}

Я искал везде достойные примеры, которые действительно работают, но ничего не нашли.

Ответы [ 3 ]

1 голос
/ 20 октября 2011
XmlNodeList nodes = doc.SelectNodes("//org.yccheok.jstock.engine.Stock");

// Dynamically build your data table
DataTable table = new DataTable();
foreach (XmlElement field in nodes[0].SelectNodes(".//*[not(./*)]"))
    table.Columns.Add(new DataColumn(field.Name));

// Populate with data
foreach (XmlElement element in nodes)
{
    DataRow row = table.NewRow();
    foreach (DataColumn column in table.Columns)
        row[column.ColumnName] = element.SelectSingleNode("//" + 
            column.ColumnName).InnerText;
    table.Rows.Add(row);
}

// Show sorted results
table.DefaultView.Sort = "code asc";
foreach (DataRowView row in table.DefaultView)
{
    foreach (DataColumn column in table.Columns)
        Console.WriteLine("{0}: {1}", column.ColumnName, row[column.ColumnName]);
    Console.WriteLine();
}

Console.ReadKey();

Кажется, вы сортируете правильно, но по-прежнему получаете строки из несортированного источника.

0 голосов
/ 27 февраля 2012

используйте набор типизированных данных, создайте таблицу данных в уточняющем типе данных, например, я создал dsAppointment

  DsAppointment dsAppointmentTmp = new DsAppointment();
     DsAppointment dsAppointment = new DsAppointment();
    //add all appointment
     dsAppointmentTmp.Appointment.AddAppointmentRow(name,start,end,body)
    //use select(filter,sort(name of columns)
    DataRow[] rows1 = dsAppointmentTmp.Tables[0].Select(string.Empty, dsAppointmentTmp.Tables[0].Columns[1].ToString());

                foreach (DataRow thisRow in rows1)
                {
                        dsAppointment.Tables[0].Rows.Add(thisRow.ItemArray);

                }
    //return dsAppointment sorted
                    return dsAppointment;
0 голосов
/ 20 октября 2011

Вы сортируете t, но пишете из таблицы. Изменить Console.Write (table.Rows [i] .ItemArray [j] .ToString () + "\ t"); в Console.Write (t.Rows [i] .ItemArray [j] .ToString () + "\ t");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...