2011-10-20 12 views
3

DataTableで単純な並べ替えを実行しようとしていますが、成功しません。 C#コードが表示されているが、修正のために必要なもの:並べ替えるDataTableを取得できません

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(); 
     } 
    } 
} 

私は実際に動作まともな例については、どこにでも見えたが、何も見つかりませんでした。

+0

を作成しているどのような結果ですか? – Birey

答えて

1
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

このコードを送信していただきありがとうございます。私のソースがソートされていないことがどういう意味なのかわかりません。私はそれがXMLが生成されるようにソートされないだろうと思います。それを並べ替えることのポイントではないでしょうか? –

+0

あなたの部分的な修正は、私が必要としていたものではありません。Console.ReadKey(); table.DefaultView.Sort = "changePricePercentage DESC"; foreachの(table.DefaultViewでDataRowView行) {foreachの(table.ColumnsでのDataColumnカラム) Console.WriteLineを( "{0}:{1}"、column.ColumnName、[column.ColumnName]行)。 Console.WriteLine(); Console.ReadKey(); } –

0

あなたはテーブルからソートしていますが、テーブルから書きます。 Console.Write(table.Rows [i] .ItemArray [j] .ToString()+ "\ t");を変更します。 Console.Write(t.Rows [i] .ItemArray [j] .ToString()+ "\ t");

0

は、例えば、データ のprecisingタイプでデータテーブルを作成して入力されたデータセット を使用しますが、[既定を反復処理するとき、私は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; 
関連する問題