下記のようなデータがdatatableに格納されていたとして、”Value”列、”Name”列の値を並び替えたうえでDataRowに値を格納する方法を紹介します。
まずValue列で降順で並び替え、Value列の値が同じ場合はName列で昇順で並び替えを行います。
ソースコード
下記がソースコードとなります。DataTableのSelectメソッドを使って並び替えを行っています。並び替えた結果はDataRowに格納します。
コンソールアプリケーションに下記ソースを張り付けて挙動を確認してみてください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//テーブルの作成し、グラフへプロットするデータを保管する。
System.Data.DataTable Table = new System.Data.DataTable();
Table.Columns.Add("ID", typeof(int));
Table.Columns.Add("Name", typeof(string));
Table.Columns.Add("Value", typeof(double));
Table.Rows.Add(new Object[] { 1, "AAA", 120 });
Table.Rows.Add(new Object[] { 2, "BBB", 220 });
Table.Rows.Add(new Object[] { 3, "CCCCC", 60 });
Table.Rows.Add(new Object[] { 4, "DD", 430 });
Table.Rows.Add(new Object[] { 5, "E", 800 });
Table.Rows.Add(new Object[] { 6, "FFFFFFF", 360 });
Table.Rows.Add(new Object[] { 7, "GGGG", 990 });
Table.Rows.Add(new Object[] { 8, "HHHHHHHHHHH", 150 });
Table.Rows.Add(new Object[] { 9, "IIII", 360 });
Table.Rows.Add(new Object[] { 10, "JJJJJJJ", 960 });
Table.Rows.Add(new Object[] { 11, "K", 740 });
Table.Rows.Add(new Object[] { 12, "L", 960 });
Table.Rows.Add(new Object[] { 13, "MMM", 780 });
Table.Rows.Add(new Object[] { 14, "N", 800 });
Table.Rows.Add(new Object[] { 15, "OOOOOOOO", 690 });
//並び変え前の値を表示する
Console.WriteLine("並び替え前");
for (int i1 = 0; i1 < Table.Rows.Count - 1; i1++)
{
Console.WriteLine(string.Format("ID:{0:-10},Name:{1:-10},Value:{2:-10}", Table.Rows[i1][0].ToString(), Table.Rows[i1][1].ToString(), Table.Rows[i1][2].ToString()));
}
Console.WriteLine("");
//テーブルのレコードの並び替えを行う。
// ①Value列で降順に並び替える。
// ②Name列で昇順に並び替える。
DataRow[] Rows = Table.Select("", "Value DESC, Name ASC");
//並び変え後の値を表示する
Console.WriteLine("並び替え後");
for (int i1 = 0; i1 < Table.Rows.Count - 1; i1++)
{
Console.WriteLine(string.Format("ID:{0:-10},Name:{1:-10},Value:{2:-10}", Rows[i1][0].ToString(), Rows[i1][1].ToString(),Rows[i1][2].ToString()));
}
Console.Read();
}
}
}
参考になれば幸いです。