データテーブル行の順番を任意で並び替えたい

データテーブルの行の順番を指定した順番(できれば配列形式で指定が理想)に入れ替えることは可能でしょうか。

・Before
ID,Name,Number
1,あ,2
2,い,0
3,う,0
4,え,1
5,お,4
・After
ID,Name,Number
1,あ,2
3,う,0
4,え,1
2,い,0
5,お,4
このような形です。
データテーブルを並べ替えのアクティビティを試してみたのですが、私の理解では昇順・降順での並べ替えしかできませんでした。
新しいデータテーブルを作成して〇行目〇列目のデータは□行目□列というふうにデータを一つ一つ指定するしか方法はないのでしょうか・・・

新たにInt32の列を設けて、そこに並び替えたい数値を入れてから、新たに設けた列で並び替え。
あとで、新たに設けた列を削除する。

ちょっとまどろっこしいですね

こんにちは

例えば以下で可能かと思います。

式の部分は

dt = dt.AsEnumerable.OrderBy(function(r) Array.IndexOf(arrString,r("Name").toString())).CopyToDataTable()

です。

1 Like

ありがとうございます
まずHANACCHIさんの方法を理解しようとしているのですが、

新たにInt32の列を設けて、そこに並び替えたい数値を入れてから

この時点でつまづいております。
Beforeのデータテーブルに「データ列を追加」アクティビティで規定した順番の配列を入れようとしたのですが、
「Integerの1次元配列の値をSystem.Data.DataColumnに変換できません」
と出てエラーが発生しています。どうすれば希望の配列をDataColumn型にできるのでしょうか・・・

「データ列を追加」は、列の枠を追加しただけですので、その後「繰り返し(各行)」を使って、その追加した列に、「規定した順番」を順に代入していくのです。配列からいきなりはできません。

ありがとうございます。

「データ列を追加」は、列の枠を追加しただけですので、

これでようやく理解できました。
別に変数Num(int)を宣言し、
繰り返し(各行)内でNumをインクリメントしながら追加した列にarr(Num)を代入することでできました。

1 Like

Yoichiさん
ありがとうございます。あらかじめ宣言した配列通りに並べ替えようと思うとLINQを使う必要があるわけですね。
ちょっと使いこなせるかわかりませんが、チャレンジしてみようと思います。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.