このプロセスは簡単に思えますが、実際にはそれほど簡単ではありません。ポイントはOrdinal、列の をよりx低い序数a(a < x) に変更すると、aとの間の序数を持つすべての列xが右にシフトxされます。 がより高い序数b(b > x) に変更された場合、と の間xの序数はb左にシフトされます。列の序数が変更されるたびに、何らかの更新を実行する必要があります。
indices次のように、必要な順序で列のリストを準備できます。
List<int> indices = new List<int>{1,2,0,7,4,5,3,6};
for(int i = 0; i < indices.Count; i++){
dataTable.Columns[indices[i]].SetOrdinal(i);
if(indices[i] > i){
for(int j = i; j < indices.Count; j++)
if(indices[j] >= i && indices[j] < indices[i]) indices[j]++;//Right shifted
}
else if(indices[i] < i){
for(int j = i; j < indices.Count; j++)
if(indices[j] >= indices[i] && indices[j] < i) indices[j]--;//Left shifted
}
}
ColumnNameまたは、次のように、必要な順序でリストを準備することもできます。
List<string> columns = new List<string>{"Column2","Column1","Column5","Column3","Column6","Column4"};
//The same code as above